WinBUGS에서 특정 변수에 대한 예측을 얻는 방법?


10

저는 WinBUGS의 새로운 사용자이며 귀하의 도움에 대해 한 가지 질문이 있습니다. 다음 코드를 실행 한 후 beta0through 매개 변수 beta4(통계, 밀도)를 얻었지만 코드에서 모델링하도록 h설정 한 마지막 값을 예측하는 방법을 모르겠습니다 NA.

누구든지 힌트를 줄 수 있습니까? 모든 조언을 주시면 감사하겠습니다.


model {
for(i in 1: N) {
CF01[i] ~ dnorm(0, 20)
CF02[i]  ~ dnorm(0, 1)
h[i] ~ dpois (lambda [i])
log(lambda [i]) <- beta0 + beta1*CF03[i] + beta2*CF02[i] + beta3*CF01[i] + beta4*IND[i]
}
beta0 ~ dnorm(0.0, 1.0E-6)
beta1 ~ dnorm(0.0, 1.0E-6)
beta2 ~ dnorm(0.0, 1.0E-6)
beta3 ~ dnorm(0.0, 1.0E-6)
beta4  <- log(p)
p ~ dunif(lower, upper)
}

INITS
list(beta0 = 0, beta1 = 0, beta2 = 0, beta3 = 0, p = 0.9)

