Bagaimana menentukan distribusi lognormal dalam argumen keluarga GLM di R?

17

Pertanyaan sederhana: Bagaimana cara menentukan distribusi lognormal dalam argumen keluarga GLM di R? Saya tidak dapat menemukan bagaimana ini dapat dicapai. Mengapa lognormal (atau eksponensial) bukan opsi dalam argumen keluarga?

Di suatu tempat di R-Archives saya membaca bahwa seseorang hanya harus menggunakan log-link untuk keluarga yang diatur ke gaussian di GLM, untuk menentukan lognormal. Namun, ini omong kosong karena ini akan sesuai dengan regresi non-linear dan R mulai meminta nilai awal.

Adakah yang tahu cara mengatur distribusi lognormal (atau eksponensial) untuk GLM?

Jens
sumber
1
Ini harus di SO dengan tag [r].
DWin
4
@DWin - Saya tidak setuju untuk sekali - Saya sering memilih untuk bermigrasi Qs ke SO sendiri, tetapi pertanyaan ini memiliki konten statistik yang signifikan.
onestop

Jawaban:

8

The gamlss paket memungkinkan Anda untuk menyesuaikan model aditif umum dengan kedua lognormal dan distribusi eksponensial, dan sekelompok orang lain, dengan beberapa variasi dalam fungsi link and menggunakan, jika Anda ingin, model semi atau non-parametrik berdasarkan splines dihukum. Ada beberapa makalah yang dipublikasikan tentang algoritma yang digunakan dan dokumentasi serta contoh yang ditautkan ke situs yang saya tautkan.

Jbowman
sumber
10

Mengenai pemasangan model eksponensial dengan glm: Ketika menggunakan glmfungsi dengan family = Gamma kita juga harus menggunakan fasilitas pendukung summary.glmuntuk memperbaiki parameter dispersi menjadi 1:

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

Dan ketika saya akan tunjukkan tetapi jbowman mengalahkan saya untuk itu, paket "gamlss" menyediakan pas log-normal:

help(dLOGNO, package=gamlss.dist)
DWIN
sumber
1
Saya tidak tahu tentang cara memperbaiki parameter dispersi (+1).
Jbowman
Saya melihat solusi ini di pos lain, saya pikir. Namun, ada dua masalah. Pertama, dalam hal ini hanya ringkasan yang disesuaikan tetapi parameter yang saya perlu ekstrak (residu dll) tidak disesuaikan dengan dispersi 1, atau apakah saya salah? Kedua, saya tidak bisa cocok dengan keluarga = Gamma karena ada nol di set data (sebenarnya ini adalah nilai kecil veeery tetapi ditetapkan ke nol). Saya akan checkout paket gamlss.dist!
Jens
1
Nah, nol-masalah bukan masalah dengan R atau glm, tetapi dengan matematika, ... dan jika Anda memiliki estimasi parameter, konstruksi residu adalah sepele di R. Posting pertanyaan itu di SO dengan tag [r] dan Anda pasti akan mendapat respons yang cepat.
DWin
9

Lognormal bukanlah suatu pilihan karena distribusi log-normal tidak dalam keluarga distribusi eksponensial . Model linier umum hanya dapat sesuai distribusi dari keluarga eksponensial.

Saya kurang jelas mengapa eksponensial bukanlah suatu pilihan, karena distribusi eksponensial berada dalam keluarga eksponensial (seperti yang Anda harapkan). Perangkat lunak statistik lain yang saya kenal memungkinkan pemasangan distribusi eksponensial sebagai GLM dengan memperlakukannya sebagai kasus khusus distribusi Gamma dengan bentuk (alias skala atau dispersi) parameter tetap pada 1 daripada diperkirakan. Saya tidak bisa melihat cara memperbaiki parameter ini menggunakan glm()fungsi R , namun. Salah satu alternatif adalah menggunakan survreg()fungsi dari survivalpaket dengan dist="exponential".

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

onestop
sumber
8
h(x),T(x),A(θ)
Apakah Anda memiliki referensi untuk pernyataan bahwa "Model linier umum hanya dapat ditampung distribusi dari keluarga eksponensial"?
Henrik
5

Memasukkan log-normal GLM tidak ada hubungannya dengan distribusi atau opsi tautan glm()fungsi. Istilah "log-normal" cukup membingungkan dalam pengertian ini, tetapi berarti bahwa variabel respons terdistribusi normal (keluarga = gaussian), dan transformasi diterapkan pada variabel ini dengan cara berikut:

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

Namun, ketika membandingkan log-normal glm ini dengan glm lain menggunakan distribusi yang berbeda (misalnya, gamma), fungsi AIC () harus diperbaiki. Adakah yang tahu alternatif untuk AIC yang salah ini (), dalam hal ini?

CHarma
sumber
2
Selamat datang di situs ini, @CHarma. Jika Anda memiliki pertanyaan, klik abu-abu "TANYA PERTANYAAN" di sudut kanan atas, daripada memasukkannya dalam jawaban Anda.
gung - Reinstate Monica
1

Coba gunakan perintah berikut:

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

Ini berfungsi di sini dan AIC tampaknya benar.

Danilo Scorzoni Ré
sumber
7
Jawaban ini salah. Ini berarti bahwa distribusi bersyarat dari y adalah Gaussian dan rata-rata yang dicatat akan sama dengan prediktor linier. Tentu saja bukan yang dijelaskan OP.
Michael M