mcpField
S
statistical-analysis

statistical-analysis

github.com/eturkesデータ・データベース049 回インストール18 週間前に更新
リポジトリ

statistical-analysis について

statistical-analysisは、研究向けにPythonで統計分析を計画・実施するスキルです。前提条件の確認、頻度論・ベイズ分析、効果量、検出力分析、APA形式の報告を扱います。

主な機能

  1. 01統計検定の選択を案内
  2. 02前提条件と診断を確認
  3. 03頻度論とベイズ分析に対応
  4. 04効果量と信頼区間を算出
  5. 05検出力とサンプルサイズを分析
  6. 06APA形式のレポートを作成

活用シーン

  1. 01実験データに適した検定を選ぶ
  2. 02結果の解釈前に前提条件を確認
  3. 03研究計画時にサンプルサイズを推定
  4. 04学術レポート向けに統計結果を整理

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/eturkes/claude-scientific-skills --skill statistical-analysis

インストール後、Claude Code で/statistical-analysisを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
assumptions_and_diagnostics.md
bayesian_statistics.md
effect_sizes_and_power.md
reporting_standards.md
test_selection_guide.md
scripts/
assumption_checks.py

詳細

統計分析

概要

統計分析は、仮説を検証し、関係性を定量化するための体系的なプロセスです。仮定の確認と APA 形式での報告を行いながら、仮説検定(t 検定、ANOVA、カイ二乗検定)、回帰分析、相関分析、ベイズ分析を実施します。このスキルは学術研究に適用してください。

このスキルを使用する場面

次の場合に、このスキルを使用してください。

  • 統計的な仮説検定(t 検定、ANOVA、カイ二乗検定)を実施する
  • 回帰分析または相関分析を行う
  • ベイズ統計分析を実施する
  • 統計的な仮定と診断項目を確認する
  • 効果量を算出し、検出力分析を実施する
  • 統計結果を APA 形式で報告する
  • 研究のために実験データまたは観察データを分析する

インストール

このスキルで使用するライブラリのインストールには uv を使用してください。本番環境ではバージョンを固定してください。探索的な使用では、バージョンを固定しなくても問題ありません。

# Core frequentist stack (Python 3.10+; 3.12+ recommended for latest SciPy/ArviZ)
uv pip install "pingouin>=0.6" "scipy>=1.11" "statsmodels>=0.14.6" pandas matplotlib seaborn

# Bayesian modeling (PyMC 5 + ArviZ; ArviZ 0.23+ requires Python 3.12+)
uv pip install "pymc>=5.0" "arviz>=0.17"

互換性に関する注意(2025~2026):

  • Pingouin 0.5+ では出力列の名前が変更されました(p_val、cohen_d、CI95、p_unc)。以下の例では現在の名前を使用しています。
  • statsmodels + SciPy:SciPy 1.16 以降での _lazywhere インポートエラーを避けるには、statsmodels>=0.14.6 と scipy>=1.11 を使用してください。
  • Pingouin のベイズファクター:t 検定の片側 BF は 0.5 以降で削除されました。仮説検定には専用のパッケージ(例:JASP、R 経由の BayesFactor)または PyMC を使用してください。

モデル固有の API(OLS、GLM、ARIMA)については、statsmodels スキルを参照してください。PyMC のワークフローについては、pymc スキルを参照してください。


主な機能

1. 検定の選択と計画
  • 研究課題とデータの特性に基づいて、適切な統計検定を選択する
  • 必要なサンプルサイズを決定するために、事前の検出力分析を実施する
  • 多重比較補正を含む分析方針を計画する
2. 仮定の確認
  • 検定の実行前に、関連するすべての仮定を自動的に検証する
  • 診断用の可視化(Q-Q プロット、残差プロット、箱ひげ図)を提示する
  • 仮定に違反した場合に、修正措置を推奨する
