noisymoon API
単位根検定と反応拡散シミュレーションを、HTTP から
このサイトの記事で扱っている計算を、自分のプログラムから呼び出せる API です。
- 検定:ADF 検定・KPSS 検定(statsmodels と一致)、t 検定(1 標本・2 標本・対応あり、片側/両側。scipy と一致)。
- 状態空間モデル:カルマンフィルタと平滑化(行列を指定、欠測値に対応)、ローカルレベルモデルの最尤推定(statsmodels と一致)。
- 情報量:KL 情報量、Fisher 情報量(Cramér–Rao の下限・標準誤差)、分布の当てはめと AIC・BIC による比較。
- シミュレーション:Gray-Scott 反応拡散系。結果を画像(PNG)と NumPy 配列(
.npy)で受け取れます。
料金
前払いのクレジット制です。使った分だけ残高から引かれます。
| 項目 | 料金 |
|---|---|
| ADF / KPSS / t 検定 / カルマンフィルタ / ローカルレベル / 情報量 | 1 回 ¥1 |
| Gray-Scott | 百万セル・ステップあたり ¥0.01(256×256 格子・1 万ステップで約 ¥6.6) |
| 購入単位 | ¥500 / ¥1,000 / ¥5,000(税込・クレジットカード) |
- クレジットの有効期限は購入から 180 日です。
- 入力の誤りなどで計算が失敗したときは課金されません。シミュレーションが失敗した場合は返金されます。
- 記事の中の「試す」デモは無料です(系列 500 点まで・1 分あたり 10 回まで)。
使い方
1. API キーを発行する
アカウント からメールアドレスでログインし、クレジットを購入してキーを発行します。キーは nm_ で始まる文字列で、発行時に一度だけ表示されます。
2. 呼び出す
キーは X-API-Key ヘッダーで送ります。
curl -X POST https://api.noisymoon.jp/v1/tests/adf \
-H "X-API-Key: $NOISYMOON_KEY" \
-d '{"series": [0.12, 0.35, 0.10, 0.44, 0.61, 0.52, 0.80, 0.77, 0.95, 1.10], "regression": "c"}'Python からは次のように使えます。
import os, requests
API = "https://api.noisymoon.jp"
H = {"X-API-Key": os.environ["NOISYMOON_KEY"]}
r = requests.post(f"{API}/v1/tests/adf", headers=H,
json={"series": list(y), "regression": "ct", "autolag": "AIC"})
r.raise_for_status()
res = r.json()
print(res["statistic"], res["pvalue"], res["critical_values"])シミュレーションは時間がかかるので「ジョブ」として受け付け、終わってから結果を取りに行きます。
import io, time, numpy as np
job = requests.post(f"{API}/v1/sim/gray-scott", headers=H,
json={"n": 256, "steps": 10000, "F": 0.0367, "k": 0.0649, "init": "random"}).json()
while True:
st = requests.get(f"{API}/v1/jobs/{job['id']}", headers=H).json()
if st["status"] in ("done", "failed"):
break
time.sleep(2)
v = np.load(io.BytesIO(requests.get(f"{API}/v1/jobs/{job['id']}/v.npy", headers=H).content))ツールごとの要点
各ツールについて、必要なデータ・前提条件・出力する値をまとめます。詳しい説明と証明は各記事にあります。
| ツール | 必要なデータ | 前提条件 | 出力する値 |
|---|---|---|---|
| ADF 検定 | 1 本の時系列(10 点以上)、確定項の選び方 | 帰無仮説は単位根あり。検出力が低く、構造変化に弱い | 統計量、p 値、選ばれたラグ、臨界値 |
| KPSS 検定 | 1 本の時系列、水準定常かトレンド定常か | 帰無仮説は定常。ADF と組み合わせて使う | 統計量、p 値(表の範囲外なら注記)、ラグ、臨界値 |
| t 検定 | 標本 x(と y)、帰無仮説の値、片側/両側 | 正規分布・独立。2 標本の既定は等分散(Welch も可) | t、自由度、p 値、推定値と標準誤差、信頼区間 |
| カルマンフィルタ | 観測の列(欠測可)、行列 F・H・Q・R、初期値(省略可) | 線形・ガウス、行列は時間によらない | 予測・フィルタ・平滑化の平均と共分散、予測誤差、対数尤度、次の期の予測 |
| ローカルレベル | 1 本の時系列(3 点以上、欠測可) | ランダムウォークする水準+独立な観測ノイズ | 2 つの分散の推定値、水準のフィルタ・平滑化と標準偏差、AIC、次の期の予測 |
| KL 情報量 | 分布族と 2 つの分布の母数(離散なら確率ベクトル) | 同じ分布族、母数が正しい範囲 | KL(P‖Q)、KL(Q‖P)、Jeffreys、ビット単位 |
| Fisher 情報量 | 分布族と、母数の値+n または標本 | 正則条件、分布族が正しい | 情報行列、Cramér–Rao の下限、最尤推定値と標準誤差 |
| 分布の当てはめ | 1 本の標本(3 点以上) | 独立同分布、連続と離散を混ぜない | 分布ごとの最尤推定値・尤度・AIC・BIC・赤池重み、最良の分布 |
| Gray-Scott | 格子の大きさ、ステップ数、F・k などの係数 | 陽的オイラー法の安定条件 dt·max(Du,Dv) ≤ 0.25 | v 場の画像(PNG)と配列(.npy)、要約統計 |
エンドポイント
| メソッド | パス | 内容 |
|---|---|---|
| POST | /v1/tests/adf |
ADF 検定 |
| POST | /v1/tests/kpss |
KPSS 検定 |
| POST | /v1/tests/ttest-1samp |
1 標本の t 検定 |
| POST | /v1/tests/ttest-2samp |
2 標本の t 検定(等分散/Welch) |
| POST | /v1/tests/ttest-paired |
対応のある 2 標本の t 検定 |
| POST | /v1/statespace/kalman |
カルマンフィルタ・平滑化・尤度 |
| POST | /v1/statespace/local-level |
ローカルレベルモデルの最尤推定と水準の平滑化 |
| POST | /v1/info/kl |
KL 情報量 |
| POST | /v1/info/fisher |
Fisher 情報量 |
| POST | /v1/info/select-distribution |
分布の当てはめと AIC・BIC |
| POST | /v1/sim/gray-scott |
Gray-Scott のジョブを登録(202 を返す) |
| GET | /v1/jobs/{id} |
ジョブの状態と結果の要約 |
| GET | /v1/jobs/{id}/v.png |
結果の画像(v 場、viridis) |
| GET | /v1/jobs/{id}/v.npy |
結果の配列(float32, 形状 (n, n)) |
| GET | /v1/usage |
直近 30 日の使用量と残高 |
| GET | /v1/pricing |
現在の料金(キー不要) |
ADF 検定 POST /v1/tests/adf
| パラメータ | 既定値 | 内容 |
|---|---|---|
series |
(必須) | 数値の配列。10〜100,000 点 |
regression |
"c" |
確定項。"n"(なし)/ "c"(定数)/ "ct"(定数+トレンド)/ "ctt"(+2次トレンド) |
autolag |
"AIC" |
ラグの選び方。"AIC" / "BIC" / "t-stat" / null(maxlag をそのまま使う) |
maxlag |
\(12(n/100)^{1/4}\) | 最大ラグ |
statsmodels の adfuller と同じ手順・同じ既定値です。検定の中身は ADF 検定の記事 を参照してください。
KPSS 検定 POST /v1/tests/kpss
| パラメータ | 既定値 | 内容 |
|---|---|---|
series |
(必須) | 数値の配列 |
regression |
"c" |
"c"(水準定常)/ "ct"(トレンド定常) |
nlags |
"auto" |
"auto"(Hobijn et al. 1998)/ "legacy" / 整数 |
t 検定 POST /v1/tests/ttest-1samp ・ ttest-2samp ・ ttest-paired
| パラメータ | 既定値 | 内容 |
|---|---|---|
x |
(必須) | 数値の配列(2〜100,000 点) |
y |
(2 標本・対応ありで必須) | 数値の配列。対応ありでは x と同じ長さ |
mu0 |
0 |
帰無仮説の値(1 標本は平均、2 標本・対応ありは差 x − y の平均) |
alternative |
"two-sided" |
"two-sided" / "greater" / "less" |
equal_var |
true |
2 標本のみ。true で等分散(Student、UMP 不偏)、false で Welch |
confidence |
0.95 |
信頼区間の水準 |
返り値は statistic(t)、df、pvalue、estimate(平均または差)、stderr、confidence_interval(片側では一方が null=無限大)。 scipy の ttest_1samp / ttest_ind / ttest_rel と同じ定義です。理論は t 検定の記事 を参照してください。
r = requests.post(f"{API}/v1/tests/ttest-2samp", headers=H,
json={"x": list(a), "y": list(b), "alternative": "greater"}).json()
print(r["statistic"], r["df"], r["pvalue"], r["confidence_interval"])カルマンフィルタ POST /v1/statespace/kalman
| パラメータ | 既定値 | 内容 |
|---|---|---|
y |
(必須) | 長さ T の配列。1 次元なら数値か null、p 次元なら各時点が長さ p の配列(成分ごとに null 可) |
F, H, Q, R |
(必須) | 状態遷移 m×m、観測 p×m、状態ノイズの共分散 m×m、観測ノイズの共分散 p×p。1×1 は数値でもよい |
x0, P0 |
近似散漫初期化 | 初期状態の平均(長さ m)と共分散(m×m)。両方省略すると P0 = 10⁶ I、最初の m 期を尤度から除外 |
smooth |
true |
平滑化も計算する |
return_cov |
true |
各期の共分散行列も返す(T×m² が 200 万を超えるときは false にする) |
上限:T ≤ 100,000、m, p ≤ 20。結果は statsmodels の状態空間モデルと一致します(既知の初期値で相対 10⁻⁸)。
ローカルレベルモデル POST /v1/statespace/local-level
{"y": [...]}(欠測は null)だけを送ると、観測ノイズと水準の変化の 2 つの分散を最尤法で推定し、水準のフィルタ・平滑化と標準偏差、AIC、次の期の予測を返します。
r = requests.post(f"{API}/v1/statespace/local-level", headers=H, json={"y": list(y)}).json()
r["params"], r["level"]["smoothed"]情報量 POST /v1/info/kl ・ fisher ・ select-distribution
requests.post(f"{API}/v1/info/kl", headers=H, json={
"family": "gamma", "p": {"shape": 2, "rate": 1}, "q": {"shape": 3, "rate": 1.5}}).json()
requests.post(f"{API}/v1/info/fisher", headers=H, json={"family": "normal", "params": {"mu": 0, "sigma2": 4}, "n": 50}).json()
requests.post(f"{API}/v1/info/fisher", headers=H, json={"family": "gamma", "sample": list(x)}).json() # 最尤推定値と標準誤差
requests.post(f"{API}/v1/info/select-distribution", headers=H, json={"x": list(x)}).json()KL の分布族と母数:normal(mu, sigma)、mvnormal(mean, cov)、exponential(rate)、poisson(lambda)、gamma(shape, rate)、discrete(p, q を確率ベクトルで)。 Fisher の分布族と母数:normal(mu, sigma2)、poisson(lambda)、binomial(p、trials 必須)、exponential(rate)、gamma(shape, rate)。 分布の当てはめの候補は、連続が normal・lognormal・exponential・gamma・weibull、離散が poisson・negbinom(trials を渡すと binomial も)。標本がすべて 0 以上の整数なら離散の候補を使う。
Gray-Scott POST /v1/sim/gray-scott
\[ \partial_t u = D_u \nabla^2 u - u v^2 + F(1-u), \qquad \partial_t v = D_v \nabla^2 v + u v^2 - (F+k) v \]
| パラメータ | 既定値 | 範囲 |
|---|---|---|
n |
256 | 16〜512(格子の一辺、周期境界) |
steps |
10000 | 1〜100000(ただし \(n^2 \times\) steps \(\le 512^2 \times 20000\)) |
F, k |
0.035, 0.065 | 0〜0.2 |
Du, Dv |
0.16, 0.08 | 0〜1 |
dt |
1.0 | \(dt \cdot \max(D_u, D_v) \le 0.25\)(陽的オイラー法の安定条件) |
seed |
乱数 | 同じ値で同じ結果を再現できる |
init |
"center" |
"center"(中央に種)/ "random"(ランダムな位置に種) |
エラー
エラーは次の形で返ります。
{"error": {"code": "invalid_argument", "message": "series の長さは 10〜100000"}}| HTTP | code | 意味 |
|---|---|---|
| 400 | invalid_argument / invalid_json |
入力の誤り(課金されません) |
| 401 | unauthorized |
キーがない・無効 |
| 402 | insufficient_credit |
残高不足 |
| 429 | rate_limited / too_many_jobs |
1 分あたり 60 回、または同時ジョブ 3 件の上限 |
無料デモ
キーなしで試せます(系列 500 点まで)。