2015-02-05 80 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代替。然而,在我看来,这是一个不好的做法