Как указать логнормальное распределение в аргументе семейства glm в R?


17

Простой вопрос: как указать логнормальное распределение в аргументе семейства GLM в R? Я не мог найти, как это может быть достигнуто. Почему логнормальный (или экспоненциальный) не вариант в семейном аргументе?

Где-то в R-архивах я читал, что нужно просто использовать лог-ссылку для семейства, установленного на гауссовский в GLM, чтобы указать логнормальное. Однако это бессмыслица, потому что это будет соответствовать нелинейной регрессии, и R начинает запрашивать начальные значения.

Кто-нибудь знает, как установить логнормальное (или экспоненциальное) распределение для GLM?


1
Это должно быть на SO с тегом [r].
DWin

4
@DWin - я не согласен на этот раз - я часто голосую за то, чтобы перенести вопросы в SO самостоятельно, но этот вопрос имеет значительное статистическое содержание.
OneStop

Ответы:


8

Пакет gamlss позволяет вам подгонять обобщенные аддитивные модели как с логнормальным, так и с экспоненциальным распределением, а также с множеством других, с некоторым разнообразием функций связи и используя, если хотите, полу- или непараметрические модели, основанные на штрафованных сплайнах. Там опубликовано несколько статей об используемых алгоритмах, документации и примерах, связанных с сайтом, на который я ссылаюсь.


10

Что касается подгонки экспоненциальной модели к glm: При использовании glmфункции с семейством = гамма необходимо также использовать вспомогательные средства summary.glm, чтобы зафиксировать параметр дисперсии равным 1:

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

И, как я собирался указать, но jbowman опередил меня, пакет (ы) «gamlss» обеспечивает нормальное логарифмирование:

help(dLOGNO, package=gamlss.dist)

1
Я не знал о фиксации параметра дисперсии (+1).
jbowman

Я видел это решение в другом посте, я думаю. Однако есть две проблемы. Во-первых, в этом случае корректируется только резюме, но параметры, которые мне нужно извлечь (остатки и т. Д.), Не скорректированы с дисперсией 1, или я ошибаюсь? Во-вторых, я не могу соответствовать семейству = гамма, потому что в наборе данных есть нули (на самом деле это очень маленькие значения, но они были установлены на ноль). Я проверю пакет gamlss.dist!
Йенс

1
Ну, проблема нулей - это не проблема R или glm, но математики ... и если у вас есть оценки параметров, построение невязок тривиально в R. Отправьте этот вопрос в SO с тегом [r], и вы обязательно получит быстрый ответ.
DWin

9

Логнормальное не вариант, потому что логарифмически нормальное распределение не входит в экспоненциальное семейство распределений. Обобщенные линейные модели могут соответствовать только распределениям из экспоненциального семейства.

Я менее ясно , почему экспоненциальный не вариант, так как экспоненциальное распределение является в показательной семье (как вы могли бы надеяться). Другое статистическое программное обеспечение, с которым я знаком, позволяет приспособить экспоненциальное распределение как GLM, рассматривая его как особый случай гамма-распределения с параметром формы (или шкалы или дисперсии), установленным в 1, а не оцененным. Однако я не вижу способа исправить этот параметр с помощью glm()функции R. Одной из альтернатив будет использование survreg()функции из survivalпакета с dist="exponential".

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


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

Есть ли у вас ссылка на утверждение, что «Обобщенные линейные модели могут соответствовать только распределениям из экспоненциального семейства»?
Хенрик

5

Установка логарифмически нормального GLM не имеет ничего общего ни с распределением, ни с опцией связывания glm()функции. Термин «логарифмический нормальный» в этом смысле довольно запутанный, но означает, что переменная ответа обычно распределена (family = gaussian), и преобразование применяется к этой переменной следующим образом:

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

Однако при сравнении этого лог-нормального glm с другими glms, использующими другое распределение (например, гамма), функция AIC () должна быть исправлена. Кто-нибудь знает альтернативу этим ошибочным AIC (), в этом случае?


2
Добро пожаловать на сайт, @CHarma. Если у вас есть вопрос, нажмите серый вопрос «ЗАДАТЬ» в правом верхнем углу, а не включайте его в свой ответ.
gung - Восстановить Монику

1

Попробуйте использовать следующую команду:

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

Это работает здесь, и AIC кажется правильным.


7
Этот ответ неверен. Это будет означать, что условное распределение y является гауссовым, а зарегистрированное среднее будет равно линейному предиктору. Конечно, не то, что описывает ОП.
Майкл М,
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.