用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/nahisaho/satori --skill scientific-statistical-simulation命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
正在显示 SKILL.md
基于 SOC 职业分类
実験の監査レポート・データ来歴(プロベナンス)生成スキル。 データ変換履歴・使用ツールのバージョン・データ整合性チェックを 含むトレーサビリティレポートを自動生成する。 「監査レポート作成」「データ来歴を記録」「トレーサビリティ」で発火。
派生実験設計スキル。既存の実験をベースに条件を変更した派生実験を 設計する。実験計画法(DOE)に基づくパラメータ探索を支援。 「派生実験を設計して」「条件を変えて実験」「パラメータ探索」で発火。
実験テンプレート生成スキル。研究目的・仮説・手法・実験条件・評価基準・ スケジュールを構造化した実験計画書を自動作成する。 「実験テンプレート作成して」「実験計画を立てて」「実験プロトコルを作成」で発火。
| name | scientific-statistical-simulation |
| description | 統計シミュレーションスキル。Monte Carlo 法・Bootstrap 推論・ Permutation Test・統計的検出力分析・確率的リスク評価。 |
| tu_tools | [{"key":"biotools","name":"bio.tools","description":"統計シミュレーションツール検索"}] |
コンピュータベースの統計シミュレーションにより、 推論の不確実性定量化・検出力設計・リスク評価を行う。
import numpy as np
import pandas as pd
from typing import Callable, Dict, Any
def monte_carlo_simulation(func, param_distributions,
n_simulations=10000, seed=42,
summary_quantiles=None):
"""
Monte Carlo シミュレーション。
Parameters:
func: Callable — シミュレーション対象関数 (dict → float)
param_distributions: dict — {param_name: scipy.stats distribution}
n_simulations: int — シミュレーション回数
seed: int — 乱数シード
summary_quantiles: list[float] | None — サマリー分位点
"""
rng = np.random.default_rng(seed)
if summary_quantiles is None:
summary_quantiles = [0.025, 0.25, 0.5, 0.75, 0.975]
results = []
param_samples = {}
# パラメータサンプリング
for name, dist in param_distributions.items():
param_samples[name] = dist.rvs(
size=n_simulations, random_state=rng)
# シミュレーション実行
for i in range(n_simulations):
params = {name: samples[i]
for name, samples in param_samples.items()}
results.append(func(params))
results = np.array(results)
# サマリー統計
summary = {
"mean": np.mean(results),
"std": np.std(results),
"min": np.min(results),
"max": np.max(results),
}
for q in summary_quantiles:
summary[f"q{q:.3f}"] = np.quantile(results, q)
print(f"Monte Carlo ({n_simulations} runs):")
print(f" Mean={summary['mean']:.4f} ± {summary['std']:.4f}")
print(f" 95% CI: [{summary.get('q0.025', 'N/A'):.4f}, "
f"{summary.get('q0.975', 'N/A'):.4f}]")
return {"results": results, "summary": summary,
"param_samples": param_samples}
def bootstrap_inference(data, statistic_fn, n_bootstrap=10000,
confidence_level=0.95, method="bca",
seed=42):
"""
Bootstrap 信頼区間推定。
Parameters:
data: np.ndarray — データ
statistic_fn: Callable — 統計量計算関数 (data → float)
n_bootstrap: int — Bootstrap 回数
confidence_level: float — 信頼水準
method: str — "percentile" / "bca" / "basic"
seed: int — 乱数シード
"""
rng = np.random.default_rng(seed)
n = len(data)
observed = statistic_fn(data)
# Bootstrap 標本
boot_stats = np.array([
statistic_fn(data[rng.integers(0, n, size=n)])
for _ in range(n_bootstrap)])
alpha = 1 - confidence_level
if method == "percentile":
ci_low = np.quantile(boot_stats, alpha / 2)
ci_high = np.quantile(boot_stats, 1 - alpha / 2)
elif method == "bca":
from scipy import stats as sp_stats
# Bias correction
z0 = sp_stats.norm.ppf(np.mean(boot_stats < observed))
# Acceleration (jackknife)
jack_stats = np.array([
statistic_fn(np.delete(data, i)) for i in range(n)])
jack_mean = jack_stats.mean()
a = (np.sum((jack_mean - jack_stats) ** 3) /
(6 * np.sum((jack_mean - jack_stats) ** 2) ** 1.5 + 1e-10))
z_alpha = sp_stats.norm.ppf([alpha / 2, - alpha / ])
adjusted = sp_stats.norm.cdf(
z0 + (z0 + z_alpha) / ( - a * (z0 + z_alpha)))
ci_low = np.quantile(boot_stats, adjusted[])
ci_high = np.quantile(boot_stats, adjusted[])
:
ci_low = * observed - np.quantile(boot_stats, - alpha / )
ci_high = * observed - np.quantile(boot_stats, alpha / )
result = {
: observed,
: np.mean(boot_stats),
: np.std(boot_stats),
: ci_low, : ci_high,
: method,
: confidence_level,
}
(
)
result, boot_stats
def power_analysis(effect_size_range=None, n_range=None,
alpha=0.05, test_type="two-sample-t",
n_simulations=5000, seed=42):
"""
シミュレーションベース統計的検出力分析。
Parameters:
effect_size_range: list[float] | None — 効果量の範囲
n_range: list[int] | None — サンプルサイズの範囲
alpha: float — 有意水準
test_type: str — "two-sample-t" / "paired-t" / "chi-square"
n_simulations: int — 各条件のシミュレーション回数
seed: int — 乱数シード
"""
from scipy import stats as sp_stats
rng = np.random.default_rng(seed)
if effect_size_range is None:
effect_size_range = [0.2, 0.5, 0.8]
if n_range is None:
n_range = [10, 20, 30, 50, 100, 200]
records = []
for es in effect_size_range:
for n in n_range:
rejections = 0
for _ in range(n_simulations):
if test_type == "two-sample-t":
x = rng.normal(0, 1, n)
y = rng.normal(es, 1, n)
_, p = sp_stats.ttest_ind(x, y)
elif test_type == "paired-t":
diff = rng.normal(es, , n)
_, p = sp_stats.ttest_1samp(diff, )
:
ValueError()
p < alpha:
rejections +=
power = rejections / n_simulations
records.append({
: es, : n,
: power, : alpha,
})
df = pd.DataFrame(records)
es effect_size_range:
sub = df[df[] == es]
adequate = sub[sub[] >= ]
(adequate) > :
min_n = adequate[].()
()
:
()
df
[仮説設計] → statistical-simulation → statistical-testing
(シミュレーション) (本解析)
│
doe ← adaptive-experiments
(実験計画) (適応実験)
| ファイル | 説明 | 次スキル |
|---|---|---|
mc_results.npz | Monte Carlo 結果 | → リスク評価 |
bootstrap_ci.csv | 信頼区間 | → 統計レポート |
power_analysis.csv | 検出力カーブ | → DOE サンプルサイズ |
| TU Key | ツール名 | 連携内容 |
|---|---|---|
biotools | bio.tools | 統計シミュレーションツール検索 |