ใช้ R สำหรับ GLM ด้วยการกระจายแกมม่า


14

ขณะนี้ฉันมีปัญหาในการทำความเข้าใจไวยากรณ์สำหรับ R เพื่อปรับ GLM ให้เหมาะสมโดยใช้การแจกแจงแกมมา

ฉันมีชุดข้อมูลซึ่งแต่ละแถวมี 3 co-variates ( ), ตัวแปรตอบกลับ ( Y ) และพารามิเตอร์รูปร่าง ( K ) ฉันต้องการจำลองสเกลของการแจกแจงแกมม่าเป็นฟังก์ชันเชิงเส้นของสามตัวแปร แต่ฉันไม่เข้าใจวิธีตั้งค่ารูปร่างของการแจกแจงเป็นKสำหรับแต่ละแถวของข้อมูลX1,X2,X3YKK

สถานการณ์ที่ฉันคิดว่าคล้ายคลึงกันคือสำหรับการแจกแจงแบบทวินาม GLM ต้องการให้ทราบจำนวนการทดลอง ( ) สำหรับการป้อนข้อมูลแต่ละครั้งN

คำตอบ:


12

gamma GLM ปกติมีข้อสันนิษฐานว่าพารามิเตอร์รูปร่างเป็นค่าคงที่ในลักษณะเดียวกับที่โมเดลเชิงเส้นปกติถือว่าค่าความแปรปรวนคงที่

ในการปัดเศษ GLM พารามิเตอร์การกระจาย, ในVar ( Y i ) = ϕ V ( μ i )เป็นค่าคงที่ตามปกติϕVar(Yi)=ϕV(μi)

โดยทั่วไปคุณมี( φ )แต่ที่ไม่ได้ช่วยa(ϕ)

บางทีอาจเป็นไปได้ที่จะใช้ Gamma GLM แบบถ่วงน้ำหนักเพื่อรวมเอฟเฟกต์ของพารามิเตอร์รูปร่างที่ระบุนี้ แต่ฉันยังไม่ได้ตรวจสอบความเป็นไปได้นี้ (ถ้ามันใช้งานได้อาจเป็นวิธีที่ง่ายที่สุดในการทำ แต่ฉันไม่ใช่ แน่ใจว่ามันจะ)

หากคุณมี GLM สองเท่าคุณสามารถประมาณพารามิเตอร์นั้นเป็นฟังก์ชันของ covariates ... และหากซอฟต์แวร์ 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
ϕ=KKKβK

μMASS

glm(V4 ~ V3 + V2 + V1, family=Gamma)V1,V2,V3V4β

1
คุณสามารถใช้อะไรก็ได้นอก R ที่สามารถนำไปใช้งานได้ คุณสามารถเพิ่มความน่าจะเป็นตัวอย่างหรือคุณอาจจะใช้การประมาณการตามออก\คุณช่วยอธิบายรายละเอียดเพิ่มเติมเกี่ยวกับ "ไม่เหมาะสม" ได้ที่นี่หรือไม่ ϕ^
Glen_b -Reinstate Monica

1
สำหรับวัตถุประสงค์ในการทดสอบรหัสของฉันฉันสร้างชุดข้อมูลที่มี 10,000 tuples เมื่อต้องการสร้างฉันคงที่ตัวอย่างที่สร้าง , คำนวณ (พารามิเตอร์สเกลที่มีฟังก์ชันลิงก์ผกผัน ) และสร้างตัวแปรสุ่มจากการกระจายtheta) เมื่อผมทำงานวิจัยในชุดข้อมูลที่คาดการณ์ของไม่มีที่ไหนเลยใกล้\ เมื่อฉันทำสิ่งนี้เพื่อการแจกแจงอื่นการทำนายของ R นั้นเกือบจะถูกต้องแล้ว V θ = ( β T V ) - 1 Y ~ แกมมา( 5 , θ ) β ββVθ=(βTV)1YGamma(5,θ)β^β
Jon Claus

12

ฉันใช้ฟังก์ชันgamma.shapeของแพ็คเกจMASSตามที่อธิบายโดยBalajari (2013)เพื่อประเมินพารามิเตอร์รูปร่างหลังจากนั้นจึงปรับการประมาณค่าสัมประสิทธิ์และการทำนายใน GLM ฉันแนะนำให้คุณอ่านการบรรยายตามที่เป็นอยู่ในความคิดของฉันมีความชัดเจนและน่าสนใจเกี่ยวกับการใช้การกระจายแกมมาใน GLMs

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)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.