Come specificare una distribuzione lognormale nell'argomento della famiglia glm in R?


17

Domanda semplice: come specificare una distribuzione lognormale nell'argomento della famiglia GLM in R? Non sono riuscito a trovare come raggiungere questo obiettivo. Perché lognormal (o esponenziale) non è un'opzione nell'argomento della famiglia?

Da qualche parte negli archivi R ho letto che si deve semplicemente usare il log-link per la famiglia impostata su gaussiana nel GLM, al fine di specificare un lognormale. Tuttavia, questa è una sciocchezza perché si adatta a una regressione non lineare e R inizia a chiedere valori iniziali.

Qualcuno è consapevole di come impostare una distribuzione lognormale (o esponenziale) per un GLM?


1
Questo dovrebbe essere su SO con un tag [r].
DWin

4
@DWin - Non sono d'accordo per una volta - voto spesso per migrare Qs su SO me stesso, ma questa domanda ha un contenuto statistico significativo.
onestop,

Risposte:


8

Il pacchetto gamlss ti consente di adattare modelli di additivi generalizzati con distribuzioni sia lognormali che esponenziali, e molti altri, con una certa varietà di funzioni di collegamento e usando, se lo desideri, modelli semi-o non parametrici basati su spline penalizzate. Ha pubblicato alcuni articoli sugli algoritmi utilizzati e sulla documentazione e sugli esempi collegati al sito a cui ho collegato.


10

Per quanto riguarda l'adattamento del modello esponenziale a glm: Quando si utilizza la glmfunzione con family = Gamma è necessario utilizzare anche le strutture di supporto summary.glmper fissare il parametro di dispersione su 1:

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

E come stavo per sottolineare, ma jbowman mi ha battuto, i pacchetti "gamlss" prevedono un adattamento log-normale:

help(dLOGNO, package=gamlss.dist)

1
Non sapevo come riparare il parametro di dispersione (+1).
jbowman,

Ho visto questa soluzione in un altro post, credo. Tuttavia, ci sono due problemi. Innanzitutto, in questo caso viene modificato solo il riepilogo, ma i parametri che devo estrarre (residui ecc.) Non sono adeguati alla dispersione di 1 o sbaglio? In secondo luogo, non riesco ad adattarmi a family = Gamma perché ci sono zeri nel set di dati (in realtà si tratta di valori veeery piccoli ma impostati su zero). Controllerò il pacchetto gamlss.dist!
Jens,

1
Bene, il problema degli zeri non è un problema con R o glm, ma con la matematica, ... e se hai delle stime dei parametri, la costruzione di residui è banale in R. Poni questa domanda in SO con un tag [r] e tu otterrà sicuramente una risposta rapida.
DWin

9

Lognormal non è un'opzione perché la distribuzione log-normale non appartiene alla famiglia esponenziale delle distribuzioni. I modelli lineari generalizzati possono adattarsi solo alle distribuzioni della famiglia esponenziale.

Sono meno chiaro perché esponenziale non è un'opzione, poiché la distribuzione esponenziale è nella famiglia esponenziale (come potresti sperare). Altri software statistici con cui ho familiarità consentono di adattare la distribuzione esponenziale come GLM trattandola come un caso speciale della distribuzione Gamma con parametro di forma (aka scala o dispersione) fissato a 1 anziché stimato. glm()Tuttavia, non riesco a vedere un modo per correggere questo parametro usando la funzione di R. Un'alternativa sarebbe usare la survreg()funzione dal survivalpacchetto con dist="exponential".

ylog(y)E(log(Y))log(E(Y)).


8
h(x),T(x),A(θ)

Hai un riferimento per l'affermazione che "I modelli lineari generalizzati possono adattarsi solo alle distribuzioni della famiglia esponenziale"?
Henrik,

5

Il montaggio di un GLM log-normal non ha nulla a che fare con la distribuzione né l'opzione di collegamento di glm() funzione. Il termine "log-normal" è piuttosto confuso in questo senso, ma significa che la variabile di risposta è normalmente distribuita (famiglia = gaussiana) e una trasformazione viene applicata a questa variabile nel modo seguente:

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

Tuttavia, quando si confronta questo glm log-normale con altri glm che utilizzano una distribuzione diversa (ad es. Gamma), la funzione AIC () deve essere corretta. Qualcuno saprebbe un'alternativa a questi AIC errati (), in questo caso?


2
Benvenuto nel sito, @CHarma. Se hai una domanda, fai clic sulla "DOMANDA" grigia nell'angolo in alto a destra, anziché includerla nella tua risposta.
gung - Ripristina Monica

1

Prova a usare il seguente comando:

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

Funziona qui e l'AIC sembra essere corretto.


7
Questa risposta è sbagliata Significherebbe che la distribuzione condizionale di y è gaussiana e che la media registrata equivarrebbe al predittore lineare. Certamente non quello che descrive l'OP.
Michael M,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.