3. 統計的検定
  • 仮説検定:t 検定、ANOVA、カイ二乗検定、ノンパラメトリックな代替検定
  • 回帰分析:診断を含む線形回帰、重回帰、ロジスティック回帰
  • 相関分析:信頼区間を含む Pearson 相関、Spearman 相関
  • ベイズによる代替手法:ベイズ t 検定、ANOVA、ベイズファクターを用いた回帰分析
4. 効果量と解釈
  • すべての分析で適切な効果量を算出し、解釈する
  • 効果量の信頼区間を提示する
  • 統計的有意性と実質的有意性を区別する
5. 専門的な報告
  • APA 形式の統計レポートを作成する
  • 論文掲載に適した図表を作成する
  • 必要な統計量をすべて含む、完全な解釈を提示する

ワークフローの判断ツリー

この判断ツリーを使用して、分析の進め方を決定してください。

START
│
├─ Need to SELECT a statistical test?
│  └─ YES → See "Test Selection Guide"
│  └─ NO → Continue
│
├─ Ready to check ASSUMPTIONS?
│  └─ YES → See "Assumption Checking"
│  └─ NO → Continue
│
├─ Ready to run ANALYSIS?
│  └─ YES → See "Running Statistical Tests"
│  └─ NO → Continue
│
└─ Need to REPORT results?
   └─ YES → See "Reporting Results"

検定の選択ガイド

クイックリファレンス:適切な検定の選び方

詳しいガイダンスについては、references/test_selection_guide.md を使用してください。クイックリファレンス:

2 群の比較:

  • 独立、連続、正規分布 → 独立 t 検定
  • 独立、連続、非正規分布 → Mann-Whitney U 検定
  • 対応あり、連続、正規分布 → 対応のある t 検定
  • 対応あり、連続、非正規分布 → Wilcoxon の符号付き順位検定
  • 二値の結果 → カイ二乗検定または Fisher の正確確率検定

3 群以上の比較:

  • 独立、連続、正規分布 → 一元配置 ANOVA
  • 独立、連続、非正規分布 → Kruskal-Wallis 検定
  • 対応あり、連続、正規分布 → 反復測定 ANOVA
  • 対応あり、連続、非正規分布 → Friedman 検定

関係性:

  • 2 つの連続変数 → Pearson 相関(正規分布)または Spearman 相関(非正規分布)
  • 連続値の結果変数と予測変数 → 線形回帰
  • 二値の結果変数と予測変数 → ロジスティック回帰

ベイズによる代替手法: すべての検定には、次の特徴を備えたベイズ版があります。

  • 仮説について確率を直接示す
  • 証拠を定量化するベイズファクター
  • 帰無仮説を支持できる
  • references/bayesian_statistics.md を参照

仮定の確認

前提の体系的な検証

検定結果を解釈する前に、必ず前提を確認してください。

自動チェックには、同梱の scripts/assumption_checks.py モジュールを使用してください。スキルのディレクトリ(skills/statistical-analysis/)から Python を実行するか、scripts/ を sys.path に追加してください。

from assumption_checks import comprehensive_assumption_check

# Comprehensive check with visualizations
results = comprehensive_assumption_check(
    data=df,
    value_col='score',
    group_col='group',  # Optional: for group comparisons
    alpha=0.05
)

次の項目を実行します。

  1. 外れ値の検出(IQR 法と z スコア法)
  2. 正規性の検定(Shapiro-Wilk 検定と Q-Q プロット)
  3. 分散の均質性(Levene 検定と箱ひげ図)
  4. 解釈と推奨事項
個別の前提チェック

対象を絞ってチェックするには、個別の関数を使用してください。

from assumption_checks import (
    check_normality,
    check_normality_per_group,
    check_homogeneity_of_variance,
    check_linearity,
    detect_outliers
)

# Example: Check normality with visualization
result = check_normality(
    data=df['score'],
    name='Test Score',
    alpha=0.05,
    plot=True
)
print(result['interpretation'])
print(result['recommendation'])
前提が満たされない場合の対処

