statistical-analysis について
statistical-analysis は、学術研究のデータ分析を支援するスキルです。仮説検定、回帰、相関、ベイズ分析に加え、前提条件の確認や効果量の算出、APA 形式の報告に対応します。
主な機能
- 01検定の選択と分析計画
- 02前提条件の確認と診断図の作成
- 03頻度論・ベイズ分析の実行
- 04効果量・信頼区間・検出力の算出
- 05APA 形式の結果レポート作成
活用シーン
- 01実験データや観察研究データの分析
- 02群間比較と変数間の関連検定
- 03サンプルサイズ計画と統計的前提の確認
- 04APA 形式での研究結果の執筆
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ jackspace/ claudeskillz --skill statistical-analysisインストール後、Claude Code で/statistical-analysisを入力して読み込まれたか確認します。
同梱ファイルSKILL.json
詳細
統計分析
概要
統計分析は、仮説を検定し、関係性を定量化するための体系的なプロセスです。仮定の確認を伴うかたちで、仮説検定(t検定、ANOVA、カイ二乗検定)、回帰、相関、ベイズ分析を実施し、APA形式で報告します。学術研究にこのスキルを適用してください。
このスキルを使用するタイミング
このスキルは、次の場合に使用してください。
- 統計的仮説検定(t検定、ANOVA、カイ二乗検定)を実施する場合
- 回帰分析または相関分析を実行する場合
- ベイズ統計分析を実行する場合
- 統計的仮定と診断を確認する場合
- 効果量を算出し、検定力分析を実施する場合
- 統計結果をAPA形式で報告する場合
- 研究のために実験データまたは観察データを分析する場合
中核機能
1. 検定の選択と計画
- 研究課題とデータの特性に基づいて、適切な統計検定を選択する
- 必要なサンプルサイズを決定するために事前の検定力分析を実施する
- 多重比較補正を含む分析戦略を計画する
2. 仮定の確認
- 検定を実行する前に、関連するすべての仮定を自動的に検証する
- 診断用の可視化(Q-Qプロット、残差プロット、箱ひげ図)を提供する
- 仮定が満たされない場合に、対処方法を提案する
3. 統計的検定
- 仮説検定:t検定、ANOVA、カイ二乗検定、ノンパラメトリック検定による代替手法
- 回帰:線形、重回帰、ロジスティック回帰(診断を含む)
- 相関:ピアソン、スピアマン(信頼区間を含む)
- ベイズによる代替手法:ベイズ因子を用いたベイズ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群の比較:
- 独立、連続、正規分布 → 独立した2群のt検定
- 独立、連続、非正規分布 → マン・ホイットニーのU検定
- 対応あり、連続、正規分布 → 対応のあるt検定
- 対応あり、連続、非正規分布 → ウィルコクソンの符号付き順位検定
- 二値アウトカム → カイ二乗検定またはフィッシャーの正確確率検定
3群以上の比較:
- 独立、連続、正規分布 → 一元配置ANOVA
- 独立、連続、非正規分布 → クラスカル・ウォリス検定
- 対応あり、連続、正規分布 → 反復測定ANOVA
- 対応あり、連続、非正規分布 → フリードマン検定
関係性:
- 2つの連続変数 → ピアソン相関(正規分布)またはスピアマン相関(非正規分布)
- 予測変数を持つ連続アウトカム → 線形回帰
- 予測変数を持つ二値アウトカム → ロジスティック回帰
ベイズによる代替手法: すべての検定にはベイズ版があり、次のことができます。
- 仮説に関する直接的な確率的記述の提供
- ベイズ因子によるエビデンスの定量化
- 帰無仮説を支持できること
- 詳細は
references/bayesian_statistics.mdを参照
仮定の確認
体系的な仮定の検証
検定結果を解釈する前に、必ず仮定を確認してください。
自動チェックには、用意されている scripts/assumption_checks.py モジュールを使用してください。
from scripts.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 スコア法)
- 正規性の検定(シャピロ・ウィルク検定 + Q-Qプロット)
- 分散の等質性(ルビーンの検定 + 箱ひげ図)
- 解釈と推奨事項
個別の仮定チェック
対象を絞ったチェックには、個別の関数を使用してください。
from scripts.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
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_lower = result['CI95%'].values[0][0]
ci_upper = result['CI95%'].values[0][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-hacking の懸念がなく、データが得られるたびに分析できる
- 不確実性の定量化: 事後分布全体を得られる
リソース
このスキルには、包括的な参考資料が含まれています。
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 など)
- 結果の頑健性を評価するため、感度分析を実施する
- 再現性のため、データand コードを共有する
- 仮定違反、変換、および判断について透明性を保つ
避けるべき一般的な落とし穴
- P-hacking: 有意になるまで複数の方法を試さない
- 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). Statistical Power Analysis for the Behavioral Sciences
- Field, A. (2013). Discovering Statistics Using IBM SPSS Statistics
- Gelman, A., & Hill, J. (2006). Data Analysis Using Regression and Multilevel/Hierarchical Models
- Kruschke, J. K. (2014). Doing Bayesian Data Analysis
オンラインリソース:
- APA Style Guide: https://apastyle.apa.org/
- 統計相談: Cross Validated (stats.stackexchange.com)