2017-02-11 37 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的一部分。這意味着響應將與您的模型中的其他變量相匹配。