Easy to type

非正規労働者の職業訓練記録です。ボーナスと福利厚生を勝ち取る夢を持っています。

はじめての 統計データ分析 ―ベイズ的〈ポストp値時代〉の統計学― その4

その4です。今回は第3章の話をしていきます。

3章 独立した2群の差の推測

内容

  • 2群に分けた群比較をする際には、ランダム化による交絡因子の排除が重要!(ランダマイゼーション)
  • 2群の、どんな差を見たいかで仮説は変わる
    • 群1の平均が群2の平均を上回る確率
    • 群1, 2の平均値の差のt年推定、区間推定
    • 群1, 2の平均値の差が基準点cより大きい確率
    • 効果量が基準点cより大きい確率
    • 非重複度、優越率、閾上率…etc
  • 2群でモデルを作る時に、標準偏差は共通させるか?分けるか?
    • 共通させる場合
      • f(\theta) = f(\mu_1, \mu_2, sigma) = f(\mu_1)f(\mu_2)f(\sigma)
      • f(\theta|x) = f(\mu_1, \mu_2, \sigma|x1, x2) ∝ f(x1, x2| u1, u2, \sigma)f(u1, u2, \sigma)
    • 独立に定義する場合
      • f(\theta) = f(\mu_1, \mu_2, \sigma) = f(\mu_1)f(\mu_2)f(\sigma1)f(\sigma2)
      • f(\theta|x) = f(\mu_1, \mu_2, \sigma|x1, x2) ∝ f(x1, x2| \mu_1, \mu_2, \sigma_1, \sigma_2)f(\mu_1, \mu_2, \sigma_1, \sigma_2)
    • かならずしも独立に定義したほうが良いわけではない。モデルの複雑性は増してしまうので。
  • 生成量の例
    • 平均の差
    • 平均の差の効果量(estimated size)
      • es = \frac{\mu_1 - \mu_2} {\sigma}
    • 非重複度(Cohen’s U) : u1が群2で何%点に相当するか
      • U_3 = F(\mu_1| \mu_2, \sigma)
      • 0.5 で2群が完全に重複していることを示す
    • 優越率(pid) : 無作為に選んだ1方の群の測定値が、無作為に選んだもう一方の測定値を上回る確率
      •  pid = p(x_1^\ast - x_2^\ast > 0)
      • 評価をするには、標準正規分布における \frac{es}{\sqrt{2}}の分布関数を調べれば良い
    • 閾上率(pic) : 無作為に選んだ一方の群の測定値と、もういっぽうの測定値の差がcより大きくなる確率
      • pic = p(x^\ast_1 - x^\ast_2 > c)
      • 評価をするには、標準正規分布における \frac{\mu_1 - \mu_2 - c}  {\sqrt{2}\sigma}の分布関数を調べればよい
  • モデルの選択

章末問題

データの取得

とりあえずデータを読み込みます。 今回は2群の対応のない場合の比較です。

import numpy as np
from logging import getLogger, Formatter, StreamHandler, DEBUG

# printではなくloggerを使う
def get_logger():
    logger = getLogger(__name__)
    logger.setLevel(DEBUG)
    log_fmt = '%(asctime)s : %(name)s : %(levelname)s : %(message)s'
    formatter = Formatter(log_fmt)
    stream_handler = StreamHandler()
    stream_handler.setLevel(DEBUG)
    stream_handler.setFormatter(formatter)
    logger.addHandler(stream_handler)
    return logger

# データの準備
a = np.array([56,55,55,62,54,63,47,58,56,56,57,52,53,50,50,57,57,55,60,65,53,43,60,51,52,
60,54,49,56,54,55,57,53,58,54,57,60,57,53,61,60,58,56,52,62,52,66,63,54,50])
b = np.array([33,37,59,41,42,61,46,25,32,35,55,44,45,41,33,61,46,16,48,34,27,37,28,31,32,
20,50,42,26,55,45,36,51,51,50,48,47,39,36,35,32,38,25,66,54,27,35,34,49,39])
logger = get_logger()

各種統計量の計算と可視化

  • 各種統計量はpandas.describeを使えば大体出せますね。
  • 分布はdistplot以外にも色々ありますが、matplotlibよりseabornの方が簡単に色々でるので使いました。
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from IPython.core.display import display
%matplotlib inline

df = pd.DataFrame({"a":a, "b":b})
display(df.describe()) # 分散は出ない

sns.distplot(a)
plt.show()
sns.distplot(b)
plt.show()
  • 結果
