GLM-Funktion in R mit log-link nicht funktioniert
Ich bin über das Buch "Generalisierte Lineare Modelle und Erweiterung" von Hardin und Hilbe (second edition, 2007) in dem moment. Die Autoren schlagen vor, dass anstelle der OLS-Modelle", die log-link wird in der Regel für response-Daten, die nur positive Werte auf einer kontinuierlichen Skala". Natürlich zeigen Sie auch, residual-plots zu überprüfen, ob ein "normales" lineares Modell unter einer Identität verknüpfen kann weiterhin verwendet werden.
Ich versuche zu replizieren, in der R, was Sie tun, das Buch in STATA. In der Tat, ich habe keine Probleme in STATA mit dem link anmelden. Jedoch beim Aufruf des gleichen Modells mit R glm-Funktion, aber die Angabe family=gaussian(link="log")
ich bin gebeten Startwerte. Wenn ich Sie alle gleich null, ich bekomme immer die Meldung, dass der Algorithmus nicht konvergieren. Kommissionierung anderen Werte wird die Nachricht manchmal, aber mehr oft bekomme ich:
Error in glm.fit(x = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, :
NA/NaN/Inf in 'x'
Wie gesagt, in STATA ich kann diese Modelle ohne Einstellung der Startwerte und ohne Fehler. Ich habe versucht, viele verschiedene Modelle und unterschiedliche Datensätze, aber das problem ist immer der gleiche (es sei denn, ich enthalten nur eine einzelne unabhängige variable). Könnte mir jemand sagen, warum dies der Fall ist, oder was ich falsch mache, oder warum die vorgeschlagenen Modelle aus dem Buch vielleicht nicht geeignet sein? Ich würde schätzen jede Hilfe, danke!
Edit: Als ein Beispiel, das den Fehler reproduziert betrachten Sie den Datensatz heruntergeladen werden kann hier. Mit diesem dataset geladen ist, führe ich das folgende Modell:
mod <- glm(betaplasma ~ age + vituse, family=gaussian(link="log"), data=data2, start=c(0,0,0))
Diese erzeugt die Warnmeldung, dass der Algorithmus nicht konvergieren.
Edit2: ich wurde gebeten, auch die STATA-output für das Modell. Hier ist es:
. glm betaplasma age vituse, link(log)
Iteration 0: log likelihood = -2162.1385
Iteration 1: log likelihood = -2096.4765
Iteration 2: log likelihood = -2076.2465
Iteration 3: log likelihood = -2076.2244
Iteration 4: log likelihood = -2076.2244
Generalized linear models No. of obs = 315
Optimization : ML Residual df = 312
Scale parameter = 31384.51
Deviance = 9791967.359 (1/df) Deviance = 31384.51
Pearson = 9791967.359 (1/df) Pearson = 31384.51
Variance function: V(u) = 1 [Gaussian]
Link function : g(u) = ln(u) [Log]
AIC = 13.20142
Log likelihood = -2076.224437 BIC = 9790173
------------------------------------------------------------------------------
| OIM
betaplasma | Coef. Std. Err. z P>|z| [95% Conf. Interval]
-------------+----------------------------------------------------------------
age | .0056809 .0032737 1.74 0.083 -.0007354 .0120972
vituse | -.273027 .0650773 -4.20 0.000 -.4005762 -.1454779
_cons | 5.467577 .2131874 25.65 0.000 5.049738 5.885417
------------------------------------------------------------------------------
glm
kann gut sein, mehr zerbrechlich als Stata - glm-fitting-code, aber ich haben link anmelden erfolgreich viele Male in der Vergangenheit. Kannst du ein reproduzierbares Beispiel [ tinyurl.com/reproducible-000 ] ?Danke für die Antwort und sorry für das crossposting. Als relativer noob ich wusste nicht, war dies ein problem. Als Beispiel betrachten wir den Datensatz heruntergeladen werden kann hier. Dann führe ich das folgende Modell: mod <- glm(betaplasma ~ Alter + vituse, family=gaussian(link="log"), data=data2, start=c(0,0,0)), die gibt mir die Warnmeldung, dass der Algorithmus nicht konvergieren.
es wäre gut, fügen Sie diesen Kommentar auf Ihre Frage (durch Bearbeiten der ursprünglichen Frage) ...
Wäre interessant zu vergleichen, die eigentliche Stata-Ausgabe, erzeugt aus der quasipoisson-Modell. Pflege hinzufügen, dass auch auf Ihre Frage?
DWin, soeben die Ausgabe, es ist in der Tat sehr ähnlich. Danke dir, auch für deine Mühe!
InformationsquelleAutor Flow | 2012-11-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als ich sagte, in meinem Kommentar, es ist wohl wahr, dass Stata ist robuster (in die numerische, nicht die statistischen Sinne) GLM Montage als R., Der sagte, Einbau diese insbesondere dataset scheint nicht zu hart.
Daten Lesen:
Plot der Daten:
Ist es ziemlich einfach, um diese zu passen, indem Sie die anfangs-Wert für den intercept-parameter, um etwas vernünftiges (D. H. etwas nah am Mittelwert der Daten auf der log-Skala: entweder dieser Werke
Letzterem Fall ist wohl eine angemessene Standard-Strategie für den Start-log-link passt. Die Ergebnisse (leicht gekürzt) mit Stata ist sehr eng:
(R ist mit t statt Z-Statistiken für die p-Werte und (?) Konfidenzintervalle)
Jedoch, es gibt ein paar Gründe, die ich vielleicht nicht zu diesem Modell passen zu diesen Daten. Vor allem die Annahme der Konstanten Varianz (in Verbindung mit der Gauß-Modell) ist nicht sehr vernünftig-diese Daten scheinen besser geeignet für eine lognormal-Modell (oder gleichwertig, für nur log-Transformation und die Analyse mit einem standard-Gauß-Modell).
Plotten auf einem
log(1+x)
- Skala (es ist ein null-Eintrag in der Daten):Plotten mit
ggplot
(das passt separaten Zeilen für jeden Wert vonvituse
eher als passend ein Additives Modell)Ansicht ohne 'Ausreißer':
Zwei andere Punkte: (1) es ist ein wenig seltsam, dass es eine Antwort mit einem Wert von 0 in diesem Datensatz-nicht unmöglich, aber ungerade; (2) es sieht aus wie
vituse
behandelt werden sollte als ein Faktor und nicht als numerische ("1=ja, ziemlich oft, 2=ja, nicht oft, 3=No") -- vielleicht Ordnungszahl.InformationsquelleAutor Ben Bolker
Ich würde gerne vorschlagen, dass es kann der Fehler sein könnte, nicht-normalen. Wenn Sie einverstanden sind (oder eher, wenn die Daten stimmt), dann betrachten Sie diese Konstruktion:
Sollte dies Binomial-Fehler um eine Identität-inked Modell. Dies hat den Vorteil, dass Ihre Schätzungen sind leichter zu interpretieren, die auf der original-Skala der Variablen. Entschuldigung für frühere falsche suggestion zu verwenden
family = poisson
mit probit-link. Erinnern Sie sich noch nie präsentiert alle Daten und auch die Beschreibung der Verteilungen. Offensichtlich binomial-Fehler ist nicht geeignet für die Datenmenge, @BenBolker bietet.Wenn Sie nicht-integer-Werte mit log-normal verteilten Fehlern sollten Sie die quasipoisson-Modelle. Wenn man dieses Modell auf die Daten, die Ben Bolker präsentiert und vergleichen Sie die gaussian(link="log" für Logbuch) modela Sie sind ziemlich viel nicht zu unterscheiden und keine Startwerte benötigt werden.
Sollten Sie wahrscheinlich verwenden Sie ein leicht komplexeres Modell seit vituse ist offensichtlich ein drei-Niveau-Faktor:
log
,identity
, undsqrt
.Ooops, geschrieben haben soll family=binomial(link="probit"). Beheben wird.
InformationsquelleAutor 42-