我有以下数据框架:
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个残差,在resid 1、resid 2和resid 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。
显然,每次我在dataset中向下移动一行时,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
}发布于 2017-06-25 12:30:24
您的循环没有迭代:
dataset <- read.table(text="lm meanresids sdresids resid1 resid2 resid3 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", header=T)
n <- nrow(dataset)
predictions <- data.frame()
for(i in 1:n){
k <- i ##not sure where k is coming from but put it here
predictions <- rbind(predictions, dataset$intercept[i] + dataset$beta[i]*(k+1))
}
predictionshttps://stackoverflow.com/questions/44745183
复制相似问题