ฉันจะสร้างแบบจำลองสัดส่วนด้วย BUGS / JAGS / STAN ได้อย่างไร


10

ฉันกำลังพยายามสร้างแบบจำลองที่การตอบสนองเป็นสัดส่วน (อันที่จริงแล้วมันคือส่วนแบ่งของคะแนนโหวตที่บุคคลได้รับจากการเลือกตั้ง) การกระจายของมันไม่ปกติดังนั้นฉันตัดสินใจที่จะจำลองด้วยการแจกแจงแบบเบต้า ฉันยังมีผู้ทำนายหลายคน

อย่างไรก็ตามฉันไม่รู้วิธีเขียนใน BUGS / JAGS / STAN (JAGS จะเป็นตัวเลือกที่ดีที่สุดของฉัน แต่มันก็ไม่สำคัญอะไร) ปัญหาของฉันคือฉันสร้างผลรวมของพารามิเตอร์โดยตัวทำนาย แต่แล้วฉันจะทำอย่างไรกับมัน?

รหัสจะเป็นแบบนี้ (ในรูปแบบของ JAGS) แต่ฉันไม่รู้วิธี "ลิงก์" y_hatและyพารามิเตอร์

for (i in 1:n) {
 y[i] ~ dbeta(alpha, beta)

 y_hat[i] <- a + b * x[i]
}

( y_hatเป็นเพียงผลคูณของพารามิเตอร์และตัวทำนายดังนั้นความสัมพันธ์ที่กำหนดขึ้นได้aและbเป็นสัมประสิทธิ์ที่ฉันพยายามประเมินxเป็นตัวทำนาย)

ขอบคุณสำหรับคำแนะนำของคุณ!


a, b, y_hat คืออะไร คุณควรกำหนดรูปแบบของคุณอย่างชัดเจน โดยวิธีการที่ BUGS ไวยากรณ์อยู่ใกล้กับไวยากรณ์ทางคณิตศาสตร์ ดังนั้นหากคุณรู้วิธีเขียนแบบจำลองของคุณในภาษาคณิตศาสตร์แล้วงานเกือบทั้งหมดจะเสร็จสิ้น
Stéphane Laurent

สเตฟานขอบคุณ ฉันแก้ไขคำถามเพื่อกำหนด a, b, y_hat ผมไม่ทราบว่าคำตอบทางคณิตศาสตร์ทั้งมิฉะนั้นคำตอบที่แน่นอนจะง่ายขึ้นมาก ;-)
Joël

ฉันสงสัยว่าฉันสามารถสร้างความจริงที่ว่า E (y) = อัลฟ่า / (อัลฟา + เบต้า) แต่ฉันไม่สามารถคิดได้ว่าจริงๆ
Joël

คำตอบ:


19

วิธีเบต้าถดถอยคือการ reparameterize ในแง่ของและ\โดยที่จะเท่ากับ y_ สิ่งที่คุณทำนาย ใน parameterization นี้คุณจะมีและ\ จากนั้นคุณสามารถจำลองเป็น logit ของการรวมเชิงเส้น สามารถมีมาก่อน (ต้องมากกว่า 0) หรือสามารถสร้างแบบจำลองบน covariates ได้เช่นกัน (เลือกฟังก์ชั่นลิงก์เพื่อให้มีค่ามากกว่า 0 เช่นเลขชี้กำลัง)ไวμμϕμβ = ( 1 - μ ) × ϕ μ ϕα=μ×ϕβ=(1μ)×ϕμϕ

อาจเป็นไปได้เช่น:

for(i in 1:n) {
  y[i] ~ dbeta(alpha[i], beta[i])
  alpha[i] <- mu[i] * phi
  beta[i]  <- (1-mu[i]) * phi
  logit(mu[i]) <- a + b*x[i]
}
phi ~ dgamma(.1,.1)
a ~ dnorm(0,.001)
b ~ dnorm(0,.001)

ขอบคุณนี่มีประโยชน์มาก! ฉันกำลังพยายามปรับนางแบบให้สอดคล้องกับคำแนะนำของคุณ
Joël

