Как добавить весовые коэффициенты в pspline :: smooth.Pspline R эквивалент функции csaps () в MATLAB - PullRequest
0 голосов
/ 26 марта 2019

Я пытаюсь повторить функцию 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, чтобы получить те же результаты с этими весами.

Заранее спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...