У меня есть следующий фрейм данных:
lm mean resids sd resids resid 1 resid 2 resid 3 intercept beta
1 0.000000e+00 6.2806844 -3.6261548 7.2523096 -3.6261548 103.62615 24.989340
2 -2.960595e-16 8.7515899 -5.0527328 10.1054656 -5.0527328 141.96786 -1.047323
3 -2.960595e-16 5.9138984 -3.4143908 6.8287817 -3.4143908 206.29046 -26.448694
4 3.700743e-17 0.5110845 0.2950748 -0.5901495 0.2950748 240.89801 -35.806642
5 7.401487e-16 6.6260504 3.8255520 -7.6511040 3.8255520 187.03479 -23.444762
6 5.921189e-16 8.7217431 5.0355007 -10.0710014 5.0355007 41.43239 3.138396
7 0.000000e+00 5.5269434 3.1909823 -6.3819645 3.1909823 -119.90628 27.817845
8 -1.480297e-16 1.0204260 -0.5891432 1.1782864 -0.5891432 -180.33773 35.623363
9 -5.921189e-16 6.9488186 -4.0119023 8.0238046 -4.0119023 -64.72245 21.820226
10 -8.881784e-16 8.6621512 -5.0010953 10.0021906 -5.0010953 191.65339 -5.218767
Каждая строка представляет предполагаемую линейную модель с длиной окна 3. Я использовал rollapply
в отдельном фрейме данных с функцией lm(y~t)
для извлечения коэффициентов и перехватов в новый фрейм данных, которые я объединил с остатками из той же модели и их соответствующими средствами и остатки.
Поскольку длина окна равна 3, это означает, что есть 3 остатка, как показано для каждой модели, в остатке 1, остатке 2 и остатке 3. Среднее значение и sd из них включены соответственно.
Я пытаюсь предсказать следующее наблюдение, по сути, k+1
, где k
- длина окна, используя точку пересечения и бета.
Напомним, что lm1
использует наблюдения 1,2,3 для оценки точки пересечения и бета, а lm2 занимает 2,3,4, lm3 занимает 3,4,5 и т. Д. Функция для прогноза должна быть:
predict_lm1 = intercept_lm1 + beta_lm1*(k+1)
Где k+1 = 4
. Для lm2
:
predict_lm2 = intercept_lm2 + beta_lm2*(k+1)
Где k+1 = 5
.
Ясно, что k
увеличивается на 1 каждый раз, когда я двигаюсь вниз на одну строку в наборе данных. Это связано с тем, что независимой переменной является время t
, которое представляет собой последовательность, увеличивающуюся на единицу за каждое наблюдение.
Что мне здесь делать: for loop
или apply
?
Как я могу создать функцию, которая выполняет итерацию по строкам и вычисляет прогнозы в соответствии с информацией, найденной в этой строке?
Спасибо.
РЕДАКТИРОВАТЬ:
Мне удалось найти возможное решение, написав следующее:
n=nrow(dataset)
for(i in n){
predictions = dataset$Intercept + dataset$beta*(k+1)
}
Однако k
не увеличивается на 1 за итерацию. Таким образом, k+1
всегда = 4
. Как я могу убедиться, что k
увеличивается на 1 соответственно?
ИЗМЕНИТЬ 2
Мне удалось добавить 1 к k
, написав следующее:
n=nrow(dataset)
for(i in n){
x = 0
x[i] = k + 1
preds = dataset$`(Intercept)` + dataset$t*(x[i])
}
Однако первый прогноз переоценен. Оно должно быть 203, тогда как оно оценивается как 228, что означает, что он устанавливает для объясняющей переменной слишком большое значение 1. Тем не менее, второй прогноз верен. Я не уверен, что делаю не так. Любой совет?
ИЗМЕНИТЬ 3
Мне удалось найти решение следующим образом:
n=nrow(dataset)
for(i in n){
x = k + 1
preds = dataset$`(Intercept)` + dataset$t*(x)
x = x + 1
}
i
устанавливается наn
выполнение блока кода, а затем завершение.n
должен быть вектором, если вы хотите выполнить итерацию. Кроме того, неясно, откуда взялсяk
. - person emilliman5   schedule 25.06.2017