正規性が満たされない場合:

  • 軽微な違反で、各群の n > 30 の場合 → パラメトリック検定を続行します(頑健です)
  • 中程度の違反 → ノンパラメトリックな代替手法を使用します
  • 深刻な違反 → データを変換するか、ノンパラメトリック検定を使用します

分散の均質性が満たされない場合:

  • t 検定の場合 → Welch の t 検定を使用します
  • ANOVA の場合 → Welch の ANOVA または Brown-Forsythe ANOVA を使用します
  • 回帰の場合 → 頑健標準誤差または加重最小二乗法を使用します

線形性が満たされない場合(回帰):

  • 多項式項を追加します
  • 変数を変換します
  • 非線形モデルまたは GAM を使用します

詳しい説明については、references/assumptions_and_diagnostics.md を参照してください。


統計検定の実行

Python ライブラリ

統計分析に使用する主要なライブラリ:

  • scipy.stats:基本的な統計検定
  • statsmodels:高度な回帰と診断
  • pingouin:効果量を含む、使いやすい統計検定
  • pymc:ベイズ統計モデリング
  • arviz:ベイズ統計の可視化と診断
分析例
完全な報告を含む t 検定
import pingouin as pg
import numpy as np

# Run independent t-test
result = pg.ttest(group_a, group_b, correction='auto')

# Extract results (Pingouin 0.5+ column names)
t_stat = result['T'].values[0]
df = result['dof'].values[0]
p_value = result['p_val'].values[0]
cohens_d = result['cohen_d'].values[0]
ci = result['CI95'].values[0]
ci_lower, ci_upper = ci[0], ci[1]

# Report
print(f"t({df:.0f}) = {t_stat:.2f}, p = {p_value:.3f}")
print(f"Cohen's d = {cohens_d:.2f}, 95% CI [{ci_lower:.2f}, {ci_upper:.2f}]")
事後検定を含む ANOVA
import pingouin as pg

# One-way ANOVA
aov = pg.anova(dv='score', between='group', data=df, detailed=True)
print(aov)

# If significant, conduct post-hoc tests
if aov['p_unc'].values[0] < 0.05:
    posthoc = pg.pairwise_tukey(dv='score', between='group', data=df)
    print(posthoc)

# Effect size
eta_squared = aov['np2'].values[0]  # Partial eta-squared
print(f"Partial η² = {eta_squared:.3f}")
診断を含む線形回帰
import statsmodels.api as sm
from statsmodels.stats.outliers_influence import variance_inflation_factor

# Fit model
X = sm.add_constant(X_predictors)  # Add intercept
model = sm.OLS(y, X).fit()

# Summary
print(model.summary())

# Check multicollinearity (VIF)
vif_data = pd.DataFrame()
vif_data["Variable"] = X.columns
vif_data["VIF"] = [variance_inflation_factor(X.values, i) for i in range(X.shape[1])]
print(vif_data)

# Check assumptions
residuals = model.resid
fitted = model.fittedvalues

# Residual plots
import matplotlib.pyplot as plt
fig, axes = plt.subplots(2, 2, figsize=(12, 10))

# Residuals vs fitted
axes[0, 0].scatter(fitted, residuals, alpha=0.6)
axes[0, 0].axhline(y=0, color='r', linestyle='--')
axes[0, 0].set_xlabel('Fitted values')
axes[0, 0].set_ylabel('Residuals')
axes[0, 0].set_title('Residuals vs Fitted')

# Q-Q plot
from scipy import stats
stats.probplot(residuals, dist="norm", plot=axes[0, 1])
axes[0, 1].set_title('Normal Q-Q')

# Scale-Location
axes[1, 0].scatter(fitted, np.sqrt(np.abs(residuals / residuals.std())), alpha=0.6)
axes[1, 0].set_xlabel('Fitted values')
axes[1, 0].set_ylabel('√|Standardized residuals|')
axes[1, 0].set_title('Scale-Location')

