【问题标题】:Error in model.frame.default... variable lengths differ linear model validation in Rmodel.frame.default 中的错误...可变长度与 R 中的线性模型验证不同
【发布时间】:2017-02-11 19:09:23
【问题描述】:

我正在尝试使用启动包中的函数 cv.glm() 来验证线性模型。 首先我运行模型,它工作正常:

> linear_model_red<-glm(red_wine_data$quality~.,data=red_wine_data)

然后,我想做验证:

cv.glm(red_wine_data,linear_model_red)

这让我犯了错误:

Error in model.frame.default(formula = red_wine_data$quality ~ ., data = list( : 
  variable lengths differ (found for 'fixed acidity')

我没有任何丢失的数据,我检查了。而且我所有的变量都是相同的长度:

sapply(red_wine_data,function(x) length(x))
           fixed acidity             volatile acidity 
                    1599                         1599 
             citric acid               residual sugar 
                    1599                         1599 
               chlorides          free sulfur dioxide 
                    1599                         1599 
    total sulfur dioxide                      density 
                    1599                         1599 
                      pH                    sulphates 
                    1599                         1599 
                 alcohol                      quality 
                    1599                         1599 
volatile acidity*citric acid   volatile acidity*sulphates 
                        1599                         1599 
    volatile acidity*alcohol        citric acid*sulphates 
                        1599                         1599 
         citric acid*alcohol            sulphates*alcohol 
                        1599                         1599 

请帮忙!

【问题讨论】:

    标签: r validation statistics-bootstrap


    【解决方案1】:

    不要在公式中使用$ 运算符:

    linear_model_red<-glm(red_wine_data$quality~.,data=red_wine_data)
    

    相反,这样做:

    linear_model_red<-glm(quality~.,data=red_wine_data)
    

    原因是通过使用$,您是在告诉 R,您的模型应该使用固定的数字向量作为响应。在本例中,这就是 red_wine_data 数据框中的 quality 列。

    当您拟合初始模型时,没关系,因为所有其他变量也来自该数据框。但是,当您调用cv.glm 进行交叉验证时,R 将仍然尝试使用相同的固定向量作为您的响应。这不再有效,因为交叉验证的目的是使用数据的子集来拟合模型,然后在不同的子集上对其进行测试。通过删除$(及其左侧的red_wine_data),您告诉R 在data 参数指定的数据集中查找quality 变量——cv.glm 将设置为确实如此。这意味着响应将与模型中的其他变量匹配。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-24
      • 1970-01-01
      • 2018-03-06
      • 1970-01-01
      • 2021-10-14
      • 1970-01-01
      相关资源
      最近更新 更多