a b
count 50 50
mean 55.76 40.38
std 4.57839 11.1427
min 43 16
25% 53 33
50% 56 39
75% 58 48
max 66 66

f:id:ajhjhaf:20170525001759p:plain

f:id:ajhjhaf:20170525010310p:plain

さてこの結果から何が言えるかというと…

  • a群の方が平均値が15ぐらい高くなっている
  • 中央値となる50%点もa群の方が高いが、なんといっても最小値が大幅に違う
  • この2つの群はともに正規分布っぽい感じにはなっている
  • 分散は2群で結構違いそう。

みたいなものがわかります。よくある統計でしたら、t検定で2群の間には有意差があるということを出して終わりですね。 今回は最初に書いた内容を使って、

  • 差の大きさがどれぐらい幅があるのか(ちょっとだけの差でしたら、殆ど意味がないですよね)。
  • 差は14ぐらいありそうである。それはどれぐらい確かなのか。
  • 2つの分布はどれぐらい離れているのか。重複してる部分はどれぐらいあるのか。
  • 群としてはaの方が大きくても、この群から適当に1つずつ選んだ時に、どれぐらいの確立でaの方の個体が大きな値になるのか

と言ったことを調べていくわけです。

Stanによる統計モデルの構築

Stanでモデルを作って、2群を比較します。 教科書に従って、とりあえず不偏分散のモデルを作っています。aとbの分散値が先程の要約テーブルで結構違いましたので、等分散よりモデルとしては適当になりそうです(後で検証します)

import os
import pystan
import pickle

# Stanのモデルを読み込んでコンパイルする
stan_file = os.path.join("stan", "g2_ind.stan")
stan_file_c = os.path.join("stan", "g2_ind.pkl")
model = pystan.StanModel(file=stan_file)
with open(stan_file_c, "wb") as f:
    pickle.dump(model, f)
# Stanのモデル
data {
    int<lower=0> n_a ;
    int<lower=0> n_b ;
    real<lower=0> a[n_a] ;
    real<lower=0> b[n_b] ;
    real<lower=0> c_mu_diff ;
    real<lower=0> c_es ;
    real<lower=0> c_cohenu ;
    real<lower=0> c_pod ;
    real<lower=0> c_pbt ;
    real<lower=0> cdash_pbt ;
}

parameters {
    real<lower=0> mu_a ;
    real<lower=0> sigma_a ;
    real<lower=0> mu_b ;
    real<lower=0> sigma_b ;
}

model {
    a ~ normal(mu_a, sigma_a) ;
    b ~ normal(mu_b, sigma_b) ;
}

generated quantities {
    vector[n_a] log_lik ;
    real mu_diff ;
    real es ;
    real cohenu ;
    real pod ;
    real pbt ;
    int<lower=0, upper=1> prob_mu_diff_upper_0 ;
    int<lower=0, upper=1> prob_mu_diff_upper_c ;
    int<lower=0, upper=1> prob_es_upper_c ;
    int<lower=0, upper=1> prob_cohenu_upper_c ;
    int<lower=0, upper=1> prob_pod_upper_c ;
    int<lower=0, upper=1> prob_pbt_upper_cdash ;

    for(i in 1:n_a){
        log_lik[i] = normal_lpdf(a[i] | mu_a, sigma_a) + normal_lpdf(b[i] | mu_b, sigma_b) ;
    }
    mu_diff = mu_a - mu_b ;
    es = mu_diff / sigma_a ;
    cohenu = normal_cdf(mu_a, mu_b, sigma_b) ;
    pod = normal_cdf(mu_diff / sqrt(pow(sigma_a, 2) + pow(sigma_b, 2)), 0, 1) ;
    pbt = normal_cdf((mu_diff - c_pbt) / sqrt(pow(sigma_a, 2)  + pow(sigma_b, 2)), 0, 1) ;
    prob_mu_diff_upper_0 = mu_diff > 0 ? 1 : 0 ;
    prob_mu_diff_upper_c = mu_diff > c_mu_diff ? 1 : 0 ;
    prob_es_upper_c = es > c_es ? 1 : 0 ;
    prob_cohenu_upper_c = cohenu > c_cohenu ? 1 : 0 ;
    prob_pod_upper_c = pod > c_pod ? 1 : 0 ;
    prob_pbt_upper_cdash = pbt > cdash_pbt ? 1 : 0 ;
}

統計モデルによる事後分布のサンプリング

