Я пытаюсь повторить функцию csaps Matlabs в r.Я успешно достиг этого с помощью этого вопроса.
Однако возникают проблемы, когда я пытаюсь изменить весовые коэффициенты в обоих случаях.В MATLAB веса основаны на измерении ошибки, однако я не уверен, что значения w соответствуют функции pspline в r, и это дает мне другой результат
https://uk.mathworks.com/help/curvefit/csaps.html
Вот некоторыепример кода: ---------------- В MATLAB ------------------
% Run spline with weights = 1
Axis = 1:100;
Yval = sin((1:100)/20 *(2*pi));
weights = ones(size(Yval));
p = 0.0005;
pp = csaps(Axis, Yval, p, [], weights);
smoothed = fnval(pp, Axis)';
% Run spline with some select weights = 0
weights([5,8,10,15,17,19,24,...
26,28,33,36,40,44,46,...
49,50,55,60,64,68,74,...
79,81,85,88,93,99,100])=0
pp2 = csaps(Axis, Yval, p, [], weights);
smoothed2 = fnval(pp2, Axis)';
plot(Axis,Yval)
hold on
plot(Axis,smoothed)
plot(Axis,smoothed2)
--------------- IN R ------------------
% Run spline with weights = 1
Axis <- 1:100
Yval <- sin((1:100)/20 *(2*pi))
weights <- rep(1,length(Yval))
p <- 0.0005
pp <- pspline::smooth.Pspline(
x = Axis, y =Yval, w = weights, spar = (1-p) / p )
smoothed <- c(predict(pp,Axis))
% Run spline with some select weights = 0
weights[c(5,8,10,15,17,19,24,
26,28,33,36,40,44,46,
49,50,55,60,64,68,74,
79,81,85,88,93,99,100)] <- 0.00000000000000001
pp2 <- pspline::smooth.Pspline(
x = Axis, y =Yval, w = weights, spar = (1-p) / p )
smoothed2 <- c(predict(pp2,Axis))
plot(Yval,t='l')
lines(smoothed,col = 2)
lines(smoothed2,col = 3)
Результаты в R и Matlabидентичны (при округлении) без весов, но когда весы введены, результаты теперь отличаются.Оба работают под управлением сплайн-функций FORTRAN.Я не могу понять, как запустить pspline в R, чтобы получить те же результаты с этими весами.
Заранее спасибо!