t検定と分散分析

1.単一標本t検定

サンプルデータsamplesを作成し、仮説の母平均hypothesized_meanを設定します。ttest_1samp関数を使用して単一標本t検定を実行します。最後にt統計量とp値を出力し、p値に基づいて仮説を棄却するかどうかを判断します。

import numpy as np
from scipy.stats import ttest_1samp

# サンプルデータの作成
samples = np.array([8, 12, 6, 9, 4, 14, 7])

# 仮説の母平均の設定
hypothesized_mean = 9

# 単一標本t検定の実行
t_statistic, p_value = ttest_1samp(samples, hypothesized_mean)

# t統計量とp値の出力
print("t統計量:", t_statistic)
print("p値:", p_value)

# p値に基づいて有意性を判断
significance_level = 0.05
if p_value < significance_level:
    print("p値が%.2f未満であるため、仮説を棄却します。母平均とサンプル平均には有意な差があります。" % significance_level)
else:
    print("p値が%.2f以上であるため、仮説を採択します。母平均とサンプル平均には有意な差がありません。" % significance_level)

2.独立標本t検定

独立標本t検定は、2つの独立したサンプル間の平均値に有意な差があるかどうかを比較する統計的方法です。この検定はt分布に基づいて、2つのサンプル平均値の差が統計的に有意であるかを判断します。

import numpy as np
from scipy.stats import ttest_ind

# 2つのグループのサンプルデータ配列を作成
treatment_group = np.array([42, 45, 40, 48, 38])
control_group = np.array([35, 38, 42, 37, 40])

# 独立標本t検定の実行
t_statistic, p_value = ttest_ind(treatment_group, control_group)

# t統計量とp値の出力
print("t統計量:", t_statistic)
print("p値:", p_value)

# p値に基づいて有意性を判断
significance_level = 0.05
if p_value < significance_level:
    print("p値が%.2f未満であるため、仮説を棄却します。2つのグループ間には有意な差があります。" % significance_level)
else:
    print("p値が%.2f以上であるため、仮説を採択します。2つのグループ間には有意な差がありません。" % significance_level)

3.対応標本t検定

対応標本t検定は、同じ個体やサンプルが異なる条件下で示す平均値に有意な差があるかどうかを比較する統計的方法です。この方法は、サンプル間に相関関係や対応関係がある場合に適用されます。

対応標本t検定では、同じ個体やサンプルに対して2回の測定を行い(例えば、治療前後や実験条件の前後)、この2回の測定値の平均値に有意な変化があるかどうかを比較します。

import numpy as np
from scipy.stats import ttest_rel

# 2つの対応するサンプルデータ配列を作成
pre_test = np.array([75, 80, 72, 85, 70])
post_test = np.array([80, 85, 78, 88, 75])

# 対応標本t検定の実行
t_statistic, p_value = ttest_rel(pre_test, post_test)

# t統計量とp値の出力
print("t統計量:", t_statistic)
print("p値:", p_value)

# p値に基づいて有意性を判断
significance_level = 0.05
if p_value < significance_level:
    print("p値が%.2f未満であるため、仮説を棄却します。対応するサンプルデータ間には有意な差があります。" % significance_level)
else:
    print("p値が%.2f以上であるため、仮説を採択します。対応するサンプルデータ間には有意な差がありません。" % significance_level)

4.一元配置分散分析

一元配置分散分析の結果には、以下の指標が含まれます:

  • sum_sq:平方和、その要因が説明する分散の総量を示します。
  • df:自由度、自由に変動できる程度を示します。
  • F:F値、要因が従属変数に有意な影響を与えるかどうかを判断するために使用されます。F値が大きいほど、要因が従属変数に与える影響は大きいことを示します。
  • PR(>F):p値、要因が従属変数に与える影響の有意性を示します。p値が設定した有意水準(通常は0.05)より小さい場合、その要因が従属変数に与える影響は有意であると判断されます。

2行目は残差('Residual')の分析結果を示しており、以下の指標が含まれます:

  • sum_sq:残差平方和、モデルで説明されなかった分散の総量を示します。
  • df:残差自由度、残りの変動の程度を示します。
  • NaN:残差行では、F値とp値は通常NaNです。これらの統計指標は要因にのみ適用されるためです。
import statsmodels.api as sm
import statsmodels.formula.api as smf
import pandas as pd

# 要因と応答変数を含むデータセットを作成
dataset = pd.DataFrame({'treatment': ['A','A','A','A','A','B','B','B','B','B','C','C','C','C','C'],
                        'measurement': [23.5, 26.2, 21.8, 24.5, 25.1, 27.9, 26.7, 25.4, 26.6, 28.0, 22.9, 24.3, 26.6, 21.8, 23.1]})

# 一元配置分散分析を実行
analysis_model = smf.ols('measurement ~ treatment', data=dataset).fit()
anova_table = sm.stats.anova_lm(analysis_model, typ=2)

# 分散分析表を出力
print(anova_table)

5.二元配置分散分析

import pandas as pd
import statsmodels.api as sm
from statsmodels.formula.api import ols

# データの作成
experimental_data = {
    'result': [15.2, 16.8, 17.5, 18.3, 19.1, 20.4, 21.2, 22.7, 23.5, 24.8],
    'treatment': ['低用量', '低用量', '中用量', '中用量', '高用量', '低用量', '低用量', '中用量', '中用量', '高用量'],
    'dosage': ['朝', '朝', '朝', '朝', '朝', '夜', '夜', '夜', '夜', '夜']
}

df = pd.DataFrame(experimental_data)

# モデルの作成と分析
model = ols('result ~ treatment + dosage + treatment:dosage', data=df).fit()
anova_table = sm.stats.anova_lm(model, typ=2)
print(anova_table)

タグ: t検定 分散分析 統計解析 scipy statsmodels

5月18日 12:32 投稿