【发布时间】:2016-02-02 11:15:04
【问题描述】:
这是我的问题(虚构数据以便重现):
set.seed(42)
df<-data.frame("x"=rnorm(1000),"y"=rnorm(1000),"z"=rnorm(1000))
df2<-data.frame("x"=rnorm(100),"y"=rnorm(100),"z"=rnorm(100))
breaks<-c(-1000,-0.68,-0.01315,0.664,1000)
divider<-cut(df$x,breaks)
divider2<-cut(df2$x,breaks)
subDF<-by(df,INDICES=divider,data.frame)
subDF2<-by(df2,INDICES=divider2,data.frame)
reg<-lapply(subDF,lm,formula=x~.)
pre<-lapply(1:4,function(x){predict(reg[[x]],subDF2[[x]])})
lapply(1:4,function(x){summary(reg[[x]])$r.squared})
上面的代码工作正常。我正在做的事情如下:根据x的值,我将df分成4个数据帧并对每个数据帧运行回归,以便能够预测其他数据集的值。数据框的拆分是为了更好地预测,因为x的范围对实际数据有很大的影响。
我想要做的是为回归添加一个权重参数,以更加重视最新数据。我的权重参数是:weights<-0.999^seq(250,1,by=-1)如果有 250 个数据。种子为 42 和之前的中断,所有 4 个维度都是 250。
当我尝试做reg<-lapply(subDF,lm,formula=x~.,weights=0.999^seq(250,1,by=-1)) 时,我得到了这个错误:
Error in eval(expr, envir, enclos) :
..2 used in an incorrect context, no ... to look in
这很奇怪,因为lapply有一个...argument,这里用于formula,但它不接受weights。
所以我真的不知道如何添加这些权重。我应该在我的代码中更正什么,或者我应该(几乎)完全改变它以能够使用权重?
对于这个例子,为了使它(也许)更容易,我切断了中断,以便 4 个子集具有相同的维度,但理想情况下,即使 4 个子集的维度不同(因此与例如,breaks<-c(-1000,-0.75,0,0.75,1000) 的中断)
This CrossValidated 上的帖子也有同样的问题,但没有有效的解决方案,所以这对我没有帮助。
【问题讨论】: