Modèle linéaire de la fonction lm() erreur: NA/NaN/Inf étrangères appel de fonction (arg 1)
Dire que j'ai données.cadre a
- Je utiliser
m.fit <- lm(col2 ~ col3 * col4, na.action = na.exclude)
col2
a quelques NA
valeurs, col3
et col4
ont des valeurs inférieures à 1.
Je reçois
Error in lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) :
NA/NaN/Inf in foreign function call (arg 1)
J'ai vérifié la liste de diffusion, et il semble que c'est à cause de la NA
s dans col2
mais j'ai essayé d'utiliser na.action=na.exclude/omit/pass
mais aucun d'entre eux semblent fonctionner. J'ai testé lm
de nouveau sur les 10 premières entrées, certainement pas à cause de la NA
s. Problème avec cet avertissement, c'est tous les résultats de google semblent pointer à NA
.
Ai-je mal interprété l'erreur ou suis-je à l'aide de lm
à tort?
De données est à kaggle. Je suis modélisation MonthlyIncome données à l'aide de la régression linéaire (comme je ne pouvais pas obtenir un certain glm
famille pour travailler). J'ai créé mes propres variables à utiliser, mais si vous essayez d'modèle MonthlyIncome avec des variables déjà présentes il échoue.
m.fit<-lm(col2 ~ col3 + col4 + col3*col4, data=a, na.action=na.exclude)
est beaucoup plus lisible pour spécifier votre modèle- Sans reproductible exemple, il est très difficile de répondre à votre question. Merci de voir stackoverflow.com/q/5963269/567015 sur les instructions pour ce faire.
- Si vous sous-ensemble
a
pour les lignes sans NA danscol2
et puis exécutez lelm()
, ne vous obtenez toujours l'erreur? - Pour ce que ça vaut,
~ col3*col4
est équivalent à~ col3+col4+col3:col4
qui est équivalent à~ col3+col4+col3*col4
(la dernière est sans danger redondant) - Merci Ben vous avez raison, j'ai mal lu, un point dans mes notes.
- Pas beaucoup de point en publiant un lien vers un fichier de données derrière un écran de connexion. En attendant, essayez de traçage de vos données pour voir si il ressemble vaguement linéaire.
- O barrage je savais que cela arriverait :S. Mais oui une petite section de données fonctionne bien, le problème est lorsque vous utilisez l'ensemble des observations. Et de la régression linéaire est assez logique étant donné les données, mais certainement pas quelque chose que je veux en faire l'usage si j'avais un meilleur contrôle sur R.
- obtenir un dropbox et d'utiliser les liens publics en y (www.dropbox.com). C'est encore la solution la plus propre pour partager des données que je connais.
- J'ai signé pour Kaggle, et je ne peux pas reproduire.
a <- read.csv("~/Downloads/cs-training.csv")
;names(a)[2:4] <- paste("col",2:4,sep="")
;m.fit <-lm(col2~col3*col4,data=a)
a bien fonctionné pour moi. - Les colonnes que vous utilisez dans le
lm
ajustement? Si vous utilisez les noms dans la ligne d'en-tête dans le fichier, c'est plus clair quecol2
, etc. J'ai essayé quelques combinaisons de colonnes et ne peut pas reproduire l'erreur. - Donc ne
a <- read.csv("~/Downloads/cs-training.csv")
;m.fit <-lm(MonthlyIncome~age*DebtRatio*SeriousDlqin2yrs,data=a,na.action=na.exclude)
- Urgh désolé tout le monde, Il semble que le problème a été Inf valeurs dans mon personnalisée coloumn, que j'ai fixé après une bonne nuit de sommeil... encore une Fois très très désolé pour perdre du temps.
Vous devez vous connecter pour publier un commentaire.
Je sais que ce fil est vraiment vieux, mais les réponses ne semblent pas terminée, et je viens de tomber sur le même problème.
Le problème que j'ai est que le NA colonnes avaient aussi NaN et Inf. Supprimer et essayez à nouveau. Plus précisément:
Espoir qui aide votre enfant de 18 mois question de!
col2[which(!is.finite(col2))] = NA
Vous devriez lire le livre Un Guide du Débutant à la R pour une explication complète sur ce point. Plus précisément, elle signale l'erreur suivante:
La solution est d'ajouter une petite constante de la valeur de l'Intensité de données, par exemple, 1. Notez qu'il y a une discussion dans la communauté statistique concernant l'ajout d'une faible valeur. Quoi qu'il en soit, vous ne pouvez pas utiliser le journal de zéro quand on fait des calculs de R.
J'ai juste subi une autre possibilité, après tout posible
na.omit
etna.exclude
contrôles.Je prenais quelque chose comme:
lm(log(x) ~ log(y), data = ...)
Sans remarquer que, pour certaines valeurs dans mon dataset, x ou y pourrait être de zéro:
log(0) = -Inf
Donc juste une autre chose à surveiller!
J'ai résolu ce type de problème en réinitialisant mes options.
options(na.action="na.exclude")
ou
options(na.action="na.omit")
J'ai vérifié mes paramètres et avait déjà modifié l'option pour
"na.pass" qui n'a pas tomber mon y des observations avec NAs (où
y~x
).Essayez de changer le type de col2 (et toutes les autres variables)
Je viens de rencontré le même problème. obtenir les éléments finis à l'aide de
J'ai rencontré cette erreur lors de ma équivalent de col2 était un integer64 plutôt que d'un entier et lors de l'utilisation de naturel et de splines polynomiales, splines::bs et de splines:ns par exemple:
La conversion à une norme entier a fonctionné pour moi:
J'ai eu cette erreur quand j'ai inversé les arguments lors de l'appel de
reformulate
et utiliser la formule dans monlm
appel sans vérifier, j'ai donc eu le mauvais prédicteur et la variable de réponse.Une autre chose à regarder dehors pour est utilisant des fonctions comme log() ou sin() faire votre x et y inf. par exemple. log 0 = 0 ou sin(pi) = 0.
Assurez-vous que vous n'avez pas de 0 dans votre variable dépendante.