【Python・统计学】t检验(t検定)

目录

1. 安装包/读取数据

2. 正态性检验(t检验的前提之一)

3.方差齐性检验(t检验的前提之二)

4.t检验

(1)非独立样本t检验(対応あり)

(2)独立样本t检验(対応なし)

(3)韦尔奇t检验(ウェルチ検定)-无法满足方差齐性的时候用

5.效果量(Cohen's d/Pearson's r):后附效果量的指标

(1)非独立样本t检验效果量计算

(2)独立样本t检验效果量计算

(3)韦尔奇t检验效果量计算

*效果量大小的指标

1. 安装包/读取数据

pip install japanize-matplotlib #日语显示专用包,不需要日语的不用安装
import pandas as pd
import matplotlib.pyplot as plt
import japanize_matplotlib
from scipy import stats
# Excelファイルを読み込む
data = pd.read_excel('/content/ttest_data.xlsx')
print(data)
# 'test1'と 'test2'の列からデータを取得します
test1 = data['Test1']
test2 = data['Test2']

 

2. 正态性检验(t检验的前提之一)

正态性检验有很多种方法,其中最直观的是图示法。

本文分别用(1)图示法,(2)Shapiro-Wilk正規性検定 两种方法来检验数据正态性

#(1)图示法
plt.figure(figsize=(12, 6))
plt.subplot(1, 2, 1)
plt.hist(test1, bins=30, color='green', alpha=0.6, edgecolor='black')
plt.title("test1のヒストグラム")
plt.xlabel("値")
plt.ylabel("頻度")
plt.subplot(1, 2, 2)
plt.hist(test2, bins=30, color='blue', alpha=0.6, edgecolor='black')
plt.title("test2のヒストグラム")
plt.xlabel("値")
plt.ylabel("頻度")
plt.tight_layout()

plt.show()

# (2) Shapiro-Wilk正規性検定
statistic1, p_value1 = stats.shapiro(test1)
statistic2, p_value2 = stats.shapiro(test2)

# 結果の出力
print("test1のShapiro-Wilk検定統計量:", statistic1)
print("test1のShapiro-Wilk検定p値:", p_value1)

print("test2のShapiro-Wilk検定統計量:", statistic2)
print("test2のShapiro-Wilk検定p値:", p_value2)

# p値を基に正規分布の帰無仮説を評価
alpha = 0.05  # 有意水準 (通常は0.05)
if p_value1 > alpha:
    print("test1は正規分布に従っています")
else:
    print("test1は正規分布に従っていません")

if p_value2 > alpha:
    print("test2は正規分布に従っています")
else:
    print("test2は正規分布に従っていません")

 

3.方差齐性检验(t检验的前提之二)

# 等分散性を検定
statistic, p_value = stats.levene(test1, test2)

# 結果の出力
print("Leveneの等分散性検定統計量:", statistic)
print("Leveneの等分散性検定p値:", p_value)

# p値を基に等分散性の帰無仮説を評価
alpha = 0.05  # 有意水準 (通常は0.05)
if p_value > alpha:
    print("等分散性の帰無仮説は棄却されません (等分散)")
else:
    print("等分散性の帰無仮説は棄却されます (非等分散)")

4.t检验

(1)非独立样本t检验(対応あり)

# 対応ありのt検定
t_statistic, p_value = stats.ttest_rel(test1, test2)

# 結果の出力
print("対応ありのt検定統計量:", t_statistic)
print("対応ありのt検定p値:", p_value)
alpha = 0.05  # 信頼水準 (通常は0.05)
df = len(test1) + len(test2) - 2  # 自由度
std_error = np.sqrt(np.var(test1)/len(test1) + np.var(test2)/len(test2))
margin_of_error = stats.t.ppf(1 - alpha/2, df) * std_error
conf_int = (t_statistic - margin_of_error, t_statistic + margin_of_error)
print("対応ありのt検定信頼区間:",conf_int)

(2)独立样本t检验(対応なし)

