Посмотрите на аргумент na.pad
на rollmean()
и установите его на TRUE
. Пропустил последний бит; поэтому вам также нужно выровнять средства вправо:
> input <- c(3,7,3,5,2,9,1,4,6,4,7,3,7,4)
> rollmean(input, 4, na.pad = TRUE, align = "right")
[1] NA NA NA 4.50 4.25 4.75 4.25 4.00 5.00 3.75 5.25 5.00 5.25 5.25
Если вам не нужны эти вещи в виде матрицы из 1 столбца, отбросьте вызовы cbind()
.
ОК, из дальнейших разъяснений кажется, что вы хотите вычислить некоторые средства, которые на самом деле не сопоставимы с другими средствами в векторе результатов. Но если ты должен ...
> k <- 4
> c( cumsum(input[1:(k-1)]) / 1:(k-1), rollmean(input, k, align = "right") )
[1] 3.000000 5.000000 4.333333 4.500000 4.250000 4.750000 4.250000 4.000000
[9] 5.000000 3.750000 5.250000 5.000000 5.250000 5.250000
Поскольку ФП заинтересован в оценке МА для подгонки к нему сплайна, возможно, было бы полезно посмотреть, что вы получаете, делая это, вместо оценки сплайна непосредственно из данных.
> ## model observed data
> mod <- smooth.spline(seq_along(input), input, df = 3)
> ## plot data and fitted spline
> plot(seq_along(input), input)
> lines(predict(mod, seq_along(input)), col = "red", lwd = 2)
> ## model the fudged MA
> mod2 <- smooth.spline(seq_along(input),
+ c( cumsum(input[1:(k-1)]) / 1:(k-1),
+ rollmean(input, k, align = "right") ), df = 3)
> ## add this estimated spline
> lines(predict(mod2, seq_along(input)), col = "blue", lwd = 2)
Тебе трудно понять разницу между этими двумя
и кривые отклоняются больше всего в начале, где вы форсируете оценку МА.