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

Rit*_*ack 0 validation r statistics-bootstrap

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

> linear_model_red<-glm(red_wine_data$quality~.,data=red_wine_data)
Run Code Online (Sandbox Code Playgroud)

然后,我想做验证:

cv.glm(red_wine_data,linear_model_red)
Run Code Online (Sandbox Code Playgroud)

它给我带来了错误:

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

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

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 
Run Code Online (Sandbox Code Playgroud)

请帮忙!

Hon*_*Ooi 5

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

linear_model_red<-glm(red_wine_data$quality~.,data=red_wine_data)
Run Code Online (Sandbox Code Playgroud)

相反,请执行以下操作:

linear_model_red<-glm(quality~.,data=red_wine_data)
Run Code Online (Sandbox Code Playgroud)

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

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