2010-10-25 8 views
1

J'ai un ensemble de données avec des valeurs nulles dans un champ. Lorsque j'essaie d'exécuter une régression linéaire, elle traite les entiers dans le champ comme des indicateurs de catégorie, pas des nombres.Comment ignorer les valeurs null dans R?

Par exemple, pour un champ qui ne contient pas de valeurs nulles ...

summary(lm(rank ~ num_ays, data=a)), 

Retours:

Coefficients: 
      Estimate Std. Error t value Pr(>|t|)  
(Intercept) 10.607597 0.019927 532.317 < 2e-16 *** 
num_ays  0.021955 0.007771 2.825 0.00473 ** 

Mais quand je lance le même modèle sur un champ avec des valeurs nulles, je reçois:

Coefficients: 
       Estimate Std. Error t value Pr(>|t|)  

(Intercept) 1.225e+01 1.070e+00 11.446 < 2e-16 *** 
num_azs0 -1.780e+00 1.071e+00 -1.663 0.09637 . 
num_azs1 -1.103e+00 1.071e+00 -1.030 0.30322  
num_azs10 -9.297e-01 1.080e+00 -0.861 0.38940  
num_azs100 1.750e+00 5.764e+00 0.304 0.76141  
num_azs101 -6.250e+00 4.145e+00 -1.508 0.13161  

Quelle est la meilleure et/ou la façon la plus efficace de gérer cela, et quels sont les compromis?

+0

parlant null vous avez 'NA' à l'esprit? Y a-t-il un risque que 'num_azs' soit un' facteur'? On dirait que les données ne sont pas nettoyées pour moi ... – Marek

+0

Je ne pense pas que ce soit un facteur. Les deux num_ays et num_azs proviennent d'une exportation MySQL. Le type de champ pour les deux est entier, mais num_azs peut contenir des valeurs nulles. – Dan

+0

qu'est-ce que résumé (a) dire vos colonnes de données sont? Je suppose qu'une valeur non numérique entraîne la conversion en facteur. La solution est de convertir en numérique en utilisant as.numeric (as.character (foo)) – Spacedman

Répondre

2

Et pour appuyer sur la réponse de Shane: vous pouvez l'utiliser dans l'argument data= de lm():

summary(lm(rank ~ num_ays, data=a[!is.null(a$num_ays),])) 
+0

Merci, Dirk. J'ai essayé cela mais il traite toujours les nombres dans la colonne comme étiquettes de catégorie ... même résultat qu'avant. Est-ce que je manque quelque chose d'autre aussi? – Dan

+0

Vous êtes victime d'un facteur de déclenchement. C'est un problème différent. Essayez de rechercher "[r] factor" (c'est-à-dire le terme "facteur" dans les messages marqués '[r]' pour R). Vous devrez lire les données différemment et/ou les convertir. –

+1

Ne vaut-il pas mieux utiliser l'argument 'subset' de' lm'? – Marek

3

Vous pouvez ignorer les valeurs NULL comme ceci:

a[!is.null(a$num_ays),] 
+0

Merci, Shane. J'ai essayé d'appliquer cela en utilisant: summary (lm (rang ~ num_jours, données = a [! Is.null (a $ num_ays)])). Il m'a donné le même résultat, cependant. – Dan

+1

'is.null' renvoie' TRUE' si l'objet est 'NULL' et' FALSE' sinon. Donc, votre construction retourne toutes les lignes de 'a' ou 0-row' data.frame'. Je suis sûr que vous pensiez à 'is.na';) – Marek

Questions connexes