2017-02-11 36 views
0

我正尝试使用引导包中的函数cv.glm()来验证线性模型。 首先我运行模式和正常工作:model.frame.default中的错误...变量长度不同R中的线性模型验证

> 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') 

我不根本没有任何缺失的数据,我查了一下。而且我所有的变量都相同lengh:

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 

please help!

回答

0

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

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的一部分。这意味着响应将与您的模型中的其他变量相匹配。