2016-11-23 2 views
1

J'ai un problème quand j'utilise mon modèle pour faire une prédiction, R montre ce message Warning message prediction from a rank-deficient fit may be misleading, comment puis-je le résoudre? Je pense que mon modèle est correct, c'est la prédiction qui échoue et je ne sais pas pourquoi.Comment résoudre "l'ajustement déficient de rang peut être une erreur trompeuse" sur mon modèle linéaire dans R?

Ici vous pouvez voir étape par étape ce que je fais et le résumé du modèle:

myModel <- lm(margin~.,data = dataClean[train,c(target,numeric,categoric)]) 

Call: 
lm(formula = margin ~ ., data = dataClean[train, c(target, numeric, categoric)]) 

Residuals: 
    Min  1Q Median  3Q  Max 
-0.220407 -0.035272 -0.003415 0.028227 0.276727 

Coefficients: (2 not defined because of singularities) 
            Estimate Std. Error t value Pr(>|t|)  
(Intercept)       6.061e-01 2.260e-02 26.817 < 2e-16 *** 
price        1.042e-05 8.970e-06 1.162 0.245610  
shipping        1.355e-03 2.741e-04 4.943 9.25e-07 *** 
categoryofficeSupplies    -7.721e-02 2.295e-02 -3.364 0.000802 *** 
categorytechnology     -3.993e-02 2.325e-02 -1.717 0.086249 . 
subCategorybindersAndAccessories -1.650e-01 1.421e-02 -11.612 < 2e-16 *** 
subCategorybookcases     3.337e-04 2.328e-02 0.014 0.988565  
subCategorychairsChairmats   -3.104e-02 2.106e-02 -1.474 0.140831  
subCategorycomputerPeripherals  1.356e-02 1.293e-02 1.049 0.294604  
subCategorycopiersAndFax   -1.943e-01 2.944e-02 -6.598 7.27e-11 *** 
subCategoryenvelopes    -1.648e-01 2.045e-02 -8.057 2.62e-15 *** 
subCategorylabels     -1.534e-01 1.984e-02 -7.730 3.00e-14 *** 
subCategoryofficeFurnishings  -8.827e-02 2.220e-02 -3.976 7.61e-05 *** 
subCategoryofficeMachines   -1.521e-01 1.639e-02 -9.281 < 2e-16 *** 
subCategorypaper     -1.624e-01 1.363e-02 -11.909 < 2e-16 *** 
subCategorypensArtSupplies   -8.484e-04 1.524e-02 -0.056 0.955623  
subCategoryrubberBands    3.174e-02 2.245e-02 1.414 0.157854  
subCategoryscissorsRulersTrimmers 1.092e-01 2.327e-02 4.693 3.13e-06 *** 
subCategorystorageOrganization  1.219e-01 1.575e-02 7.739 2.82e-14 *** 
subCategorytables       NA   NA  NA  NA  
subCategorytelephoneAndComunication   NA   NA  NA  NA  
--- 
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

Residual standard error: 0.08045 on 858 degrees of freedom 
Multiple R-squared: 0.6512, Adjusted R-squared: 0.6439 
F-statistic: 88.98 on 18 and 858 DF, p-value: < 2.2e-16 


estimateModel <- predict(myModel, type="response", newdata=dataClean[test, c(numeric,categoric,target)]) 

Warning message: 
In predict.lm(myModel, type = "response", newdata = dataClean[test, : 
prediction from a rank-deficient fit may be misleading 
+0

Vous devez donc rechercher les champs qui ont une corrélation de 100% entre eux ou un champ qui a une seule valeur. Vous pouvez trouver plus de «théorie» ici - http://stats.stackexchange.com/questions/35071/what-is-rank-deficiency-and-how-to-deal-with-it – Bulat

+0

Vous êtes probablement manquant tous les Les lignes 'tables' et' telephoneAndCommunication' dans votre exemple d'apprentissage. –

Répondre

2

Deux de vos niveaux Sous-catégorie avaient leurs coefficients associés supprimés. Cela signifie que chacune d'elles peut être prédite à 100% par une combinaison de prix et d'expédition et les autres niveaux de catégorie et de sous-catégorie. Ceci est connu dans la documentation R comme étant "aliasé". L'avertissement peut ou ne pas être important, bien que d'accord avec @ ZheyuanLi que c'est probablement bénigne. Je ne pense pas que cet avertissement particulier puisse être dû à des valeurs manquantes car les fonctions de régression R fonctionnent généralement de manière à supprimer des lignes entières lorsqu'une variable quelconque a une valeur manquante. La théorie selon laquelle il existe une corrélation de 100% entre deux variables est également peu probable. Si vous voulez trouver afficher les combinaisons qui pourraient donner lieu à ce que je suggère à commencer par

with(dataClean , table(category, SubCategory)) 

Je prédis que vous trouverez sur un sous-catégorie est une ou plusieurs des lignes de catégorie.