R中交叉验证的问题

时间:2014-01-17 21:43:37

标签: r analytics

我在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))不被交叉验证代码接受并提供该消息?

2 个答案:

答案 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)