Up

被験者内1要因分散分析

 

被験者内1要因分散分析(岡本安晴「データ分析のための統計学入門」2009、おうふうpp107115)のプログラムを以下のように作成した。

 

===============  anovaOneFacRepPrg.py  =======================

from calc_p_for_F import calc_p

 

Y = [[1, 3, 2],

     [5, 9, 7],

     [6, 12, 9]]

 

N = len(Y)

a = len(Y[0])

print("a = %d     N = %d"%(a, N))

 

Yid = []

for i in range(0, N):

    sum = 0.0

    for j in range(0, a):

        sum += Y[i][j]

    Yid.append(sum / a)

 

Ydj = []

for j in range(0, a):

    sum = 0.0

    for i in range(0, N):

        sum += Y[i][j]

    Ydj.append(sum / N)

sum = 0.0

for j in range(0, a):

    sum += Ydj[j]

Ydd = sum / a

 

SS_A = 0.0

SS_S = 0.0

SS_SA = 0.0

for i in range(0, N):

    for j in range(0, a):

        SS_A += (Ydj[j] - Ydd) ** 2.0

        SS_S += (Yid[i] - Ydd) ** 2.0

        SS_SA += (Y[i][j] - Yid[i] - Ydj[j] + Ydd) ** 2.0

SS_T = SS_A + SS_S + SS_SA

df_A = a - 1

df_S = N - 1

df_SA = (a - 1) * (N - 1)

MS_A = SS_A / df_A

MS_S = SS_S / df_S

MS_SA = SS_SA / df_SA

F = MS_A / MS_SA

p = calc_p(F, df_A, df_SA)

 

print()

print("%10s"%"Source", "%12s"%"SS", "%5s"%"df", "%12s"%"MS", "%12s"%"F")

print("%10s"%"S", "%12.3f"%SS_S, "%5d"%df_S, "%12.3f"%MS_S)

print("%10s"%"A", "%12.3f"%SS_A, "%5d"%df_A, "%12.3f"%MS_A, "%12.3f"%F,

      "   p = %-10.5f"%(1.0 - p))

print("%10s"%"SA", "%12.3f"%SS_SA, "%5d"%df_SA, "%12.3f"%MS_SA)

====================================================

 

データはリストYに設定されている。被験者iの水準(条件)jのデータは、リストYi番目のリストのj番目の要素として設定されている。

Y[0]

は被験者0のデータであり、

Y[0][0]

は、被験者0の水準(条件)0でのデータである。

Y[1]

は被験者1のデータであり、

Y[1][2]

は、被験者1の水準(条件)2でのデータである。すなわち、設定されているデータは表1のものである。

 

表1 被験者内1要因分散分析データ例

 

条件

被験者

水準0

水準1

水準2

被験者0

被験者1

被験者2

12

 

上のデータの設定の下でプログラムを実行すると、図1の分散分析表が出力される。

図1

 

上のプログラムの計算部分をクラス型CANOVA_Repとして以下のようにまとめた。

 

================  CanovaOneFacRep.py  =======================

from calc_p_for_F import calc_p

 

class CANOVA_Rep:

    def __init__(self, Y):

        self.Y = Y

 

    def calc(self):

        N = len(self.Y)

        a = len(self.Y[0])

        print("a = %d     N = %d"%(a, N))

 

        Yid = []

        for i in range(0, N):

            sum = 0.0

            for j in range(0, a):

                sum += self.Y[i][j]

            Yid.append(sum / a)

 

        Ydj = []

        for j in range(0, a):

            sum = 0.0

            for i in range(0, N):

                sum += self.Y[i][j]

            Ydj.append(sum / N)

        sum = 0.0

        for j in range(0, a):

            sum += Ydj[j]

        Ydd = sum / a

 

        SS_A = 0.0

        SS_S = 0.0

        SS_SA = 0.0

        for i in range(0, N):

            for j in range(0, a):

                SS_A += (Ydj[j] - Ydd) ** 2.0

                SS_S += (Yid[i] - Ydd) ** 2.0

                SS_SA += (self.Y[i][j] - Yid[i] - Ydj[j] + Ydd) ** 2.0

        SS_T = SS_A + SS_S + SS_SA

        df_A = a - 1

        df_S = N - 1

        df_SA = (a - 1) * (N - 1)

        MS_A = SS_A / df_A

        MS_S = SS_S / df_S

        MS_SA = SS_SA / df_SA

        F = MS_A / MS_SA

        p = calc_p(F, df_A, df_SA)

 

        return  SS_S, SS_A, SS_SA, df_S, df_A, df_SA, MS_S, MS_A, MS_SA, F, p

================================================

 

クラス型CANOVA_Repを用いて上のプログラムを以下のように書き変えた。

 

================  anovaOneFacRepPrgCls.py  =================

#from calc_p_for_F import calc_p

from CanovaOneFacRep import CANOVA_Rep

 

Y = [[1, 3, 2],

     [5, 9, 7],

     [6, 12, 9]]

 

anova = CANOVA_Rep(Y)

SS_S, SS_A, SS_SA, df_S, df_A, df_SA, MS_S, MS_A, MS_SA, F, p = anova.calc()

 

print()

print("%10s"%"Source", "%12s"%"SS", "%5s"%"df", "%12s"%"MS", "%12s"%"F")

print("%10s"%"S", "%12.3f"%SS_S, "%5d"%df_S, "%12.3f"%MS_S)

print("%10s"%"A", "%12.3f"%SS_A, "%5d"%df_A, "%12.3f"%MS_A, "%12.3f"%F,

      "   p = %-10.5f"%(1.0 - p))

print("%10s"%"SA", "%12.3f"%SS_SA, "%5d"%df_SA, "%12.3f"%MS_SA)

================================================

 

クラス型CANOVA_Repのオブジェクトanovaを、データの設定されているリストYを実引数として作成して、メソッドanova.calc()を呼び出している。実行結果は、上のプログラムと同じく図1のようになる。

 

プログラムは圧縮ファイルanovaOneFacRepPrg.zipとしてまとめた。ファイル名anovaOneFacRepPrg.zipをクリックしてダウンロードすることができる。

 

 

 

Up