Использование R для GLM с гамма-распределением


14

В настоящее время у меня проблема с пониманием синтаксиса R для подгонки GLM с использованием гамма-распределения.

У меня есть набор данных, где каждая строка содержит 3 ко-вариации ( ), переменную ответа ( ) и параметр формы ( K ). Я хочу смоделировать масштаб гамма-распределения как линейную функцию от трех ковариат, но я не понимаю, как задать форму распределения для K для каждой строки данных. Y K KX1,X2,X3YKK

Ситуация, которая, на мой взгляд, аналогична, заключается в том, что для биномиального распределения GLM требует, чтобы число испытаний ( N ) было известно для каждой записи данных.

Ответы:


12

Обычная гамма GLM содержит предположение, что параметр формы является постоянным, так же, как нормальная линейная модель предполагает постоянную дисперсию.

На языке GLM параметр дисперсии in обычно постоянен.Var ( Y i ) = ϕ V ( μ i )ϕVar(Yi)=ϕV(μi)

В целом, у вас есть , но это не помогает.a(ϕ)

Возможно, было бы возможно использовать взвешенный Gamma GLM для включения этого эффекта указанного параметра формы, но я еще не исследовал эту возможность (если это работает, это, вероятно, самый простой способ сделать это, но я не совсем уверен, что так и будет).

Если у вас был двойной GLM, вы могли бы оценить этот параметр как функцию от ковариат ... и если программа double glm позволяет вам указать смещение в дисперсионном члене, вы можете сделать это. Похоже, что функция dglmв пакете dglmпозволяет вам указать смещение. Я не знаю, позволит ли это вам указать модель дисперсии, как (скажем), ~ offset(<something>) + 0хотя.

Другой альтернативой было бы максимизировать вероятность напрямую.


> y <- rgamma(100,10,.1)

> summary(glm(y~1,family=Gamma))

Call:
glm(formula = y ~ 1, family = Gamma)

Deviance Residuals: 
     Min        1Q    Median        3Q       Max  
-0.93768  -0.25371  -0.05188   0.16078   0.81347  

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept) 0.0103660  0.0003486   29.74   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1

(Dispersion parameter for Gamma family taken to be 0.1130783) 

    Null deviance: 11.223  on 99  degrees of freedom
Residual deviance: 11.223  on 99  degrees of freedom
AIC: 973.56

Number of Fisher Scoring iterations: 5

Строка, где говорится:

   (Dispersion parameter for Gamma family taken to be 0.1130783)

это тот, который вы хотите.

Это связано с параметром формы Гаммы.ϕ^


1
Благодарю. В R есть способ указать, что такое ? Из этой ссылки кажется, что мне не нужно выбирать конкретный пока я не напечатаю результаты. Правильно ли я сказал, что если есть фиксированный , то это не влияет на результат для , вектор коэффициентов? Если так, как я могу выбрать лучший чтобы соответствовать данным вручную (без использования R)? K K β Kϕ=KKKβK
Джон Клаус

Если для гаммы есть фиксированный параметр формы, он не влияет на оценку , а следовательно, и на вектор коэффициентов. Вы можете вычислить в оценку из выходного GLM, но это не максимального правдоподобия. Если бы я хотел определить параметр формы, я бы использовал соответствующие функции в пакете . Почему важно избегать использования R и почему вы пытаетесь сделать это вручную, а не использовать компьютер? μMASS
Glen_b

Я оговорился. Под «ручным» я подразумевал, что мне нужен довольно простой алгоритм, который я мог бы реализовать самостоятельно за пределами R. Кроме того, когда я пытаюсь тестирование glm(V4 ~ V3 + V2 + V1, family=Gamma), где являются ко-переменными предиктора, а - ответ, он неправильно определяет , коэффициент вектора. Я знаю, что это неправильно определяет его, потому что я сгенерировал выборочные данные с известными коэффициентами, чтобы определить масштаб и постоянную форму 5.V 4V1,V2,V3V4β
Джон Клаус

1
Ну, вы можете реализовать что-либо за пределами R, что может быть реализовано в нем; например, вы можете максимизировать вероятность или использовать оценку, основанную на . Можете ли вы объяснить более подробно, что вы подразумеваете под «неподобающим» здесь? ϕ^
Glen_b

1
Для тестирования собственного кода я сгенерировал набор данных с 10 000 кортежей. Чтобы сгенерировать его, я исправил , сгенерированный образец , вычислил (параметр масштаба с функцией обратной ссылки ) и сгенерировал случайную величину из распределения . Когда я запускаю R для набора данных, его прогнозируемый далеко не . Когда я сделал это для других дистрибутивов, предсказание R было почти точно правильным. V θ = ( & beta ; Т V ) - 1 У ~ Гамма ( 5 , θ ) & beta ; & beta ;βVθ=(βTV)1YGamma(5,θ)β^β
Джон Клаус

12

Я использовал функцию gamma.shape пакета MASS , как описано Balajari (2013) , чтобы впоследствии оценить параметр формы, а затем скорректировать оценки и предсказания коэффициентов в GLM. Я посоветовал вам прочитать лекцию, так как, на мой взгляд, она очень понятна и интересна в отношении использования гамма-распределения в GLM.

glmGamma <- glm(response ~ x1, family = Gamma(link = "identity")
library(MASS)
myshape <- gamma.shape(glmGamma)
gampred <- predict(glmGamma , type = "response", se = T, dispersion = 1/myshape$alpha) 
    summary(glmGamma, dispersion = 1/myshape$alpha)
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.