注意点は2つあります。 まず1つは可視化をする部分です。 PyStanのモジュールをそのまま使ったサンプリング値の可視化では、サンプリング値が全て同値である場合(=分散が0の時)はtraceplotでエラーが発生してしまいます。 これは可視化するために行っている、カーネル密度推定の行列計算で失敗するためです。 今回、僕は自分でPyStanの一部を改造したものを利用しました。 が、これは試してみたかっただけなので、こんな面倒なことをせず、summary_dfのsd columnを見て、0だったらtrace plotを書かなければ良いと思います。

もう1つはWAICの計算の部分です。 計算をする際に、データ数分だけfor文を回して対数尤度を計算しています この実装をしているものが検索してみると見つかるし、豊田本上級でもこの紹介がされています(定義的にも正しい?)。 ただ今回の場合は、モデルが単純で50個のデータが共通の母数を持つ正規分布から生成されていので、対数尤度は1次元配列で計算し、waicの計算でsumをする部分が無くても大丈夫です。 本の付録のモデルでは、こちらの簡潔版で計算されています。

import pandas as pd
import pickle
import pystan
import matplotlib
import os
import matplotlib.pyplot as plt
from IPython.core.display import display
%matplotlib inline
matplotlib.rcParams['figure.figsize'] = (10, 50)

# Stanで使うデータの用意
stan_data = {"n_a": a.size,
             "n_b": b.size,
             "a": a,
             "b": b,
             "c_mu_diff": 14, #標本平均の差を使ってみる
             "c_es": 3.0, # 標本効果量で、a群からみたもの
             "c_cohenu": 0.95, # a群から見た非重複度
             "c_pod": 0.95, # 優越率
             "c_pbt": 10, # 閾上率の基準値
             "cdash_pbt": 0.60} #閾上率
# 興味のあるパラメータの設定
par = ["mu_a",
       "sigma_a",
       "mu_b",
       "sigma_b",
       "log_lik",
       "mu_diff",
       "es",
       "cohenu",
       "pod",
       "pbt",
       "prob_mu_diff_upper_0",
       "prob_mu_diff_upper_c",
       "prob_es_upper_c",
       "prob_cohenu_upper_c",
       "prob_pod_upper_c",
       "prob_pbt_upper_cdash"]
prob = [0.025, 0.05, 0.25, 0.5, 0.75, 0.95, 0.975]

# モデルの読み込み
stan_file_c = os.path.join("stan", "g2_ind.pkl")
with open(stan_file_c, "rb") as f:
    model = pickle.load(f)

# MCMCでサンプリング
fit = model.sampling(data=stan_data,
                     pars=par,
                     iter=21000,
                     chains=5,
                     warmup=1000,
                     seed=1234,
                     algorithm="NUTS")


# 事後分布の表を取得
summary = fit.summary(pars=par, probs=prob)
summary_df = pd.DataFrame(summary["summary"],
                          index=summary["summary_rownames"],
                          columns=summary["summary_colnames"])
display(summary_df)

# 事後分布の可視化
fit.traceplot(par, {"prob_mu_diff_upper_0":np.int})
plt.show()

# WAICの計算
log_lik = fit.extract("log_lik")["log_lik"]
waic = -2 * np.sum(np.log(np.mean(np.exp(log_lik), axis=0))) + 2 * np.sum(np.var(log_lik, axis=0))
logger.info("WAICの値は{0}です".format(waic))
  • 結果(表と分布)
