2015-02-05 136 views
0

我想,但是我做我的錯誤cv.glm可變長度不同

Error in model.frame.default(formula = lindata$Y ~ 0 + lindata$HomeAdv + : 
variable lengths differ (found for 'air-force-falcons') 

空軍 - 獵鷹每次上線性模型cv.glm是在數據集中lindata的第一個變量。當我運行glm時,我沒有任何錯誤。所有變量都在一個數據集中,並且沒有缺失值。

> linearmod5<- glm(lindata$Y ~ 0 + lindata$HomeAdv + ., data=lindata, na.action="na.exclude") 
> set.seed(1) 
> cv.err.lin=cv.glm(lindata,linearmod5,K=10) 
Error in model.frame.default(formula = lindata$Y ~ 0 + lindata$HomeAdv + : 
variable lengths differ (found for 'air-force-falcons') 

我不知道是什麼驅動這個錯誤或解決方案。有任何想法嗎?謝謝!

+0

你的錯誤在這裏。 -lindata $ HomeAdv'你想用這個做什麼? – BBrill 2015-02-05 18:01:18

+0

即使沒有,錯誤依然存在:'> linearmod5 < - glm(lindata $ Y〜0 + lindata $ HomeAdv +。,data = lindata,na.action =「na.exclude」) > set.seed(1) > cv = cv.glm(lindata,linearmod5,K = 10) model.frame.default錯誤(公式= lindata $ Y〜0 + lindata $ HomeAdv +: 可變長度不同(找到'air-force-獵鷹)' – RetaK 2015-02-05 18:52:55

回答

1

是什麼原因造成這個錯誤的方式錯誤指定的公式

會產生這樣的錯誤:

mod <- glm(mtcars$cyl ~ mtcars$mpg + ., 
      data = mtcars, na.action = "na.exclude") 

cv.glm(mtcars, mod, K=11) #nrow(mtcars) is a multiple of 11 

這不是:

mod <- glm(cyl ~ ., data = mtcars) 

cv.glm(mtcars, mod, K=11) 

這也不:

mod <- glm(cyl ~ + mpg + disp, data = mtcars) 

cv.glm(mtcars, mod, K=11) 

會發生什麼情況是,您指定變量的方式如mtcars$cyl此變量的行數等於原始數據集的行數。當您使用cv.glm時,您將數據框分爲K個部分,但是當您重新採樣重新採樣數據時,它將使用原始(未分區)長度評估以data.frame$var格式指定的變量,其他(由.指定)劃分的長度。

所以你必須在公式中使用相對變量(無$)。

在公式其他建議:

忌用指定變量和.你double變量的組合。這個點用於df中所有的變量,除了代字號左邊的變量。

爲什麼添加一個零?如果它試圖刪除攔截,則使用-1代替。然而,在我看來,這是一個不好的做法