很難說沒有一個可重複的例子,但我認爲你不寫出正確的公式。這應該爲你工作
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