model.frame.default中的错误...变量长度与R中的线性模型验证不同

时间:2017-02-11 19:09:24

标签: r validation statistics-bootstrap

我正在尝试使用启动包中的函数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 
  

请帮忙!

1 个答案:

答案 0 :(得分:2)

请勿在公式中使用$运算符:

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

相反,这样做:

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

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

当你适合初始模型时,没关系,因为所有其他变量也来自该数据框。但是,当您致电cv.glm进行交叉验证时,R 仍会尝试使用相同的固定向量进行回复。这不再有效,因为交叉验证的目的是使用数据的子集来拟合模型,然后在不同的子集上测试它。通过删除$(及其左侧的red_wine_data),您可以告诉R在quality参数指定的数据集中查找data变量 - { {1}}将设置为其功能的一部分。这意味着响应将与模型中的其他变量匹配。