mean se_mean sd 2.5% 5% 25% 50% 75% 95% 97.5% n_eff Rhat
mu_a 55.7604 0.00210572 0.665888 54.4483 54.6698 55.3161 55.7601 56.2025 56.8535 57.0771 100000 0.99999
sigma_a 4.69936 0.00163133 0.492013 3.85845 3.97235 4.35244 4.65696 5.00083 5.56823 5.78077 90964 0.999993
mu_b 40.3768 0.00513303 1.62321 37.1566 37.7085 39.2942 40.3763 41.4601 43.0385 43.5743 100000 0.999979
sigma_b 11.4351 0.00377584 1.19403 9.39226 9.66662 10.5891 11.3316 12.1638 13.5548 14.0673 100000 1.00003
log_lik[0] -6.04735 0.000490513 0.152051 -6.35677 -6.30426 -6.14733 -6.04291 -5.94225 -5.80452 -5.76237 96090 0.999988
log_lik[1] -5.88977 0.000482951 0.146824 -6.18808 -6.13823 -5.98677 -5.88593 -5.78838 -5.65612 -5.61159 92424 1.00001
log_lik[2] -7.21332 0.000987215 0.312185 -7.8894 -7.76195 -7.40848 -7.19029 -6.99224 -6.74368 -6.67145 100000 0.999982
log_lik[3] -6.74241 0.000737068 0.233082 -7.24164 -7.15023 -6.89021 -6.72715 -6.57867 -6.38654 -6.32838 100000 0.999992
log_lik[4] -5.91407 0.000486231 0.147301 -6.21372 -6.16309 -6.01166 -5.90981 -5.8126 -5.67868 -5.63577 91775 1.00002
log_lik[5] -8.73421 0.00139258 0.440372 -9.66647 -9.49826 -9.01462 -8.7067 -8.42342 -8.06105 -7.95471 100000 0.999977
log_lik[6] -7.74988 0.00123701 0.391176 -8.59949 -8.44025 -7.99428 -7.7188 -7.47338 -7.16121 -7.07202 100000 1.00001
log_lik[7] -6.88161 0.000752406 0.237932 -7.39441 -7.29783 -7.03121 -6.86651 -6.71561 -6.51828 -6.45829 100000 0.999984
log_lik[8] -6.10953 0.000492635 0.155785 -6.42726 -6.37336 -6.21194 -6.10435 -6.00181 -5.86187 -5.81865 100000 0.999984
log_lik[9] -5.94667 0.00048357 0.148166 -6.24786 -6.19765 -6.04461 -5.9428 -5.8443 -5.70916 -5.66716 93881 0.999998
log_lik[10] -6.71085 0.000707805 0.223828 -7.19011 -7.1025 -6.85252 -6.6971 -6.55379 -6.36867 -6.30991 100000 0.999989
log_lik[11] -6.21359 0.000504989 0.159691 -6.54217 -6.48589 -6.31792 -6.20807 -6.10355 -5.96017 -5.91534 100000 1.00002
log_lik[12] -6.09369 0.00049108 0.150984 -6.40111 -6.34936 -6.19326 -6.08984 -5.98977 -5.85288 -5.80928 94527 1.00002
log_lik[13] -6.60844 0.000670976 0.212181 -7.05939 -6.97869 -6.7431 -6.59501 -6.461 -6.28327 -6.22806 100000 1.00001
log_lik[14] -6.82174 0.000683128 0.216024 -7.28002 -7.19688 -6.95918 -6.80882 -6.67223 -6.48941 -6.43331 100000 1.00001
log_lik[15] -7.5454 0.0011654 0.368531 -8.34713 -8.19487 -7.77589 -7.51674 -7.28485 -6.99185 -6.90637 100000 0.999982
log_lik[16] -5.99181 0.000501445 0.14957 -6.29642 -6.24462 -6.09066 -5.9877 -5.8892 -5.7523 -5.71028 88970 1.00003
log_lik[17] -8.19007 0.00156933 0.496266 -9.27191 -9.06673 -8.49926 -8.15016 -7.83863 -7.44239 -7.33214 100000 1
log_lik[18] -6.48041 0.000548936 0.173589 -6.83737 -6.77563 -6.59425 -6.47343 -6.35979 -6.20713 -6.15985 100000 1.00001
log_lik[19] -7.98662 0.00135638 0.428926 -8.91464 -8.74592 -8.25546 -7.95257 -7.68182 -7.34138 -7.24086 100000 0.999979
log_lik[20] -6.71568 0.000647957 0.204902 -7.14689 -7.07082 -6.84698 -6.70495 -6.57247 -6.39928 -6.34525 100000 0.999987
log_lik[21] -9.68219 0.00249132 0.787825 -11.3858 -11.0712 -10.1776 -9.6205 -9.12183 -8.49679 -8.32186 100000 1.00001
log_lik[22] -6.85578 0.000652113 0.206216 -7.2915 -7.21196 -6.98743 -6.84574 -6.71229 -6.53602 -6.47974 100000 0.999978
log_lik[23] -6.70807 0.000604833 0.191265 -7.10608 -7.03765 -6.83147 -6.69943 -6.57574 -6.40914 -6.35915 100000 1
log_lik[24] -6.43882 0.000529426 0.167419 -6.78252 -6.724 -6.54813 -6.43286 -6.32297 -6.17362 -6.12905 100000 0.999994
log_lik[25] -7.88994 0.0011714 0.37043 -8.69871 -8.54522 -8.12159 -7.86367 -7.6282 -7.33072 -7.24402 100000 0.999994
log_lik[26] -6.26907 0.000533125 0.164099 -6.60602 -6.54939 -6.37576 -6.26344 -6.15559 -6.00966 -5.96361 94744 1.00001
log_lik[27] -6.90996 0.000818656 0.258882 -7.4684 -7.36431 -7.0731 -6.8915 -6.72761 -6.51943 -6.45387 100000 1.00001
log_lik[28] -6.64837 0.000691255 0.218594 -7.11348 -7.02718 -6.7864 -6.63571 -6.49597 -6.31147 -6.25681 100000 0.999982
log_lik[29] -6.74747 0.000709018 0.224211 -7.22664 -7.13774 -6.88949 -6.73451 -6.59022 -6.40498 -6.34879 100000 0.999986
log_lik[30] -5.92905 0.000495427 0.148163 -6.23007 -6.17892 -6.02743 -5.92463 -5.82661 -5.69268 -5.64909 89438 1.00002
log_lik[31] -5.9427 0.000481788 0.147672 -6.24341 -6.19239 -6.04019 -5.93912 -5.84076 -5.70632 -5.66325 93948 1
log_lik[32] -6.45466 0.000551094 0.174271 -6.81692 -6.7533 -6.56731 -6.4479 -6.33399 -6.1815 -6.13349 100000 1
log_lik[33] -6.39362 0.00054583 0.172607 -6.75128 -6.68942 -6.50549 -6.38655 -6.27466 -6.12209 -6.07451 100000 1.00001
log_lik[34] -6.26907 0.000533125 0.164099 -6.60602 -6.54939 -6.37576 -6.26344 -6.15559 -6.00966 -5.96361 94744 1.00001
log_lik[35] -6.09634 0.000515248 0.154159 -6.40996 -6.35791 -6.19751 -6.09192 -5.99059 -5.85023 -5.80673 89517 1.00002
log_lik[36] -6.42419 0.000541343 0.171188 -6.77728 -6.71547 -6.53626 -6.41756 -6.30555 -6.15428 -6.1082 100000 1.00001
log_lik[37] -5.87456 0.000486567 0.147509 -6.1755 -6.12359 -5.97152 -5.87056 -5.77306 -5.63864 -5.59665 91908 1.00002
log_lik[38] -6.08502 0.000474243 0.149969 -6.38969 -6.33788 -6.18427 -6.08081 -5.98184 -5.84684 -5.80406 100000 1
log_lik[39] -6.58677 0.000616932 0.195091 -6.9986 -6.92179 -6.71234 -6.57743 -6.45114 -6.2843 -6.23202 100000 0.999988
log_lik[40] -6.52813 0.000557474 0.176289 -6.89347 -6.82835 -6.64266 -6.52131 -6.40592 -6.25027 -6.20306 100000 0.999983
log_lik[41] -5.97066 0.00048391 0.148823 -6.27342 -6.2218 -6.06889 -5.9667 -5.86849 -5.73262 -5.69075 94583 1.00001
log_lik[42] -6.7658 0.000749145 0.2369 -7.27327 -7.17892 -6.91408 -6.75068 -6.60047 -6.40354 -6.34414 100000 0.999985
log_lik[43] -8.75266 0.00173329 0.548115 -9.93939 -9.71752 -9.09476 -8.70939 -8.36307 -7.93373 -7.80486 100000 0.999986
log_lik[44] -7.4732 0.000864603 0.273411 -8.05226 -7.94825 -7.64826 -7.45718 -7.28092 -7.05404 -6.98571 100000 0.99998
log_lik[45] -6.86811 0.000670866 0.212146 -7.31424 -7.2334 -7.00434 -6.85678 -6.71946 -6.53968 -6.48454 100000 0.999993
log_lik[46] -8.39545 0.00163259 0.516269 -9.51436 -9.31025 -8.71891 -8.35481 -8.02785 -7.61944 -7.50049 100000 0.999979
log_lik[47] -7.21641 0.00090867 0.287347 -7.83597 -7.72231 -7.398 -7.19558 -7.01405 -6.78238 -6.71172 100000 0.99998
log_lik[48] -6.19707 0.000517114 0.15826 -6.52008 -6.46738 -6.30066 -6.19209 -6.08782 -5.94499 -5.90124 93663 1.00001
log_lik[49] -6.61441 0.000670758 0.212112 -7.0674 -6.98435 -6.74872 -6.60168 -6.46637 -6.28944 -6.23353 100000 1.00001
mu_diff 15.3836 0.00555407 1.75635 11.9336 12.5127 14.207 15.3843 16.5573 18.2745 18.853 100000 0.999983
es 3.30844 0.00160306 0.506931 2.36452 2.50846 2.95786 3.28843 3.63776 4.17218 4.35433 100000 0.99998
cohenu 0.90849 0.000107709 0.0335828 0.831913 0.847353 0.888497 0.912552 0.932937 0.955767 0.961685 97214 0.999988
pod 0.891195 0.00010542 0.0333368 0.816538 0.831072 0.87091 0.89468 0.915269 0.939324 0.945675 100000 0.999983
pbt 0.667754 0.000166733 0.0527255 0.560294 0.578451 0.632602 0.669254 0.704582 0.751648 0.766491 100000 0.999974
prob_mu_diff_upper_0 1 0 0 1 1 1 1 1 1 1 100000 nan
prob_mu_diff_upper_c 0.78579 0.00138494 0.410275 0 0 1 1 1 1 1 87758 0.999979
prob_es_upper_c 0.72119 0.00151356 0.448416 0 0 0 1 1 1 1 87773 0.999991
prob_cohenu_upper_c 0.0856 0.000957681 0.279774 0 0 0 0 0 1 1 85344 0.999981
prob_pod_upper_c 0.01434 0.00040641 0.118889 0 0 0 0 0 0 0 85576 0.999976
prob_pbt_upper_cdash 0.89648 0.00108438 0.304638 0 0 1 1 1 1 1 78924 1.00001