# Residuals histogram
axes[1, 1].hist(residuals, bins=20, edgecolor='black', alpha=0.7)
axes[1, 1].set_xlabel('Residuals')
axes[1, 1].set_ylabel('Frequency')
axes[1, 1].set_title('Histogram of Residuals')

plt.tight_layout()
plt.show()
ベイズ t 検定
import pymc as pm
import arviz as az
import numpy as np

with pm.Model() as model:
    # Priors
    mu1 = pm.Normal('mu_group1', mu=0, sigma=10)
    mu2 = pm.Normal('mu_group2', mu=0, sigma=10)
    sigma = pm.HalfNormal('sigma', sigma=10)

    # Likelihood
    y1 = pm.Normal('y1', mu=mu1, sigma=sigma, observed=group_a)
    y2 = pm.Normal('y2', mu=mu2, sigma=sigma, observed=group_b)

    # Derived quantity
    diff = pm.Deterministic('difference', mu1 - mu2)

    # Sample
    trace = pm.sample(2000, tune=1000, return_inferencedata=True)

# Summarize
print(az.summary(trace, var_names=['difference']))

# Probability that group1 > group2
prob_greater = np.mean(trace.posterior['difference'].values > 0)
print(f"P(μ₁ > μ₂ | data) = {prob_greater:.3f}")

# Plot posterior
az.plot_posterior(trace, var_names=['difference'], ref_val=0)

効果量

効果量を必ず計算する

効果量は効果の大きさを定量化しますが、p 値が示すのは効果の有無のみです。

詳しい説明については、references/effect_sizes_and_power.md を参照してください。

クイックリファレンス:一般的な効果量
検定効果量小中大
T 検定Cohen's d0.200.500.80
ANOVAη²_p0.010.060.14
相関r0.100.300.50
回帰R²0.020.130.26
カイ二乗Cramér's V0.070.210.35

重要:基準値はあくまで目安です。状況に応じて判断してください。

効果量の計算

ほとんどの効果量は pingouin によって自動的に計算されます。

# T-test returns Cohen's d
result = pg.ttest(x, y)
d = result['cohen_d'].values[0]

# ANOVA returns partial eta-squared
aov = pg.anova(dv='score', between='group', data=df)
eta_p2 = aov['np2'].values[0]

# Correlation: r is already an effect size
corr = pg.corr(x, y)
r = corr['r'].values[0]
効果量の信頼区間

精度を示すため、必ず信頼区間を報告してください。

from pingouin import compute_effsize_from_t

# For t-test
d, ci = compute_effsize_from_t(
    t_statistic,
    nx=len(group1),
    ny=len(group2),
    eftype='cohen'
)
print(f"d = {d:.2f}, 95% CI [{ci[0]:.2f}, {ci[1]:.2f}]")

検出力分析

事前検出力分析(研究計画)

データ収集の前に、必要なサンプルサイズを決定します。

from statsmodels.stats.power import (
    tt_ind_solve_power,
    FTestAnovaPower
)

# T-test: What n is needed to detect d = 0.5?
n_required = tt_ind_solve_power(
    effect_size=0.5,
    alpha=0.05,
    power=0.80,
    ratio=1.0,
    alternative='two-sided'
)
print(f"Required n per group: {n_required:.0f}")

# ANOVA: What n is needed to detect f = 0.25?
anova_power = FTestAnovaPower()
n_per_group = anova_power.solve_power(
    effect_size=0.25,
    ngroups=3,
    alpha=0.05,
    power=0.80
)
print(f"Required n per group: {n_per_group:.0f}")
感度分析(研究後)

検出可能な効果量を特定します。

# With n=50 per group, what effect could we detect?
detectable_d = tt_ind_solve_power(
    effect_size=None,  # Solve for this
    nobs1=50,
    alpha=0.05,
    power=0.80,
    ratio=1.0,
    alternative='two-sided'
)
print(f"Study could detect d ≥ {detectable_d:.2f}")

注:事後検出力分析(研究後に検出力を計算すること)は、一般に推奨されません。代わりに感度分析を使用してください。

詳しい説明については、references/effect_sizes_and_power.md を参照してください。


