Up

相関係数の検定

 

相関係数の検定(岡本安晴「データ分析のための統計学入門」2009、おうふうpp8284)を行うプログラムt_test_corPrg.pyを以下のように作成した。

 

==================  t_test_corPrg.py  ======================

from Ccalc_t_df_p import Ccalc

 

pairs = [[70, 168], [68, 165], [62, 159], [56, 156], [70, 170],

         [64, 162], [59, 162], [70, 169], [68, 168], [69, 170],

         [67, 168], [63, 166], [58, 163], [74, 170], [65, 168],

         [60, 160], [65, 165], [72, 175], [61, 164], [77, 174],

         [68, 164], [64, 161], [70, 166], [47, 147], [66, 165],

         [68, 170], [73, 174], [74, 172], [63, 164], [83, 182],

         [58, 159], [64, 166], [67, 167], [75, 174], [67, 163],

         [68, 166], [68, 167], [66, 165], [63, 165], [55, 154],

         [61, 163], [60, 160], [62, 164], [62, 160], [59, 160],

         [51, 155], [59, 163], [68, 170], [56, 157], [79, 180]]

 

calc_p = Ccalc(pairs)

t, df, p = calc_p.calc()

 

print("\nt = %f     df = %d"%(t, df))

print("Prob(x < %f) = %f       Prob(x > %f) = %f     df = %d"%(t, p, t, 1.0 - p, df))

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

 

データ対をリストとして表し、これらのリストを要素とするリストpairsとして入力データを表している。データを表すリストpairsを実引数としてクラス型Ccalcのオブジェクトcalc_pを作成して、メソッドcalc_p.calc()によりt値などを算出している。クラス型Ccalcは以下のように宣言されている。

 

===============  Ccalc_t_df_p.py  ====================

import math

from calc_p_from_t import p_value

 

def sqr(x):

    return x * x

 

class Ccalc:

    def __init__(self, pairs):

        self.pairs = pairs

 

    def calc(self):

 

        n = len(self.pairs)

        print("n = %d"%n)

 

        sum_x = 0.0

        sum_y = 0.0

        for i in range(0, n):

            sum_x += self.pairs[i][0]

            sum_y += self.pairs[i][1]

        mean_x = sum_x / n

        mean_y = sum_y / n

        print("Mean_x = %f"%mean_x)

        print("Mean_y = %f"%mean_y)

        ssum_x = 0.0

        ssum_y = 0.0

        sum_xy = 0.0

        for i in range(0, n):

            ssum_x += sqr(self.pairs[i][0] - mean_x)

            ssum_y += sqr(self.pairs[i][1] - mean_y)

            sum_xy += (self.pairs[i][0] - mean_x) * (self.pairs[i][1] - mean_y)

 

        var_x = ssum_x / n

        var_y = ssum_y / n

        print("Var_x = %f"%var_x)

        print("Var_y = %f"%var_y)

        sd_x = math.sqrt(var_x)

        sd_y = math.sqrt(var_y)

        print("sd_x = %f"%sd_x)

        print("sd_y = %f"%sd_y)

        cor = sum_xy / math.sqrt(ssum_x * ssum_y)

        print("r = %f"%cor)

 

        t = cor * math.sqrt(n - 2.0) / math.sqrt(1.0 - (cor ** 2.0))

        df = n - 2

        p = p_value(t, df)

      

        return t, df, p

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

 

上のプログラムを実行すると図1のような結果を得る。

図1

 

両側検定でのp値は

である。

 

上の例とは異なるデータを次のように設定してみる。

 

=============  t_test_corPrg_a.py  ===============

from Ccalc_t_df_p import Ccalc

 

pairs = [[5, 12],

         [7, 15],

         [8, 21] ]

 

calc_p = Ccalc(pairs)

t, df, p = calc_p.calc()

 

print("\nt = %f     df = %d"%(t, df))

print("Prob(x < %f) = %f       Prob(x > %f) = %f     df = %d"%(t, p, t, 1.0 - p, df))

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

 

上のプログラムを実行すると図2の結果を得る。

図2

 

図2の場合、両側検定でのp値は

である。

 

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

 

 

Up