很难说没有一个可重复的例子,但我认为你不写出正确的公式。这应该为你工作
CrossVal<-CVlm(df=fit,m=3,
form.lm= formula(X1 ~ X2 + X3 + X4 + X5 + X6))
例如利用DAAG
housprices
数据我可以重现错误:
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具有与原始数据集相同的行数。当然结果是不正确的,因为它不使用原始数据的排列的新数据子集。
请让您的情况具有可重复性,即向我们提供模拟您的情况所需的数据和代码。有关如何执行此操作的更多提示,请参阅http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example。 – 2013-03-24 13:45:00