最小二乗法の直線計算|傾き・切片・予測値
最良適合直線は、対応する数値観測の線形関係を簡潔に表します。同じ長さのx配列とy配列を入力すると、通常の最小二乗法による傾き、切片、各xに対するyの予測値を返します。統計の課題確認、グラフの傾向線、表計算の検算、自動処理の再現可能な結果作成に利用できます。計算は決定的で外部サービスへ接続せず、配列長の不一致やxに変動がない場合は明確な入力エラーになります。
無料で実行
適合直線を求める計算方法
この計算機は、予測y=傾き×x+切片という直線を当てはめます。通常の最小二乗法を使い、観測されたyと予測値の縦方向の差を二乗して合計した値が最小になる係数を選びます。まずx配列とy配列の算術平均を求めます。次に各xがx平均からどれだけ離れているか、対応するyがy平均に対してどう動くかを測ります。これらの偏差の積の合計を、x偏差の二乗合計で割った値が傾きです。切片は、y平均から傾きとx平均の積を引いて求めます。最後に元の各xを式へ代入し、入力と同じ順序で予測配列を作ります。反復近似ではなく閉じた式なので、同じ有限入力からは常に同じ結果が得られます。ただし誤差を二乗するため、大きく離れた外れ値が直線へ強く影響することがあります。
x配列とy配列の正しい準備
xとyは有限数だけを含むJSON配列として入力してください。配列内の位置が組を定めます。最初のxは最初のy、2番目のxは2番目のyに対応します。両配列は同じ長さで、少なくとも2個の値が必要です。予測値と観測値を比較する場合は順序を保ってください。返される予測配列はxの順序に正確に従います。小数、負数、ゼロは使用できます。欠損値、数値文字列、null、NaN、Infinityは送信前に処理してください。またxには実際のばらつきが必要です。すべてのxが同一なら傾きの式の分母がゼロとなり、xの有限な一次関数を定義できません。その場合、ゼロやInfinity、NaNを誤って返さず、無効な入力として通知します。非常に大きい測定値や極端な尺度では、単位を調整すると浮動小数点演算の一般的な制約を抑え、係数も読みやすくなります。
結果の読み方と活用方法
傾きは、xが1単位増えたときに予測yがどれだけ変化するかを示します。正なら上昇する関連、負なら下降する関連、ゼロに近ければ観測範囲で線形変化が小さいことを表します。切片はxがゼロのときの予測yです。ゼロが観測範囲内または近くにあれば意味を持ちますが、遠く離れていれば数学上の基準にすぎない場合があります。predicted配列には入力した各xの適合値が入り、傾向線の描画、結果表の作成、観測yから予測値を引く残差計算に使えます。適合直線が示すのは関連であり、xがyを変化させる因果関係の証明ではありません。専門知識なしに観測範囲の遠く外まで外挿しないでください。散布図で曲線、集団、影響の大きい外れ値も確認してください。ブラウザー計算は無料で、自動APIリクエストは1項目あたり$0.002です。
活用例
統計課題の答え合わせ
手計算した傾きと切片を確認し、各適合値を対応する観測値と比較できます。
グラフの傾向線作成
元のx順序で予測値を生成し、測定値と並べてグラフへ表示できます。
分析処理の検証
決定的な係数と予測値を、インポート処理やレポートのテストデータにできます。
よくある質問
最良適合直線とは何ですか?
観測yと予測yの縦方向の差を二乗した合計が最小になる直線です。
xとyの長さを同じにする理由は何ですか?
同じ位置の値が1つの観測組を作るため、相手のない値は計算に使えません。
xが一定だとエラーになるのはなぜですか?
すべてのxが同じなら分散がゼロで式がゼロ除算となり、有限な傾きが存在しないためです。
予測値は入力順のままですか?
はい。各予測値は同じ配列番号のxに対応します。
API計算の料金はいくらですか?
成功したリクエストは1項目あたり$0.002です。ブラウザーでは同じ決定的計算を無料で実行できます。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/stat/line-of-best-fit \
-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/line-of-best-fit", {
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/line-of-best-fit",
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/line-of-best-fit", 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/line-of-best-fit", 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.line_of_best_fit",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
制限
max_items | 100000 |
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |