2014-01-17 21 views
3

交叉驗證問題我R中運行以下模型:與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))不被交叉驗證的代碼接受並給出了這個消息?

+3

我不知道這是否是你的_only_問題,但你的公式都搞砸了。你永遠不要在公式規範中使用'$'。這是擁有單獨的「數據」參數的關鍵。我也懷疑「NA」。這似乎是一個奇怪的變量名稱。 – joran

+0

屬性的名稱是NA,所以R將名稱更改爲NA。不要與NA混淆。我的數據框中沒有缺失的值。 – CreamStat

+0

這看起來很好。我問這件作品的唯一原因是因爲'.'在公式中有着特殊的含義,並且根據公式中其他的東西是錯誤的,這是不完全清楚的,無論你是否意圖在這個意義上使用它。 – joran

回答

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) 
0

它大概第五次我在這裏,總是奇怪,爲什麼由@jlhoward給出的答案是行不通的。因此,對於未來的讀者(包括我在內),以使此代碼的工作,通過data更換df如下:

CVlm(data=DSET,form.lm = form ,m=5) 

您可以在documentation更多,第47頁。