2013-03-24 91 views
2

我试图让CVlm功能的工作应用DAAG包 我的数据集:飞度(拥有27项(行)与6个变量 我使用R中的下列表达式:交叉验证的DAAG包中的R

Error in `[<-.data.frame`(`*tmp*`, rows.out, "cvpred", value = c(228.541323416399, : 
    replacement has 27 rows, data has 9 
In addition: Advarselsbesked: 
'newdata' had 9 rows but variable(s) found have 27 rows 

我会很乐意为一些帮助:

CrossVal<-CVlm(df=fit,m=3, 
form.lm=formula(fit$X1~fit$X2 + fit$X3 + fit$X4 + fit$X5 + fit$X6)) 
使用 m=1它(如上图所示如3)我得到一个错误消息米1的不同工作良好的时候

让简历正常工作 在此先感谢

+0

请让您的情况具有可重复性,即向我们提供模拟您的情况所需的数据和代码。有关如何执行此操作的更多提示,请参阅http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example。 – 2013-03-24 13:45:00

回答

3

很难说没有一个可重复的例子,但我认为你不写出正确的公式。这应该为你工作

CrossVal<-CVlm(df=fit,m=3, 
       form.lm= formula(X1 ~ X2 + X3 + X4 + X5 + X6)) 

例如利用DAAGhousprices数据我可以重现错误:

CVlm(df = houseprices, form.lm = 
     formula(houseprices$sale.price ~ houseprices$area), m=2) 
Error in `[<-.data.frame`(`*tmp*`, rows.out, "cvpred", value = c(201.067581902091, : 
    replacement has 15 rows, data has 7 

但能正常工作:

CVlm(df = houseprices, form.lm = formula(sale.price ~ area), m=2) 
Analysis of Variance Table 

Response: sale.price 
      Df Sum Sq Mean Sq F value Pr(>F) 
area  1 18566 18566  8 0.014 * 

编辑为什么M = 1作品,而不是1米的不同:

这里CVlm发生错误的代码部分:

subs.lm <- lm(form, data = df[rows.in, ]) 
df[rows.out, "cvpred"] <- predict(subs.lm, newdata = df[rows.out, 

错误的发生是因为我们尝试设置9行DF与27行。 ])

Error in `[<-.data.frame`(`*tmp*`, rows.out, "cvpred", value = c(228.541323416399, : 
    replacement has 27 rows, data has 9 

确实predict与效果方面的工程,它不使用newdata对象,但使用原始data.frame因为你给使用$公式,这是它在警告被打印:

In addition: Advarselsbesked: 
'newdata' had 9 rows but variable(s) found have 27 rows 

其中m = 1它可以工作,因为newdata具有与原始数据集相同的行数。当然结果是不正确的,因为它不使用原始数据的排列的新数据子集。

+1

谢谢 - 作品不错。 – 2013-03-24 14:29:49