*--- 3.10節 ベイズ統計の基礎 ;
data MYDATA ;
input Y N ;
cards ;
2 5
;
run ;
ods graphics on ;
proc mcmc data=MYDATA seed=777 nmc=1000 ;
parm THETA 0.5 ;
prior THETA ~ beta(1, 1) ;
model Y ~ binomial(N, theta) ;
run ;
ods graphics off ;
data MYDATA ;
input Y @@ ;
cards ;
19 24 26 27 29
;
run ;
ods graphics on ;
proc mcmc data=MYDATA seed=777 nmc=1000
outpost=RESULT ;
parm mu 25 ;
prior mu ~ normal(mean=27, var= 9) ;
model Y ~ normal(mean=mu, var=16) ;
run ;
ods graphics off ;
data MYDATA ;
input n y x1 x2 ;
cards ;
5 2 1 0
15 10 1 1
15 2 0 0
5 3 0 1
;
run ;
ods graphics on ;
proc mcmc data=MYDATA seed=777 nmc=5000 nbi=5000 thin=5 ;
parms (beta0 beta1 beta2) 0 ;
prior beta0 beta1 beta2 ~ normal(0, var = 1000000) ;
p = logistic(beta0 + beta1*x1 + beta2*x2) ;
model y ~ binomial(n,p) ;
run ;
ods graphics off ;
data MYDATA ;
input X Y @@ ;
cards ;
1 1 2 2 3 3 4 4 5 5.1
;
run ;
ods graphics on;
proc mcmc data=MYDATA seed=777 nmc=2000
outpost=RESULT monitor=(_parms_ sigma) ;
array tau[2] ;
array beta[2] ;
array sigma[2] ;
parms tau: 1 ;
parms beta: 0 ;
beginprior ;
prior tau1 ~ gamma(0.001, iscale=0.001) ;
hyper tau2 ~ gamma(0.001, iscale=0.001) ;
prior beta:~ normal(mean=0, var=1/tau2) ;
sigma1 = sqrt(1/tau1) ;
sigma2 = sqrt(1/tau2) ;
endprior ;
mu = beta1 + beta2*X ;
model Y ~ normal(mu, var=1/tau1) ;
run;
ods graphics off ;
*************************************************;
*--- 3章 演習問題 ;
* (1) GroupごとにWeightの平均値に関するグラフを作成してください。;
data EXAMPLE ;
call streaminit(7777) ;
do GROUP=1 to 2 ;
do N=1 to 100 ;
WEIGHT = rand("NORMAL", 1-3*GROUP, 10) ;
ADR = 2-rand("BINOMIAL", 0.1*GROUP, 1) ;
TIME = ceil(100*rand("UNIFORM")/GROUP) ;
GENDER = rand("BINOMIAL", 0.4, 1) ;
output ;
end ;
end ;
run ;
* (2) GroupごとにWEIGHTのようやく統計量を算出した後、2標本t検定と2標本Wilcoxon検定を用いてGroup間のWeightの比較をしてください。;
;
proc sgplot data=EXAMPLE ;
hbar GROUP / response=WEIGHT stat=mean numstd=1
limitstat=stddev limits=upper ;
run ;
* (3) GroupごとにADRの頻度を集計した後、X2検定を用いてGroup間の比較をしてください。;
;
proc means data=EXAMPLE ;
class GROUP ;
var WEIGHT ;
run ;
proc ttest data=EXAMPLE ;
class GROUP ;
var WEIGHT ;
run ;
proc npar1way wilcoxon data=EXAMPLE correct=no ;
class GROUP ;
var WEIGHT ;
run ;
* (4)GroupごとにADRの頻度を集計した後、X2検定を用いてGroup間の比較をしてください。;
;
proc glm data=EXAMPLE ;
class GROUP GENDER ;
model WEIGHT = GROUP GENDER / solution ss3 ;
lsmeans GROUP ;
run ;
* (5)GroupごとにADRの頻度を集計した後、X2検定を用いてGroup間の比較をしてください。;
;
proc freq data=EXAMPLE ;
tables GROUP*ADR / riskdiff nocol nopercent chisq ;
exact or ;
run ;
* (6) GroupごとにGenderで調整した上でのADRに関する調整オッズ比を算出してください。;
proc logistic data=EXAMPLE order=internal ;
class GROUP GENDER / ref=last param=ref ;
model ADR = GROUP GENDER / expb ;
run ;
* (7)Groupごとに「副作用が発言するまでの日数」について、カプラン・マイヤー法を用いて累積発言割合の推定を計算した後、ログランク検定を用いてGroup間の比較をしてください。;
proc lifetest data=EXAMPLE plots=(s) ;
time TIME * ADR(2) ;
strata GROUP ;
run;
* (8)Groupごとに、Genderで調整した上でのADRに関する調整ハザード比を算出してください。 ;
proc phreg data=EXAMPLE ;
class GROUP GENDER ;
model TIME * ADR(2) = GROUP GENDER / ties=exact;
run ;
* (9) 検定を4回行いました。(T1:p=0.001, T2:p=0.002, T3:p=0.003, T4:p=0.004)、この時ボンフェローニの方法で調整p値を算出してください。
;
data PVALUE ;
input TEST $ RAW_P ;
cards ;
T1 0.001
T2 0.002
T3 0.030
T4 0.400
;
run ;
proc multtest pdata=PVALUE bon out=OUTDATA ;
run ;
* (10) 「平均値の差=4, 標準偏差=10, α=5%, 検出力90%」と設定したときに「帰無仮説H0:平均値の差が0である」という帰無仮説に関する2標本t検定を行ったときに必要となる例数を算出してください。
;
proc power ;
twosamplemeans
test = diff
meandiff = 4
stddev = 10
alpha = 0.05
power = 0.9
ntotal = . ;
run ;
* (11)以下の文章をSASプログラムのコードで記述してください。
サイコロを3個振った時の目の合計が10~13になる確率を、趣味レーションにて計算してください。;
data SIMULATION;*(keep=I SUCCESS) ;
call streaminit(777) ;
do I=1 to 100000 ;
D1 = rand("TABLE",1/6,1/6,1/6,1/6,1/6,1/6) ;
D2 = rand("TABLE",1/6,1/6,1/6,1/6,1/6,1/6) ;
D3 = rand("TABLE",1/6,1/6,1/6,1/6,1/6,1/6) ;
if (10 <= sum(D1,D2,D3) <=13) then SUCCESS=1; else SUCCESS=0 ;
output ;
end ;
run ;
proc means data=SIMULATION nonobs mean ;
var SUCCESS ;
run ;