回帰残差計算機
この回帰残差計算機は、同じ長さの2つの配列に通常の最小二乗直線を当てはめ、各観測値の残差を返します。残差は、観測された y 値から当てはめた直線による予測値を引いて求めます。傾き、切片、予測値も結果に含まれるため、当てはまりを確認したり、回帰をやり直さずに誤差を診断、グラフ、追加の統計分析へ渡したりできます。
無料で実行
回帰残差から読み取れること
当てはめた直線は、独立変数と観測された応答との平均的な線形関係を要約します。しかし、直線だけでは個々の観測値がその関係からどれだけ外れているかは分かりません。その差を示すのが残差です。この計算機は各データ対について最小二乗直線上の当てはめ値を求め、観測された y 値から差し引きます。残差が正なら観測値は直線より上にあり、負なら下にあります。0 なら、その観測値を直線が正確に予測しています。残差の並び全体を見ると、傾きと切片だけでは表せない曲線的な傾向、ばらつきの変化、孤立した外れ値、同じ符号の誤差が続く区間などを見つけられます。返される残差は入力配列の順序を維持するため、3番目の残差は必ず3番目の x と3番目の y に対応します。予測値も同じ順序なので、計算後にデータを照合し直すことなく、観測値、当てはめ値、誤差を直接比較できます。
最小二乗による当てはめの計算方法
計算には切片を含む通常の最小二乗法を使用します。最初に x の平均と y の平均を求めます。傾きは、中心化した各 x 値と対応する中心化した y 値の積を合計し、中心化した x 値の二乗和で割って算出します。次に、y の平均から傾きと x の平均の積を引いて切片を求めます。各入力対の予測応答は切片に傾きと x の積を加えた値であり、残差は観測された y からその予測値を引いた値です。符号の規則は重要です。分野によっては逆向きの予測誤差を表示しますが、この機能では一貫して観測値から予測値を引きます。各配列には2つ以上の有限な数値が必要で、1対1に対応させるため長さも同じでなければなりません。すべての x 値が同一の場合は傾きの分母が0になるため、無限大や欠損などの誤解を招く結果を返さず、入力エラーとして明確に拒否します。
結果を適切に活用する方法
残差は、個別の数値だけでなく全体のパターンを調べると特に役立ちます。x または返された予測値に対して残差をプロットし、0 付近を中心とする明確な構造のない点群になっているか確認してください。曲線が見える場合、直線では非線形の関係を捉えられていない可能性があります。漏斗のような形は、当てはめた範囲で誤差の分散が変化している可能性を示します。非常に大きな正または負の値は確認すべき観測値の手掛かりになりますが、それだけでデータ誤りとは断定できません。順序のあるデータでは、平均残差が0でも隣接する残差が依存する場合があるため、自己相関の診断も必要です。この計算機は当てはめと診断用の基礎データを提供しますが、モデルの仮定や因果関係を保証するものではありません。行の順序を保ち、削除や暗黙の型変換は行いません。自動処理での API 料金は1回 $0.002 で、ブラウザーと同じ決定論的な計算を実行します。
活用例
残差プロットを作成する
残差を x または予測値と組み合わせ、曲線、ばらつきの変化、通常と異なる観測値を調べます。
回帰計算を検算する
返された傾き、切片、予測値、誤差を、表計算ソフトや統計ソフトの結果と比較できます。
モデル診断の準備をする
直線を再度当てはめずに、順序を保った残差配列を自己相関、誤差分布、外れ値の診断へ渡せます。
よくある質問
各残差はどのように定義されますか?
最小二乗直線による予測値を観測された y 値から引いた値が、それぞれの残差です。
x と y の長さを同じにする必要があるのはなぜですか?
各 x 値に観測された y 値を1つずつ対応させる必要があり、長さが異なる配列では完全な観測対を作れないためです。
すべての x 値が同じ場合はどうなりますか?
x の分散が0で最小二乗の傾きを定義できないため、無効な入力としてエラーを返します。
計算には切片が含まれますか?
はい。y を切片と傾き掛ける x の和で表す、通常の最小二乗モデルを当てはめます。
残差は入力順に返されますか?
はい。各予測値と残差は、対応する x と y の組の位置をそのまま維持します。
API リクエストの料金はいくらですか?
API は1回 $0.002 です。ブラウザー版では同じ決定論的な処理をローカルで実行します。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/stat/regression-residuals \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"x":[1,2,3,4,5],"y":[2,4,5,4,5]}'const res = await fetch("https://api.kit.forhosting.com/stat/regression-residuals", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"x": [
1,
2,
3,
4,
5
],
"y": [
2,
4,
5,
4,
5
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/stat/regression-residuals",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"x": [
1,
2,
3,
4,
5
],
"y": [
2,
4,
5,
4,
5
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/stat/regression-residuals", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"x":[1,2,3,4,5],"y":[2,4,5,4,5]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"x":[1,2,3,4,5],"y":[2,4,5,4,5]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/stat/regression-residuals", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"x": [
1,
2,
3,
4,
5
],
"y": [
2,
4,
5,
4,
5
]
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "stat.regression_residuals",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |