cv.glm可变长度不同
问题描述:
我想,但是我做我的错误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')
我不知道是什么驱动这个错误或解决方案。有任何想法吗?谢谢!
答
是什么原因造成这个错误的方式错误指定的公式
会产生这样的错误:
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代替。然而,在我看来,这是一个不好的做法
你的错误在这里。 -lindata $ HomeAdv'你想用这个做什么? – BBrill 2015-02-05 18:01:18
即使没有,错误依然存在:'> linearmod5 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