python statsmodel の
ドキュメントを
実施した
pwr と、 statsmodel の モジュールの 対応表
モジュールの
tt_ind_solve_power
、zt_ind_solve_power
は、TTestIndPower
と、GofChisquarePower
の
基本的にTTestPower
、tt_solve_power
が
半分近くは、
ただ、
説明 | pwrのモジュール名 | statsmodelのモジュール名 |
---|---|---|
平均値に関するt検定(1群,2群,対応あり) | pwr.t.test | statsmodels.stats.power.TTestIndPower,statsmodels.stats.power.tt_ind_solve_power |
サンプルサイズの異なる2群の平均値に関するt検定 | pwr.t2n.test | statsmodels.stats.power.TTestIndPower |
正規分布の平均値の検定 | pwr.norm.test | - |
比率の検定(1標本) | pwr.p.test | statsmodels.stats.power.NormalIndPower |
2つの比率の差の検定(サンプル数が等しい場合) | pwr.2p.test | statsmodels.stats.power.NormalIndPower |
2つの比率の差の検定(サンプル数が異なる場合) | pwr.2p2n.test | statsmodels.stats.power.NormalIndPower |
カイ二乗検定 | pwr.chisq.test | statsmodels.stats.power.GofChisquarePower,statsmodels.stats.power.zt_ind_solve_power |
相関係数の検定 | pwr.r.test | statsmodels.stats.power.NormalIndPower |
一元配置分散分析 | pwr.anova.test | statsmodels.stats.power.FTestAnovaPower |
一般線形モデル(分散分析・回帰分析) | pwr.f2.test | statsmodels.stats.power.FTestPower |
参考
- Statistics stats — statsmodels 0.9.0 documentation
- joepy: Statistical Power in Statsmodels
- t test - statsmodels vs R for sample size estimation, why the difference? - Cross Validated
- joepy: Statistical Power in Statsmodels
各モジュールの 実行結果
Sample Size と、
平均値に 関する t検定(1群,2群,対応あり) statsmodels.stats.power.tt_ind_solve_power
- Sample Size を
計算
from statsmodels.stats.power import tt_ind_solve_power # 平均値の差 delta = 0.5 # 標準偏差 sd = 1 # 有意水準 sig = 0.05 # 検定力 power = 0.8 # 効果量 (平均値の差 / 標準偏差 ) effect_size = delta / sd # 両側検定 alternative='two-sided' n = tt_ind_solve_power(effect_size=effect_size, alpha=sig, power=power, alternative=alternative) print(n)
63.765611775409525
- 検定力 を
計算
TTestIndPower().power()
を使用して、 検定力を 計算します。
# 平均値の差 delta = 0.5 # 標準偏差 sd = 1 # 有意水準 sig = 0.05 # サンプルサイズ n = 10 # 効果量 あまりよくわかっていない。 平均値の差 / 標準偏差 effect_size = delta / sd # 両側検定 alternative='two-sided' import statsmodels.stats.power as smp n = smp.TTestIndPower().power(effect_size, n, sig, alternative=alternative) print(n)
0.185095655379
サンプルサイズの 異なる 2群の 平均値に 関する t検定 statsmodels.stats.power.TTestIndPower
tt_ind_solve_power、
サンプルサイズが
- Sample Size を
計算
from statsmodels.stats.power import tt_ind_solve_power # 有意水準 sig = 0.05 # 検定力 power = 0.8 # 効果量 effect_size = 0.6 # レシオ サンプルサイズは、2:3 ratio = 60./90 # 片側検定 alternative ='larger' n = tt_ind_solve_power(effect_size=effect_size, alpha=sig, power=power, alternative=alternative, ratio=ratio) print("alternative=larger: ", n) # 両側検定 alternative='two-sided' n = tt_ind_solve_power(effect_size=effect_size, alpha=sig, power=power, alternative=alternative, ratio=ratio) print("alternative=two-sided: ", n)
alternative=larger: 43.76924760999283 alternative=two-sided: 55.68220224349466
- 検定力 を
計算
TTestIndPower().power
を使用して 検定力を 計算します。
# サンプルサイズ1 n1 = 90 # サンプルサイズ2 n2 = 60 # レシオ ratio = n2/n1 # 効果量 effect_size = 0.6 # 両側検定か、片側検定か、'two-sided' (default), 'larger', 'smaller' が指定可能 alternative ='larger' # 有意水準 sig = 0.05 import statsmodels.stats.power as smp p= smp.TTestIndPower().power(effect_size=effect_size, nobs1=n1, ratio=ratio, alpha=sig, alternative=alternative) # alternative 'larger' 指定だと、片側検定になる print("alternative=larger:", p) p= smp.TTestIndPower().power(effect_size=effect_size, nobs1=n1, ratio=ratio, alpha=sig) # 指定なしは、two-sided 両側検定 print("alternative=two-sided:", p)
alternative=larger: 0.973726135488 alternative=two-sided: 0.947015360249
比率の 検定(1標本) statsmodels.stats.power.NormalIndPower
- Sample Size を
計算
from statsmodels.stats.proportion import proportion_effectsize as proportion_effectsize proportion_effectsize(0.5, 0.4) import statsmodels.stats.power as smp p=0.8 smp.NormalIndPower().solve_power(effect_size=0.2013579207903309, power=p, alpha=0.05, ratio=0)
193.58387311494354
- 検定力 を
計算
proportion_effectsize
で、比率を 計算し、 計算結果を、 NormalIndPower().power
のeffect_sizeと して 設定します。
from statsmodels.stats.proportion import proportion_effectsize as proportion_effectsize proportion_effectsize(0.5, 0.4) import statsmodels.stats.power as smp smp.NormalIndPower().power(effect_size=0.2013579207903309, nobs1=60, alpha=0.05, ratio=0)
0.34470140912721525
2つの 比率の 差の 検定(サンプル数が 等しい 場合) statsmodels.stats.power.NormalIndPower
- Sample Size を
計算
import statsmodels.stats.power as smp # 効果量 effect_size=0.3 # 検出力 power = 0.8 # 有意水準 sig = 0.05 p=smp.NormalIndPower().solve_power(effect_size=effect_size, power=power, alpha=sig, alternative='two-sided') print(p)
174.41912242947043
- 検定力を
計算
import statsmodels.stats.power as smp # 効果量 effect_size=0.3 # サンプルサイズ n = 80 # 有意水準 sig = 0.05 p=smp.NormalIndPower().power(effect_size=effect_size, nobs1=n, alpha=sig, alternative='two-sided') print(p)
0.475100870573
2つの 比率の 差の 検定(サンプル数が 異なる 場合) statsmodels.stats.power.NormalIndPower
サンプリング時の母不良率(○○率)を<wbr>求めたい<wbr>場合
と
- Sample Size を
計算
import statsmodels.stats.power as smp # 有意水準 sig = 0.05 # 検定力 power = 0.9 # サンプルサイズ n = 2.5e8 # 効果量 effect_size = 0.2 # 両側検定 alternative='two-sided' result = smp.NormalIndPower().solve_power(effect_size, nobs1=n, alpha=sig, power=power, ratio=None, alternative=alternative) print(result * n)
1706.6078223432073
上記、
サンプルサイズをn = 2.5e4
あたりにpwr.2p2n.test
の
- 検定力を
計算
import statsmodels.stats.power as smp # 有意水準 sig = 0.05 # サンプルサイズ n = 2.5e8 # 効果量 effect_size = 0.2 # 両側検定 alternative='two-sided' result = smp.NormalIndPower().power(effect_size, n, sig, ratio=262.6855/n, alternative=alternative) print(result)
0.899999717107
検定力に
カイ二乗検定 statsmodels.stats.power.GofChisquarePower
カイ二乗検定の、statsmodels.stats.power.GofChisquarePower
を
- Sample Size を
計算
import statsmodels.stats.power as smp # サンプル数の計算、n_binsは自由度、 + 1する smp.GofChisquarePower().solve_power(0.1, n_bins=(5-1)*(6-1) + 1, alpha=0.05, power=0.8)
2096.0784652617726
- 検定力を
計算
import statsmodels.stats.power as smp # 検定力の計算、n_bins は自由度に + 1 する smp.GofChisquarePower().power(0.346, nobs=140, n_bins=(2-1)*(3-1) + 1, alpha=0.01)
0.88540533954389722
相関係数の 検定 statsmodels.stats.power.NormalIndPower
相関係数の
numpy.arctanh(x) を
参考記事に
- Sample Size を
計算
import statsmodels.stats.power as smp import numpy as np # サンプル数の調整のため、何故か3を足す。理由はわからず。 smp.NormalIndPower().solve_power(np.arctanh(0.3), alpha=0.05, ratio=0, power= 0.8, alternative='two-sided') + 3
84.92761044616469
- 検定力を
計算
import statsmodels.stats.power as smp import numpy as np # サンプル数の調整のため、3を引く。理由はわからず。 smp.NormalIndPower().power(np.arctanh(0.3), nobs1=50-3, alpha=0.05, ratio=0, alternative='two-sided')
0.56436763896354003
一元配置分散分析 statsmodels.stats.power.FTestAnovaPower
FTestAnovaPower を
- Sample Size を
計算
import statsmodels.stats.power as smp # 効果量 effect_size=0.28 # 効果量 alpha=0.05 # グループの数 k_groups=4 # 検出力 power=0.8 smp.FTestAnovaPower().solve_power(effect_size=effect_size, alpha=alpha, power=power, k_groups=k_groups)
143.03088865487553
- 検定力を
計算
import statsmodels.stats.power as smp # 効果量 effect_size=0.28 # サンプル数 nobs=80 # 有意水準 alpha=0.05 # グループの数 k_groups=4 smp.FTestAnovaPower().power(effect_size, nobs, alpha, k_groups=k_groups)
0.51498349798649112
一般線形モデル(分散分析・回帰分析) statsmodels.stats.power.FTestPower
FTestPower を
- Sample Size の
計算
import statsmodels.stats.power as smp # 効果量 effect_size=np.sqrt(0.1/(1-0.1)) # 有意水準 alpha=0.05 # 検出力 power = 0.8 # 分母の自由度 df_denom = 5 smp.FTestPower().solve_power(effect_size=effect_size, alpha=alpha, power=power, df_denom=df_denom)
115.10364322775642
- 検定力を
計算
import statsmodels.stats.power as smp # 効果量 effect_size=np.sqrt(0.1/(1-0.1)) # 分母の自由度 df_denom = 5 # 分子の自由度 df_num = 89 # 有意水準 alpha=0.05 smp.FTestPower().power(effect_size=effect_size, df_num=df_num, df_denom=df_denom, alpha=alpha)
0.67358904832076494
感想
statsmodel で、
以下、
- pwrと
同レベルの ことは 実施できないが、 NormalIndPower を 駆使すると それなりにできる。 - NormalIndPower を
駆使する 場合、 計算誤差が 発生する 場合が あるので、 注意。 - joepy: Statistical Power in Statsmodels が
非常に 参考に なった。 - 実業務で
使用する 際は、 TTestIndPower、 GofChisquarePower、 FTestAnovaPower、 FTestPower を 使うと 思う。
以上です。
コメント