DATA(LIST)
list(N = 154, lower = 0.80, upper = 0.95,

h = c(1, 4, 1, 2, 1, 2, 1, 1, 1, 3, 3, 0, 0, 0, 2, 0, 1, 0, 4, 2,
3, 0, 2, 1, 1, 2, 2, 2, 3, 4, 2, 3, 1, 0, 1, 3, 3, 3, 1, 0, 1,
0, 5, 2, 1, 2, 1, 3, 3, 1, 1, 0, 2, 2, 0, 3, 0, 0, 3, 2, 2, 2,
1, 0, 3, 3, 1, 1, 1, 2, 1, 0, 1, 2, 1, 2, 0, 2, 1, 0, 0, 2, 5,
0, 2, 1, 0, 2, 1, 2, 2, 2, 0, 3, 2, 1, 3, 3, 3, 3, 0, 1, 3, 3,
3, 1, 0, 0, 1, 2, 1, 0, 1, 4, 1, 1, 1, 1, 2, 1, 3, 0, 0, 1, 1,
1, 1, 0, 2, 1, 0, 0, 1, 1, 5, 1, 1, 1, 3, 0, 1, 1, 1, 0, 2, 1,
0, 3, 3, 0, 0, 1, 2, 6, NA),

CF03 = c(-1.575, 0.170, -1.040, -0.010, -0.750,
0.665, -0.250, 0.145, -0.345, -1.915, -1.515,
0.215, -1.040, -0.035, 0.805, -0.860, -1.775,
1.725, -1.345, 1.055, -1.935, -0.160, -0.075,
-1.305, 1.175, 0.130, -1.025, -0.630, 0.065,
-0.665, 0.415, -0.660, -1.145, 0.165, 0.955,
-0.920, 0.250, -0.365, 0.750, 0.045, -2.760,
-0.520, -0.095, 0.700, 0.155, -0.580, -0.970,
-0.685, -0.640, -0.900, -0.250, -1.355, -1.330,
0.440, -1.505, -1.715, -0.330, 1.375, -1.135,
-1.285, 0.605, 0.360, 0.705, 1.380, -2.385, -1.875,
-0.390, 0.770, 1.605, -0.430, -1.120, 1.575, 0.440,
-1.320, -0.540, -1.490, -1.815, -2.395, 0.305,
0.735, -0.790, -1.070, -1.085, -0.540, -0.935,
-0.790, 1.400, 0.310, -1.150, -0.725, -0.150,
-0.640, 2.040, -1.180, -0.235, -0.070, -0.500,
-0.750, -1.450, -0.235, -1.635, -0.460, -1.855,
-0.925, 0.075, 2.900, -0.820, -0.170, -0.355,
-0.170, 0.595, 0.655, 0.070, 0.330, 0.395, 1.165,
0.750, -0.275, -0.700, 0.880, -0.970, 1.155, 0.600,
-0.075, -1.120, 1.480, -1.255, 0.255, 0.725,
-1.230, -0.760, -0.380, -0.015, -1.005, -1.605,
0.435, -0.695, -1.995, 0.315, -0.385, -0.175,
-0.470, -1.215, 0.780, -1.860, -0.035, -2.700,
-1.055, 1.210, 0.600, -0.710, 0.425, 0.155, -0.525,
-0.565),

CF02 = c(NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, 0.38, 0.06, -0.94,
-0.02, -0.28, -0.78, -0.95, 2.33, 1.43, 1.24, 1.26,
-0.75, -1.5, -2.09, 1.01, -0.05, 2.48, 2.48, 0.46,
0.46, -0.2, -1.11, 0.52, -0.37, 0.58, 0.86, 0.59,
-0.12, -1.33, 1.4, -1.84, -1.4, -0.76, -0.23,
-1.78, -1.43, 1.2, 0.32, 1.87, 0.43, -1.71, -0.54,
-1.25, -1.01, -1.98, 0.52, -1.07, -0.44, -0.24,
-1.31, -2.14, -0.43, 2.47, -0.09, -1.32, -0.3,
-0.99, 1.1, 0.41, 1.01, -0.19, 0.45, -0.07, -1.41,
0.87, 0.68, 1.61, 0.36, -1.06, -0.44, -0.16, 0.72,
-0.69, -0.94, 0.11, 1.25, 0.33, -0.05, 0.87, -0.37,
-0.2, -2.22, 0.26, -0.53, -1.59, 0.04, 0.16, -2.66,
-0.21, -0.92, 0.25, -1.36, -1.62, 0.61, -0.2, 0,
1.14, 0.27, -0.64, 2.29, -0.56, -0.59, 0.44, -0.05,
0.56, 0.71, 0.32, -0.38, 0.01, -1.62, 1.74, 0.27, 0.97,
1.22, -0.21, -0.05, 1.15, 1.49, -0.15, 0.05, -0.87,
-0.3, -0.08, 0.5, 0.84, -1.67, 0.69, 0.47, 0.44,
-1.35, -0.24, -1.5, -1.32, -0.08, 0.76, -0.57,
-0.84, -1.11, 1.94, -0.68),

CF01 = c(NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, -0.117, -0.211, -0.333, -0.229, -0.272,
-0.243, -0.148, 0.191, -0.263, -0.239, -0.168,
-0.381, -0.512, -0.338, -0.296, 0.067, 0.104,
-0.254, -0.167, -0.526, -0.096, -0.43, 0.013,
-0.438, -0.297, -0.131, -0.098, -0.046, -0.063,
-0.194, -0.155, -0.645, -0.603, -0.374, -0.214,
-0.165, -0.509, -0.171, -0.442, -0.468, -0.289,
-0.427, -0.519, -0.454, 0.046, -0.275, -0.401,
-0.542, -0.488, -0.52, -0.018, -0.551, -0.444,
-0.254, -0.286, 0.048, -0.03, -0.015, -0.219,
-0.029, 0.059, 0.007, 0.157, 0.141, -0.035, 0.136,
0.526, 0.113, 0.22, -0.022, -0.173, 0.021, -0.027,
0.261, 0.082, -0.266, -0.284, -0.097, 0.097, -0.06,
0.397, 0.315, 0.302, -0.026, 0.268, -0.111, 0.084,
0.14, -0.073, 0.287, 0.061, 0.035, -0.022, -0.091,
-0.22, -0.021, -0.17, -0.184, 0.121, -0.192,
-0.24, -0.283, -0.003, -0.45, -0.138, -0.143,
0.017, -0.245, 0.003, 0.108, 0.015, -0.219, 0.09,
-0.22, -0.004, -0.178, 0.396, 0.204, 0.342, 0.079,
-0.034, -0.122, -0.24, -0.125, 0.382, 0.072, 0.294,
0.577, 0.4, 0.213, 0.359, 0.074, 0.388, 0.253, 0.167),

IND = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0))

당신은 lambda [N]의 가치를 요구하는 것이 아닙니까?
whuber

@ whuber 예, 맞습니다. 그러나 더 근본적으로, 예측하고 싶은 것 (즉, 사후 분포가 있음)이 이미 관찰 한 것과 구별되어야합니다. 베타 샘플을 사용하여 winbugs 또는 사후 처리에서 명시 적으로 예측할 수 있습니다.
atiretoo-복원 모니카

