2013-03-24 93 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