26

Rには、目標の統計的検出力を取得するために両側t検定のパラメーターを決定するのに役立つ非常に便利な関数があります。

この関数はと呼ばれpower.prop.testます。

http://stat.ethz.ch/R-manual/R-patched/library/stats/html/power.prop.test.html

次を使用して呼び出すことができます。

power.prop.test(p1 = .50, p2 = .75, power = .90)

そして、この検出力を得るために必要なサンプルサイズがわかります。これは、テストのサンプルサイズを抑止するのに非常に役立ちます。

scipyパッケージに同様の機能はありますか?

4

4 に答える 4

27

norm.isf以下のnの式と、 scipy.statsの逆生存関数を使用して関数を複製することができました。

ここに画像の説明を入力してください

from scipy.stats import norm, zscore

def sample_power_probtest(p1, p2, power=0.8, sig=0.05):
    z = norm.isf([sig/2]) #two-sided t test
    zp = -1 * norm.isf([power]) 
    d = (p1-p2)
    s =2*((p1+p2) /2)*(1-((p1+p2) /2))
    n = s * ((zp + z)**2) / (d**2)
    return int(round(n[0]))

def sample_power_difftest(d, s, power=0.8, sig=0.05):
    z = norm.isf([sig/2])
    zp = -1 * norm.isf([power])
    n = s * ((zp + z)**2) / (d**2)
    return int(round(n[0]))

if __name__ == '__main__':

    n = sample_power_probtest(0.1, 0.11, power=0.8, sig=0.05)
    print n  #14752

    n = sample_power_difftest(0.1, 0.5, power=0.8, sig=0.05)
    print n  #392
于 2013-03-05T08:47:15.690 に答える
16

基本的な電力計算の一部がstatsmodelsで利用できるようになりました

http://statsmodels.sourceforge.net/devel/stats.html#power-and-sample-size-calculations http://jpktd.blogspot.ca/2013/03/statistical-power-in-statsmodels.html

ブログ記事では、statsmodelsコードへの最新の変更はまだ考慮されていません。また、多くの電力計算は基本的な分布に還元されるため、提供するラッパー関数の数はまだ決定していません。

>>> import statsmodels.stats.api as sms
>>> es = sms.proportion_effectsize(0.5, 0.75)
>>> sms.NormalIndPower().solve_power(es, power=0.9, alpha=0.05, ratio=1)
76.652940372066908

R統計で

> power.prop.test(p1 = .50, p2 = .75, power = .90)

     Two-sample comparison of proportions power calculation 

              n = 76.7069301141077
             p1 = 0.5
             p2 = 0.75
      sig.level = 0.05
          power = 0.9
    alternative = two.sided

 NOTE: n is number in *each* group 

Rのpwrパッケージを使用

> library(pwr)
> h<-ES.h(0.5,0.75)
> pwr.2p.test(h=h, power=0.9, sig.level=0.05)

     Difference of proportion power calculation for binomial distribution (arcsine transformation) 

              h = 0.5235987755982985
              n = 76.6529406106181
      sig.level = 0.05
          power = 0.9
    alternative = two.sided

 NOTE: same sample sizes 
于 2013-08-22T11:47:50.353 に答える
9

必要なn(グループごと)を取得するためのマットの答えはほぼ正しいですが、小さなエラーがあります。

d(平均の差)、s(標準偏差)、sig(有意水準、通常は.05)、および検出力(通常は.80)が与えられると、グループごとの観測数を計算する式は次のようになります。

n= (2s^2 * ((z_(sig/2) + z_power)^2) / (d^2)

あなたが彼の公式で見ることができるように、彼は持っています

n = s * ((zp + z)**2) / (d**2)

「s」の部分が間違っています。rの機能を再現する正しい関数は次のとおりです。

def sample_power_difftest(d, s, power=0.8, sig=0.05):
    z = norm.isf([sig/2]) 
    zp = -1 * norm.isf([power])
    n = (2*(s**2)) * ((zp + z)**2) / (d**2)
    return int(round(n[0]))

お役に立てれば。

于 2013-08-20T20:25:15.750 に答える
6

あなたも持っています:

from statsmodels.stats.power import tt_ind_solve_power

取得したい値に「なし」を入れてください。instandeの場合、effect_size = 0.1、power = 0.8などの場合の観測数を取得するには、次のように入力する必要があります。

tt_ind_solve_power(effect_size=0.1, nobs1 = None, alpha=0.05, power=0.8, ratio=1, alternative='two-sided')

必要な観測数として1570.7330663315456を取得します。または、他の値を固定して達成できるパワーを取得するには、次のようにします。

tt_ind_solve_power(effect_size= 0.2, nobs1 = 200, alpha=0.05, power=None, ratio=1, alternative='two-sided')

そしてあなたは得る:0.5140816347005553

于 2018-10-26T14:00:32.763 に答える