結果の報告

APA 形式の統計報告

references/reporting_standards.md のガイドラインに従ってください。

報告に必須の項目
  1. 記述統計:すべての群/変数の M、SD、n
  2. 検定統計量:検定名、統計量、自由度、正確な p 値
  3. 効果量:信頼区間を含める
  4. 前提チェック:実施した検定、その結果、講じた措置
  5. 計画した分析すべて:有意でない結果も含める
報告テンプレートの例
独立 t 検定
Group A (n = 48, M = 75.2, SD = 8.5) scored significantly higher than
Group B (n = 52, M = 68.3, SD = 9.2), t(98) = 3.82, p < .001, d = 0.77,
95% CI [0.36, 1.18], two-tailed. Assumptions of normality (Shapiro-Wilk:
Group A W = 0.97, p = .18; Group B W = 0.96, p = .12) and homogeneity
of variance (Levene's F(1, 98) = 1.23, p = .27) were satisfied.
一元配置 ANOVA
A one-way ANOVA revealed a significant main effect of treatment condition
on test scores, F(2, 147) = 8.45, p < .001, η²_p = .10. Post hoc
comparisons using Tukey's HSD indicated that Condition A (M = 78.2,
SD = 7.3) scored significantly higher than Condition B (M = 71.5,
SD = 8.1, p = .002, d = 0.87) and Condition C (M = 70.1, SD = 7.9,
p < .001, d = 1.07). Conditions B and C did not differ significantly
(p = .52, d = 0.18).
重回帰
Multiple linear regression was conducted to predict exam scores from
study hours, prior GPA, and attendance. The overall model was significant,
F(3, 146) = 45.2, p < .001, R² = .48, adjusted R² = .47. Study hours
(B = 1.80, SE = 0.31, β = .35, t = 5.78, p < .001, 95% CI [1.18, 2.42])
and prior GPA (B = 8.52, SE = 1.95, β = .28, t = 4.37, p < .001,
95% CI [4.66, 12.38]) were significant predictors, while attendance was
not (B = 0.15, SE = 0.12, β = .08, t = 1.25, p = .21, 95% CI [-0.09, 0.39]).
Multicollinearity was not a concern (all VIF < 1.5).
ベイズ分析
A Bayesian independent samples t-test was conducted using weakly
informative priors (Normal(0, 1) for mean difference). The posterior
distribution indicated that Group A scored higher than Group B
(M_diff = 6.8, 95% credible interval [3.2, 10.4]). The Bayes Factor
BF₁₀ = 45.3 provided very strong evidence for a difference between
groups, with a 99.8% posterior probability that Group A's mean exceeded
Group B's mean. Convergence diagnostics were satisfactory (all R̂ < 1.01,
ESS > 1000).

ベイズ統計

ベイズ法を使用するタイミング

次のような場合は、ベイズ的アプローチを検討してください。

  • 取り入れるべき事前情報がある
  • 仮説について直接的な確率の記述をしたい
  • サンプルサイズが小さい、または逐次的なデータ収集を計画している
  • 帰無仮説を支持する証拠を定量化する必要がある
  • モデルが複雑である(階層モデル、欠損データなど)

包括的なガイダンスについては、references/bayesian_statistics.md を参照してください。

  • ベイズの定理とその解釈
  • 事前分布の指定(情報的、弱情報的、無情報)
  • ベイズファクターを用いたベイズ仮説検定
  • 信用区間と信頼区間の違い
  • ベイズ t 検定、ANOVA、回帰、階層モデル
  • モデルの収束確認と事後予測チェック
主な利点
  1. 直感的な解釈:「データが与えられたとき、パラメーターがこの区間にある確率は 95%です」
  2. 帰無仮説を支持する証拠:効果がないことへの支持を定量化できます
  3. 柔軟性:p ハッキングの懸念がなく、データが集まり次第分析できます
  4. 不確実性の定量化:事後分布全体を確認できます

リソース

