Lineares Modell der Funktion lm() error: NA/NaN/Inf in foreign function call (arg 1)
Sagen, ich habe Daten.Rahmen a
Benutze ich
m.fit <- lm(col2 ~ col3 * col4, na.action = na.exclude)
col2
hat einige NA
Werte col3
und col4
haben Werte kleiner als 1.
Ich immer
Error in lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) :
NA/NaN/Inf in foreign function call (arg 1)
Ich habe die mailing-Liste und es scheint, dass es ist, weil der NA
s in col2
aber ich habe versucht, mit na.action=na.exclude/omit/pass
aber keiner von Ihnen scheint zu arbeiten. Getestet hab ich lm
wieder auf die ersten 10 Einträge, auf jeden Fall nicht, weil der NA
s. Problem mit dieser Warnung alle google-Ergebnisse scheinen zu zeigen NA
.
Habe ich falsch interpretiert, die den Fehler oder bin ich mit lm
falsch?
Daten an kaggle. Ich bin Modellierung MonthlyIncome Daten mittels linearer regression (als hätte ich nicht eine gewisse glm
Familie, um zu arbeiten). Ich habe meine eigene Variablen zu benutzen, aber wenn Sie versuchen, das Modell MonthlyIncome mit Variablen schon vorhanden-es scheitert.
m.fit<-lm(col2 ~ col3 + col4 + col3*col4, data=a, na.action=na.exclude)
ist sehr viel besser lesbar für Ihr Modell angeben- Ohne ein reproduzierbares Beispiel ist es sehr schwer, Ihre Frage zu beantworten. Bitte siehe stackoverflow.com/q/5963269/567015 auf Anweisungen, wie dies zu tun.
- Wenn Sie Teilmenge
a
für Zeilen ohne NA incol2
und führen Sie dann daslm()
, haben Sie weiterhin die Fehlermeldung erhalten? - Für was es Wert ist,
~ col3*col4
entspricht~ col3+col4+col3:col4
was wiederum äquivalent zu~ col3+col4+col3*col4
(der Letzte ist harmlos redundant) - Vielen Dank Ben, du hast Recht, habe ich falsch verstanden, ein Punkt in meinen Notizen.
- Nicht viel Punkt im posting einen link zu einer Datenbank, die hinter einem login-Bildschirm. Mittlerweile versuchen Sie, Plotten Sie Ihre Daten, um zu sehen, ob es sieht auch nur annähernd linear.
- O besch ich wusste, dass dies passieren würde :S. Aber ja ein kleiner Abschnitt der Daten funktioniert Prima, das problem ist, wenn Sie die alle Beobachtungen. Und die lineare regression ist ziemlich logisch, angesichts der Daten, aber definitiv nicht etwas, das ich verwenden möchte, wenn ich hatte eine bessere Kontrolle über R.
- Holen Sie sich eine dropbox und verwenden Sie die öffentlichen links drin (www.dropbox.com). Das ist immer noch die sauberste Lösung, um Daten auszutauschen, die ich kenne.
- Ich habe mich für Kaggle, und ich kann nicht replizieren.
a <- read.csv("~/Downloads/cs-training.csv")
;names(a)[2:4] <- paste("col",2:4,sep="")
;m.fit <-lm(col2~col3*col4,data=a)
funktionierte gut für mich. - Die Spalten sind Sie in der
lm
passen? Wenn Sie die Namen in der header-Zeile in der Datei, es ist klarer alscol2
usw. Ich habe versucht, ein paar Spalte Kombinationen und kann deinen Fehler nicht reproduzieren. - So hat
a <- read.csv("~/Downloads/cs-training.csv")
;m.fit <-lm(MonthlyIncome~age*DebtRatio*SeriousDlqin2yrs,data=a,na.action=na.exclude)
- Urgh sorry jeder, Es scheint, das problem war, Inf-Werte in meine benutzerdefinierte Spalte, die ich behoben, nachdem Sie eine Nacht gut schlafen... Mal wieder sehr sehr Leid um Zeit zu verschwenden.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich weiß, dieser thread ist wirklich alt, aber die Antworten scheinen nicht vollständig, und ich lief in das gleiche problem.
Das problem, das ich hatte war, weil die NA-Spalten hatte auch NaN und Inf. Entfernen Sie diese und versuchen Sie es erneut. Speziell:
Hoffe, das hilft, Ihre 18 Monate alte Frage!
col2[which(!is.finite(col2))] = NA
Sollten Sie haben, Lesen Sie das Buch A Beginner ' s Guide to R für eine vollständige Erklärung auf. Speziell erwähnt wird die folgende Fehlermeldung angezeigt:
Die Lösung ist das hinzufügen einer kleinen Konstanten Wert, um die Intensität von Daten, zum Beispiel, 1. Beachten Sie, dass es eine laufende Diskussion in der statistischen Gemeinschaft über das hinzufügen von einem kleinen Wert. Sei es wie es kann, Sie können die log-null, wenn die Berechnungen in R.
Ich nur erlitt eine weitere Möglichkeit, nach allen möglichen
na.omit
undna.exclude
überprüft.Habe ich so etwas wie:
lm(log(x) ~ log(y), data = ...)
Ohne zu bemerken, dass für einige Werte in meinem Datensatz, x oder y kann null sein:
log(0) = -Inf
Also nur eine andere Sache zu beachten!
Löste ich dieses problem durch das zurücksetzen meine Optionen.
options(na.action="na.exclude")
oder
options(na.action="na.omit")
Ich überprüfte meine Einstellungen und hatte bisher die option geändert
"na.pass", die nicht meine drop-y Beobachtungen mit NAs (wo
y~x
).Versuchen Sie, die Art von col2 (und alle anderen Variablen)
Nur ich hatte das gleiche problem. Holen Sie sich die finite-Elemente-mit
Traf ich diese Fehlermeldung, wenn mein äquivalent col2 war ein integer64, anstatt ein integer und bei der Verwendung von natürlichen und Polynom-splines splines::bs und splines:ns Beispiel:
Konvertierung zu einem standard-integer für mich gearbeitet:
Bekam ich diese Fehlermeldung, wenn ich Umgekehrt die Argumente beim Aufruf
reformulate
und verwenden Sie die Formel in meinelm
nennen, ohne zu überprüfen, so hatte ich das falsch Prädiktor und response-variable.Andere Sache zu beachten ist die Verwendung von Funktionen wie log() oder sin() machen Ihre x-und y-inf. zB. log 0 = 0 oder sin(pi) = 0.
Stellen Sie sicher, dass Sie don 'T haben keine" 0 " in das abhängige variable.