# 対応なしのt検定
t_statistic, p_value = stats.ttest_ind(test1, test2)

# 結果の出力
print("対応なしのt検定統計量:", t_statistic)
print("対応なしのt検定p値:", p_value)

alpha = 0.05  # 信頼水準 (通常は0.05)
df = len(test1) + len(test2) - 2  # 自由度
std_error = np.sqrt(np.var(test1)/len(test1) + np.var(test2)/len(test2))
margin_of_error = stats.t.ppf(1 - alpha/2, df) * std_error
conf_int = (t_statistic - margin_of_error, t_statistic + margin_of_error)
print("対応なしのt検定信頼区間:",conf_int)

(3)韦尔奇t检验(ウェルチ検定)-无法满足方差齐性的时候用

# ウェルチのt検定
t_statistic, p_value = stats.ttest_ind(test1, test2, equal_var=False)

# 結果の出力
print("ウェルチのt検定統計量:", t_statistic)
print("ウェルチのt検定p値:", p_value)
alpha = 0.05  # 信頼水準 (通常は0.05)
df = len(test1) + len(test2) - 2  # 自由度
std_error = np.sqrt(np.var(test1)/len(test1) + np.var(test2)/len(test2))
margin_of_error = stats.t.ppf(1 - alpha/2, df) * std_error
conf_int = (t_statistic - margin_of_error, t_statistic + margin_of_error)
print("ウェルチ検定の信頼区間:",conf_int)

5.效果量(Cohen's d/Pearson's r):后附效果量的指标

(1)非独立样本t检验效果量计算

# 対応ありのt検定効果量
import numpy as np
t_statistic, p_value = stats.ttest_rel(test1, test2)

# Cohen's dの計算
mean_diff = np.mean(test1) - np.mean(test2)
pooled_std = np.sqrt(((len(test1) - 1) * np.var(test1, ddof=1) + (len(test2) - 1) * np.var(test2, ddof=1)) / (len(test1) + len(test2) - 2))
cohen_d = mean_diff / pooled_std

# 結果の出力
print("対応ありt検定の効果量Cohen's d:", cohen_d)

# Pearson's rの計算
correlation_coefficient, _ = stats.pearsonr(test1, test2)
# 結果の出力
print("対応ありt検定の効果量Pearson's r:", correlation_coefficient)

(2)独立样本t检验效果量计算

#対応なしのt検定効果量
mean1 = np.mean(test1)
mean2 = np.mean(test2)
std1 = np.std(test1, ddof=1)  # 不偏標準偏差
std2 = np.std(test2, ddof=1)

pooled_std = np.sqrt((len(test1) - 1) * std1**2 + (len(test2) - 1) * std2**2) / (len(test1) + len(test2) - 2)
d = (mean1 - mean2) / pooled_std
r, _ = stats.pearsonr(test1, test2)
print("対応なしt検定の効果量Cohen's d:", cohen_d)
print("対応なしt検定の効果量Pearson's r:", correlation_coefficient)

(3)韦尔奇t检验效果量计算

#ウェルチ検定の効果量
t_stat, p_value = stats.ttest_ind(test1, test2, equal_var=False)

# 効果量d (Cohen's d)の計算
mean_diff = np.mean(test1) - np.mean(test2)
pooled_sd = np.sqrt(((len(test1) - 1) * np.var(test1) + (len(test2) - 1) * np.var(test2)) / (len(test1) + len(test2) - 2))
effect_size_d = mean_diff / pooled_sd

# 効果量rの計算
effect_size_r = abs(mean_diff) / np.sqrt((np.std(test1)**2 + np.std(test2)**2) / 2)

# 効果量dおよび効果量rの表示
print("ウェルチ検定効果量d (Cohen's d):", effect_size_d)
print("ウェルチ検定効果量r (effect size r):", effect_size_r)

*效果量大小的指标

  • 水本篤,竹内理 (2008) 研究論文における効果量の報告のために. 基礎的概念と注意点. 英語教育研究, 31:57-66
  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值