このスキルには、包括的な参照資料が含まれています。

References ディレクトリ
  • test_selection_guide.md:適切な統計検定を選択するための判断ツリー
  • assumptions_and_diagnostics.md:仮定の違反を確認し、対処するための詳細なガイダンス
  • effect_sizes_and_power.md:効果量の計算、解釈、報告、および検出力分析の実施
  • bayesian_statistics.md:ベイズ分析手法の完全なガイド
  • reporting_standards.md:例を含む APA スタイルの報告ガイドライン
Scripts ディレクトリ
  • assumption_checks.py:可視化を含む仮定の自動チェック
    • comprehensive_assumption_check():一連のワークフロー
    • check_normality():Q-Q プロットを用いた正規性検定
    • check_homogeneity_of_variance():箱ひげ図を用いた Levene 検定
    • check_linearity():回帰の線形性チェック
    • detect_outliers():IQR と z スコアによる外れ値の検出

ベストプラクティス

  1. 可能な場合は分析を事前登録し、確証的分析と探索的分析を区別します
  2. 結果を解釈する前に、必ず仮定を確認します
  3. 信頼区間とともに効果量を報告します
  4. 有意でない結果も含め、計画したすべての分析を報告します
  5. 統計的有意性と実質的な有意性を区別します
  6. 分析の前後にデータを可視化します
  7. 回帰や ANOVA の診断を確認します(残差プロット、VIF など)
  8. 頑健性を評価するため、感度分析を実施します
  9. 再現性のため、データとコードを共有します
  10. 仮定違反、変換、判断について透明性を保ちます

避けるべきよくある落とし穴

  1. p ハッキング:有意になるまで複数の方法を試してはいけません
  2. HARKing:探索的な知見を確証的な結果として示してはいけません
  3. 仮定の無視:仮定を確認し、違反を報告します
  4. 有意性と重要性の混同:p < .05 ≠ 意味のある効果
  5. 効果量の未報告:解釈に不可欠です
  6. 都合のよい結果の選択:計画したすべての分析を報告します
  7. p 値の誤解:p 値は仮説が正しい確率ではありません
  8. 多重比較:適切な場合は、ファミリーワイズ誤差を補正します
  9. 欠損データの無視:欠損のメカニズム(MCAR、MAR、MNAR)を理解します
  10. 有意でない結果の過剰解釈:証拠がないこと ≠ ないことの証拠

はじめに確認するチェックリスト

統計分析を始める際は、次の項目を確認してください。

  • 研究課題と仮説を定義する
  • 適切な統計検定を選択する(test_selection_guide.md を参照)
  • 検出力分析を実施してサンプルサイズを決定する
  • データを読み込み、確認する
  • 欠損データと外れ値を確認する
  • assumption_checks.py を使用して仮定を検証する
  • 主要な分析を実行する
  • 信頼区間とともに効果量を算出する
  • 必要に応じて事後検定を実施する(補正を適用する)
  • 可視化を作成する
  • reporting_standards.md に従って結果を記述する
  • 感度分析を実施する
  • データとコードを共有する

サポートと参考資料

次の項目については、こちらを参照してください。

  • 検定の選択:references/test_selection_guide.md を参照してください
  • 仮定:references/assumptions_and_diagnostics.md を参照してください
  • 効果量:references/effect_sizes_and_power.md を参照してください
  • ベイズ法:references/bayesian_statistics.md を参照してください
  • 報告:references/reporting_standards.md を参照してください

主な教科書:

  • Cohen, J. (1988). 行動科学のための統計的検出力分析
  • Field, A. (2013). IBM SPSS Statistics を使用した統計学の発見
  • Gelman, A., & Hill, J. (2006). 回帰モデルとマルチレベル/階層モデルを使用したデータ分析
  • Kruschke, J. K. (2014). ベイズデータ分析の実践

オンラインリソース:

  • APA スタイルガイド:https://apastyle.apa.org/
  • 統計コンサルティング:Cross Validated (stats.stackexchange.com)

コメント