@atiretoo 내가 알 수있는 한, 람다는 정확히 예측하고자하는 것입니다 : 이것은 로그 링크가있는 포아송 분포에 대한 일반화 선형 모델이며 람다는 예측 된 포아송 매개 변수입니다. 그들은 관찰되지 않았습니다. 여기서해야 할 것은 lambda [N]에 모니터를 설치하는 것입니다.
whuber

@ whuber, h[N]대신 오히려 모니터라고 말하고 lambda[N]예측 값의 사후 분포를 얻습니다.
Curious

@tomek이지만 h[N]예측 된 값은 아닙니다. 예측 된 포아송 분포에서 얻은 추첨 모음입니다. 따라서 포아송 모수의 변이와 해당 포아송 분포 자체의 변이를 결합합니다. 관련된 것은의 사후 분포입니다 lambda[N].
whuber

답변:


6

h모니터링 할 파라미터 목록에 변수 를 추가하기 만하면 됩니다. R2WinBUGS와 같은 패키지를 사용 하는 경우 함수 hparameters.to.save인수에 전달 된 목록에 변수 를 추가하십시오 bugs. 그런 다음 h(NA가있는 값)의 마지막 값을 찾으십시오 .

이것은 베이지안 추론을 예측하는 일반적인 방법입니다 ( 이 질문도 참조하십시오 ). 멋지고 간단합니다! 더 이상 매개 변수 평가와 예측이 분리되지 않습니다. 모든 것이 한 번에 완료됩니다. 모수의 사후 분포는 실제 데이터에 의해 제공되고 NA 값 ( "예측")으로 전파됩니다.


토마스, 도와 줘서 고마워 Sample Monitor Tool에서 h 변수를 모니터링하려고 시도했지만 작동하지 않습니다. 다시 도와 주시겠습니까? 다음은 WinBUGS에서 수행 한 절차입니다 (R2WinBUGS 사용 방법을 모르겠습니다). 1) 샘플 모니터 도구에서 샘플 선택 2) 노드 3으로 표시된 흰색 상자에 h를 입력하십시오. 3) 표시된 버튼을 클릭하십시오. 모니터링하려는 매개 변수 목록에없는 반면 다른 매개 변수 (beta0, beta1, beta2, beta3, p)는 목록에 표시됩니다. 모니터링하려는 매개 변수 목록에 "h"를 추가하는 방법을 알고 있습니까? 다시 감사합니다!
Bo Yu

@BoYu, R2WinBUGS 패키지를 사용하여 R에서 WinBUGS를 실행 한 후 WinBUGS에서 직접 수행하는 방법을 모르겠습니다. R 스크립트를 저장하고 자체 그래프 생성과 함께 일괄 처리로 모두 실행할 수 있기 때문에 훨씬 더 실용적 입니다. 스크립트 예는 여기참조하십시오 .
Curious

즉, WinBUGS 자체에서도 가능할 것입니다. 그러나 어떻게하는지 모르겠습니다 (그리고 대부분의 사람들이 R에서 그것을 호출한다고 생각합니다).
Curious

1
우선, whuber, atiretoo 및 Tomas에게 감사합니다! whuber가 이미 언급했듯이, 그것은 일반화 된 선형 모델이며, h의 변수는 다른 예측 변수 (CF01, CF02, CF03 및 IND)로 조절 된 가변 속도 (λ)로 Poisson 분포에 적합합니다. h의 마지막 값은 내가 알아야 할 것이며 관찰되지는 않지만 (NA로 표시) h의 다른 모든 값은 관찰됩니다. whuber가 옳다고 생각합니다. 샘플 모니터 도구에서 람다를 매개 변수로 설정하고 람다의 마지막 값에 대한 통계를 확인하고 마지막 h에 대한 내 예측을 얻으십시오. 모두 감사합니다.
Bo Yu

1
@ Tomas, 너무 감사합니다. 그래, 너가 맞아! WinBUGS는 통계 및 확률 밀도를 포함하여 h [N]의 예측을 제공합니다. 이제 알겠습니다. 안부 인사
Bo Yu
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.