Wie spezifiziere ich eine logarithmische Normalverteilung im Argument der glm-Familie in R?

17

Einfache Frage: Wie spezifiziere ich eine logarithmische Normalverteilung im Argument der GLM-Familie in R? Ich konnte nicht finden, wie dies erreicht werden kann. Warum ist lognormal (oder exponentiell) keine Option im Familienargument?

Irgendwo in den R-Archiven habe ich gelesen, dass man einfach den Log-Link für die Familie verwenden muss, die im GLM auf Gauß gesetzt ist, um einen Lognormalen anzugeben. Dies ist jedoch Unsinn, da dies zu einer nichtlinearen Regression passt und R nach Startwerten fragt.

Ist jemandem bekannt, wie eine logarithmische (oder exponentielle) Verteilung für einen GLM festgelegt wird?

Jens
quelle
1
Dies sollte SO mit einem [r] -Tag sein.
DWin
4
@DWin - ich bin ausnahmsweise nicht einverstanden - Ich stimme oft dafür, Qs selbst nach SO zu migrieren, aber diese Frage hat einen signifikanten statistischen Inhalt.
am

Antworten:

8

Mit dem gamlss- Paket können Sie verallgemeinerte additive Modelle mit logarithmischen und exponentiellen Verteilungen sowie einer Reihe anderer Modelle mit verschiedenen Verknüpfungsfunktionen anpassen und auf Wunsch semi- oder nichtparametrische Modelle verwenden, die auf Splines mit Bestrafung basieren. Es wurden einige Artikel über die verwendeten Algorithmen und die Dokumentation sowie Beispiele veröffentlicht, die mit der Site verknüpft sind, auf die ich verlinkt habe.

Bogenschütze
quelle
10

Zur Anpassung des Exponentialmodells mit glm: Bei Verwendung der glmFunktion mit family = Gamma müssen auch die Hilfsfunktionen von verwendet summary.glmwerden, um den Dispersionsparameter auf 1 zu fixieren:

?summary.glm
fit <- glm(formula =..., family = Gamma)
summary(fit,dispersion=1) 

Und wie ich schon erwähnen wollte, aber Jbowman hat mich geschlagen, sorgt das "gamlss" -Paket für eine log-normale Anpassung:

help(dLOGNO, package=gamlss.dist)
DWin
quelle
1
Ich wusste nichts über die Festlegung des Dispersionsparameters (+1).
Bogenschütze
Ich habe diese Lösung in einem anderen Beitrag gesehen, denke ich. Es gibt jedoch zwei Probleme. Zunächst wird in diesem Fall nur die Zusammenfassung angepasst, aber die zu extrahierenden Parameter (Residuen usw.) werden nicht auf die Streuung von 1 angepasst, oder irre ich mich? Zweitens kann ich nicht zu family = Gamma passen, da der Datensatz Nullen enthält (tatsächlich handelt es sich um sehr kleine Werte, die jedoch auf Null gesetzt wurden). Ich werde das gamlss.dist-Paket auschecken!
Jens
1
Nun, das Nullen-Problem ist kein Problem mit R oder glm, sondern mit Mathematik. Wenn Sie Parameterschätzungen haben, ist die Konstruktion von Residuen in R trivial. Stellen Sie diese Frage in SO mit einem [r] -Tag und Ihnen wird sicherlich eine schnelle Antwort bekommen.
DW am
9

Lognormal ist keine Option, da die Lognormal-Verteilung nicht zur Familie der Exponentialverteilungen gehört . Verallgemeinerte lineare Modelle können nur Verteilungen aus der Exponentialfamilie anpassen.

Ich bin weniger klar , warum exponentielle ist keine Option, da die exponentielle Verteilung ist in der exponentiellen Familie (wie Sie vielleicht hoffen). Andere statistische Software, mit der ich vertraut bin, ermöglicht die Anpassung der Exponentialverteilung als GLM, indem sie als Sonderfall der Gammaverteilung behandelt wird, bei der der Formparameter (Skalierung oder Streuung) auf 1 festgelegt und nicht geschätzt wird. Ich kann jedoch keine Möglichkeit finden, diesen Parameter mit der glm()Funktion von R zu korrigieren. Eine Alternative wäre, die survreg()Funktion aus dem survivalPaket mit zu verwenden dist="exponential".

yLog(y)E(Log(Y.))Log(E(Y.)).

ein Stop
quelle
8
h(x),T(x),A(θ)
Haben Sie eine Referenz für die Aussage, dass "Generalisierte lineare Modelle nur für Verteilungen aus der Exponentialfamilie geeignet sind"?
Henrik
5

Das Anpassen eines log-normalen GLM hat nichts mit der Verteilung oder der Verknüpfungsoption der glm()Funktion zu tun . Der Begriff "log-normal" ist in diesem Sinne ziemlich verwirrend, bedeutet jedoch, dass die Antwortvariable normalverteilt ist (family = gaussian) und auf diese Variable wie folgt eine Transformation angewendet wird:

log.glm <- glm(log(y)~x, family=gaussian, data=my.dat)

Wenn Sie diesen logarithmischen Normalwert jedoch mit anderen Werten vergleichen, die eine andere Verteilung verwenden (z. B. Gamma), sollte die AIC () - Funktion korrigiert werden. Wüsste jemand in diesem Fall eine Alternative zu dieser fehlerhaften AIC ()?

CHarma
quelle
2
Willkommen auf der Seite, @CHarma. Wenn Sie eine Frage haben, klicken Sie bitte auf die graue Schaltfläche "FRAGE STELLEN" in der oberen rechten Ecke, anstatt sie in Ihre Antwort aufzunehmen.
gung - Wiedereinsetzung von Monica
1

Versuchen Sie es mit dem folgenden Befehl:

log.glm = glm(y ~ x, family=gaussian(link="log"), data=my.dat)

Es funktioniert hier und der AIC scheint korrekt zu sein.

Danilo Scorzoni Ré
quelle
7
Diese Antwort ist falsch. Dies würde bedeuten, dass die bedingte Verteilung von y Gaußsch ist und der protokollierte Mittelwert dem linearen Prädiktor entspricht. Bestimmt nicht das, was das OP beschreibt.
Michael M