f:id:ajhjhaf:20170525001803p:plain

問題なく、パラメータ値が収束して計算されました(Rhat<1.1で判定しています)

WAIC = 683.147として計算されます。 なお等分散モデルだとWAIC=716.444なので、実際に不偏分散モデルのほうが感覚としても、情報量としてもデータとモデルがフィットしていることがわかります。

仮説と検証

  • A群の平均値がB群より高い確率は?
    • prob_mu_diff_upper_0のサンプリング結果より、100%の確率で、A群の方がB群より高いことがわかります。
  • AぐんとB群の平均値の差の点推定、95%信頼区間推定
    • 15.384(1.756)[11.934, 18.853]となりました。
  • 平均値の差の片側95%信頼区間推定の上限、下限はどのあたりか
    • mu_diff > 12.513、あるいはmu_diff < 18.275の区間に95%の確率で入る
  • 平均値の差が14より大きい確率は?
    • prob_mu_diff_upper_cより、78.6%の確率で、14より大きいことがわかります。
  • A群から見たB群の効果量の点推定、95%信頼区間推定 両側/片側
    • 3.308(0.507)[2.365, 4.354]となりました。
    • 片側区間なら、es > 2.508、あるいは es < 4.172の区間に95%の確率で入りました。
  • A群から見たB群の効果量が3より大きい確率は?
    • prob_es_upper_cより、72.1%の確率で、3より大きいことがわかります。
  • A群の分布とB群の分布の重複する割合(非重複度)の点推定、95%信頼区間推定 両側/片側
    • 0.908(0.034)[0.832, 0.962]となりました。
    • 片側区間なら、cohenu > 2.508、あるいはcohenu < 0.956の区間に95%の確率で入ります。
    • これはB群から見た時に、典型的なA群の測定値は40.8%情報に存在することを示す
  • 非重複度が0.95より大きい確率
    • prob_cohenu_upper_cより、8.6% の確率で、0.95より
  • 無作為に選んだ際に、A群の値がB群より大きくなる確率(優越率)はどのぐらいか
    • 0.891(0.033)[0.817, 0.946]の確率で高くなることが推定されます。
  • 優越率が0.95より大きい確率
    • prob_pod_upper_cより 1.4%の確率で0.95より高くなることが推定されます。
  • 無作為に選んだそれぞれの測定値の差が10より大きい確率(閾上率)
    • 0.668(0.053)[0.560, 0.766]の確率で、大きいことが推定されます。
  • 閾上率が0.60(60%)より大きい確率
    • prob_pbt_upper_cdashより89.6%の確率で60%より高くなることが推定されます。

以上のように、MCMCによるサンプリングの試行結果を使うことで、様々な情報を抜き出すことが出来ました。 次回は第4章の、対応のあるt検定です。