【问题标题】:cv.glm variable lengths differcv.glm 可变长度不同
【发布时间】:2015-02-05 17:29:33
【问题描述】:

我正在尝试在线性模型上 cv.glm 但是每次我都会收到错误

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

air-force-falcons 是数据集 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')

我不知道是什么导致了这个错误或解决方案。有任何想法吗?谢谢!

【问题讨论】:

  • 你的错误在这里. -lindata$HomeAdv你想用这个实现什么?
  • 即使没有,错误仍然存​​在:&gt; linearmod5&lt;- glm(lindata$Y ~ 0 + lindata$HomeAdv + ., data=lindata, na.action="na.exclude") &gt; set.seed(1) &gt; cv=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')

标签: r glm cross-validation


【解决方案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 形式指定的变量,其他(指定的)由.) 与分区长度。

所以你必须在公式中使用相对变量(不带$)。

关于公式的其他建议:

避免混合使用指定变量和. 你双变量。该点适用于 df 中的所有 var,但波浪号左侧的变量除外。

为什么要加零?如果它是在尝试删除拦截使用 -1 代替。但是,我认为这是一种不好的做法

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多