Como especificar uma distribuição lognormal no argumento da família glm em R?

17

Pergunta simples: como especificar uma distribuição lognormal no argumento da família GLM em R? Não consegui encontrar como isso pode ser alcançado. Por que lognormal (ou exponencial) não é uma opção no argumento da família?

Em algum lugar nos R-Archives, li que é preciso simplesmente usar o link de log para a família definida como gaussiana no GLM, a fim de especificar um lognormal. No entanto, isso não faz sentido, porque isso ajustará uma regressão não linear e R começará a solicitar valores iniciais.

Alguém sabe como definir uma distribuição lognormal (ou exponencial) para um GLM?

Jens
fonte
1
Isso deve estar no SO com uma tag [r].
Dwin
4
@ DWin - eu discordo uma vez - muitas vezes voto na migração de Qs para SO, mas essa pergunta tem um conteúdo estatístico significativo.
onestop 21/01

Respostas:

8

O pacote gamlss permite que você ajuste modelos aditivos generalizados com distribuições lognormal e exponencial e várias outras, com alguma variedade nas funções de link e usando, se desejar, modelos semi ou não paramétricos com base em splines penalizados. Tem alguns trabalhos publicados sobre os algoritmos usados, documentação e exemplos vinculados ao site ao qual eu vinculei.

jbowman
fonte
10

Com relação ao ajuste do modelo exponencial com glm: Ao usar a glmfunção family = Gamma, é necessário também usar os recursos de suporte de summary.glmpara fixar o parâmetro de dispersão em 1:

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

E como eu apontaria, mas o jbowman me venceu, o (s) pacote (s) "gamlss" fornece um ajuste normal do log:

help(dLOGNO, package=gamlss.dist)
DWin
fonte
1
Eu não sabia sobre a fixação do parâmetro de dispersão (+1).
jbowman
Eu vi essa solução em outro post, eu acho. No entanto, existem dois problemas. Primeiro, neste caso, apenas o resumo é ajustado, mas os parâmetros que preciso extrair (resíduos etc.) não são ajustados para a dispersão de 1, ou estou errado? Segundo, não posso me encaixar com family = Gamma porque há zeros no conjunto de dados (na verdade, esses são valores muito pequenos, mas foram definidos como zero). Vou fazer o checkout do pacote gamlss.dist!
Jens
1
Bem, o problema de zeros não é um problema com R ou glm, mas com matemática, ... e se você tiver estimativas de parâmetros, a construção de resíduos é trivial em R. Poste essa pergunta no SO com uma tag [r] e você certamente obterá uma resposta rápida.
Dwin
9

Lognormal não é uma opção porque a distribuição log-normal não está na família exponencial de distribuições. Modelos lineares generalizados só podem caber distribuições da família exponencial.

Estou menos claro por que exponencial não é uma opção, pois a distribuição exponencial está na família exponencial (como você pode esperar). Outro software estatístico com o qual estou familiarizado permite ajustar a distribuição exponencial como um GLM, tratando-o como um caso especial da distribuição Gamma com o parâmetro de forma (aka escala ou dispersão) fixado em 1 em vez de estimado. Não consigo ver uma maneira de corrigir esse parâmetro usando a glm()função de R , no entanto. Uma alternativa seria usar a survreg()função do survivalpacote com dist="exponential".

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

uma parada
fonte
8
h(x),T(x),A(θ)
Você tem uma referência para a afirmação de que "modelos lineares generalizados só podem caber em distribuições da família exponencial"?
Henrik
5

A instalação de um GLM normal de log não tem nada a ver com a distribuição nem a opção de link da glm()função. O termo "log-normal" é bastante confuso nesse sentido, mas significa que a variável de resposta é normalmente distribuída (família = gaussiana) e uma transformação é aplicada a essa variável da seguinte maneira:

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

No entanto, ao comparar esse glm log-normal com outros glms usando distribuição diferente (por exemplo, gama), a função AIC () deve ser corrigida. Alguém saberia uma alternativa para esses AIC errôneos (), neste caso?

CHarma
fonte
2
Bem-vindo ao site, @CHarma. Se você tiver uma pergunta, clique no botão cinza "PERGUNTAR PERGUNTA" no canto superior direito, em vez de incluí-lo em sua resposta.
gung - Restabelece Monica
1

Tente usar o seguinte comando:

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

Funciona aqui e a AIC parece estar correta.

Danilo Scorzoni Ré
fonte
7
Esta resposta está errada. Isso significaria que a distribuição condicional de y é gaussiana e a média registrada seria igual ao preditor linear. Certamente não é o que o OP descreve.
Michael M