อย่างไรก็ตามเมื่อฉันรันโมเดลฉันได้รับข้อผิดพลาดเช่น: "Error in node y [6283] ค่าพาเรนต์ไม่ถูกต้อง" ความคิดใด ๆ ที่เกิดขึ้นที่นี่?
Joël

@ Joëlคุณค่าของ y [6283] คืออะไร? คุณแน่ใจหรือไม่ว่าค่าของอัลฟ่าและเบทาส์ถูก จำกัด ไว้ที่ค่าทางกฎหมาย? ฉันคาดหวังว่าบางสิ่งอาจไปถึง 0 หรือต่ำกว่าและนั่นทำให้เกิดข้อผิดพลาด
Greg Snow

ไม่ฉันตรวจสอบแล้วว่าค่า y ทั้งหมดของฉันดีกว่า 0 อย่างมาก (และต่ำกว่า 1) บางทีนักบวชของฉันอาจขัดแย้งกับค่านิยมเชิงประจักษ์ในบางจุด? แต่ฉันไม่รู้วิธีตรวจสอบเรื่องนี้และนักบวชของฉันก็ดูสมเหตุสมผล - อย่างน้อยสำหรับฉัน!
Joël

1
@ colin ฉันไม่รู้จัก JAG ที่ดีดังนั้นนี่อาจถูกถามในฟอรัมโดยเฉพาะสำหรับ JAGS ดีกว่า หรือลองใช้เครื่องมืออื่นฉันพบว่าฉันชอบ Stan for Bayes ในสมัยนี้
เกร็กสโนว์

18

Greg Snow ให้คำตอบที่ดี เพื่อความสมบูรณ์นี่คือสิ่งที่เทียบเท่าในไวยากรณ์ของ Stan แม้ว่าสแตนจะมีการแจกแจงเบต้าที่คุณสามารถใช้ได้ แต่เร็วกว่าที่จะคำนวณลอการิทึมของความหนาแน่นเบต้าด้วยตัวคุณเองเพราะค่าคงที่log(y)และlog(1-y)สามารถคำนวณได้ครั้งเดียวตั้งแต่เริ่มต้น (ไม่ใช่ทุกครั้งที่y ~ beta(alpha,beta)เรียก) โดยการเพิ่มlp__ตัวแปรที่สงวนไว้(ดูด้านล่าง) คุณสามารถรวมลอการิทึมของความหนาแน่นเบต้าเหนือการสังเกตในตัวอย่างของคุณ ฉันใช้เลเบล "gamma" สำหรับพารามิเตอร์เวกเตอร์ในตัวทำนายเชิงเส้น

data {
  int<lower=1> N;
  int<lower=1> K;
  real<lower=0,upper=1> y[N];
  matrix[N,K] X;
}
transformed data {
  real log_y[N];
  real log_1my[N];
  for (i in 1:N) {
    log_y[i] <- log(y[i]);
    log_1my[i] <- log1m(y[i]);
  }
}
parameters {
  vector[K] gamma;
  real<lower=0> phi;
}
model {
  vector[N] Xgamma;
  real mu;
  real alpha_m1;
  real beta_m1;
  Xgamma <- X * gamma;
  for (i in 1:N) {
    mu <- inv_logit(Xgamma[i]);
    alpha_m1 <- mu * phi - 1.0;
    beta_m1 <- (1.0 - mu) * phi - 1.0;
    lp__ <- lp__ - lbeta(alpha,beta) + alpha_m1 * log_y[i] + 
                                        beta_m1 * log_1my[i];
  }
  // optional priors on gamma and phi here
}

ขอบคุณเบ็น! มีประโยชน์มากในการมีไวยากรณ์ของสแตนเช่นกัน
Joël

Stan v2 มีคำแถลงการสุ่มตัวอย่าง "beta_proportion" ที่ฉันเชื่อว่า obviates ต้องการจัดการโดยตรง "lp__"
THK
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.