statistical-analysis について
statistical-analysisは、研究向けにPythonで統計分析を計画・実施するスキルです。前提条件の確認、頻度論・ベイズ分析、効果量、検出力分析、APA形式の報告を扱います。
主な機能
- 01統計検定の選択を案内
- 02前提条件と診断を確認
- 03頻度論とベイズ分析に対応
- 04効果量と信頼区間を算出
- 05検出力とサンプルサイズを分析
- 06APA形式のレポートを作成
活用シーン
- 01実験データに適した検定を選ぶ
- 02結果の解釈前に前提条件を確認
- 03研究計画時にサンプルサイズを推定
- 04学術レポート向けに統計結果を整理
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ eturkes/ claude-scientific-skills --skill statistical-analysisインストール後、Claude Code で/statistical-analysisを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/assumptions_and_diagnostics.mdbayesian_statistics.mdeffect_sizes_and_power.mdreporting_standards.mdtest_selection_guide.mdscripts/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
)
次の項目を実行します。
- 外れ値の検出(IQR 法と z スコア法)
- 正規性の検定(Shapiro-Wilk 検定と Q-Q プロット)
- 分散の均質性(Levene 検定と箱ひげ図)
- 解釈と推奨事項
個別の前提チェック
対象を絞ってチェックするには、個別の関数を使用してください。
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 d | 0.20 | 0.50 | 0.80 |
| ANOVA | η²_p | 0.01 | 0.06 | 0.14 |
| 相関 | r | 0.10 | 0.30 | 0.50 |
| 回帰 | R² | 0.02 | 0.13 | 0.26 |
| カイ二乗 | Cramér's V | 0.07 | 0.21 | 0.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 のガイドラインに従ってください。
報告に必須の項目
- 記述統計:すべての群/変数の M、SD、n
- 検定統計量:検定名、統計量、自由度、正確な p 値
- 効果量:信頼区間を含める
- 前提チェック:実施した検定、その結果、講じた措置
- 計画した分析すべて:有意でない結果も含める
報告テンプレートの例
独立 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、回帰、階層モデル
- モデルの収束確認と事後予測チェック
主な利点
- 直感的な解釈:「データが与えられたとき、パラメーターがこの区間にある確率は 95%です」
- 帰無仮説を支持する証拠:効果がないことへの支持を定量化できます
- 柔軟性:p ハッキングの懸念がなく、データが集まり次第分析できます
- 不確実性の定量化:事後分布全体を確認できます
リソース
このスキルには、包括的な参照資料が含まれています。
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 スコアによる外れ値の検出
ベストプラクティス
- 可能な場合は分析を事前登録し、確証的分析と探索的分析を区別します
- 結果を解釈する前に、必ず仮定を確認します
- 信頼区間とともに効果量を報告します
- 有意でない結果も含め、計画したすべての分析を報告します
- 統計的有意性と実質的な有意性を区別します
- 分析の前後にデータを可視化します
- 回帰や ANOVA の診断を確認します(残差プロット、VIF など)
- 頑健性を評価するため、感度分析を実施します
- 再現性のため、データとコードを共有します
- 仮定違反、変換、判断について透明性を保ちます
避けるべきよくある落とし穴
- p ハッキング:有意になるまで複数の方法を試してはいけません
- HARKing:探索的な知見を確証的な結果として示してはいけません
- 仮定の無視:仮定を確認し、違反を報告します
- 有意性と重要性の混同:p < .05 ≠ 意味のある効果
- 効果量の未報告:解釈に不可欠です
- 都合のよい結果の選択:計画したすべての分析を報告します
- p 値の誤解:p 値は仮説が正しい確率ではありません
- 多重比較:適切な場合は、ファミリーワイズ誤差を補正します
- 欠損データの無視:欠損のメカニズム(MCAR、MAR、MNAR)を理解します
- 有意でない結果の過剰解釈:証拠がないこと ≠ ないことの証拠
はじめに確認するチェックリスト
統計分析を始める際は、次の項目を確認してください。
- 研究課題と仮説を定義する
- 適切な統計検定を選択する(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)