我在R中运行以下模型:
g<-lm(NA.~ PC + I(1/(I(DSET$SPCI) * I(DSET$PC + DSET$PI))),data=DSET)
运行正常。但是,当我想要交叉验证相同的模型时:
a<-CVlm(df=DSET,form.lm = g ,m=5)
结果是以下消息:
Error in model.frame.default(formula = form, data = df[rows.in, ], drop.unused.levels = TRUE) :
variable lengths differ (found for 'I(1/(I(DSET$SPCI) * I(DSET$PC + DSET$PI)))')
编辑:
我以下列方式再次运行模型g:
g<-lm(NA.~ PC + I(1/(SPCI * (PC + PI))),data=DSET)
输出与第一种方式相同。然后,我用相同的代码交叉验证并运行。
所以我的问题是:为什么I(1/(I(DSET$SPCI) * I(DSET$PC + DSET$PI))
不被交叉验证代码接受并提供该消息?
答案 0 :(得分:2)
这可能是我第五次来到这里,并且总是想知道为什么@jlhoward给出的答案不起作用。因此,对于未来的读者(包括我),要使此代码有效,请将df
替换为data
,如下所示:
CVlm(data=DSET,form.lm = form ,m=5)
您可以在documentation,第47页阅读更多内容。
答案 1 :(得分:0)
在CVlm(...)
form.lm
参数需要是公式,您传递模型(合适的结果)。
尝试这样的事情:
form <- NA.~ PC + I(1/(SPCI * (PC + PI)))
g <- lm(form, data=DSET)
a <- CVlm(df=DSET,form.lm = form ,m=5)