2次元データから回帰直線と任意の(x1, y1)が予測曲線上にあるかどうかのp値を算出する方法
Julia のコードを末尾に載せます。
p値 (pValue) は、0.4974525172673961 になります。
1. 残差平方和 (SSE) の計算
残差平方和 (SSE) は、回帰直線と各データ点との距離の二乗和を表します。
SSEは、回帰モデルがデータにどの程度フィットしていないかを表す指標となります。
- 計算式 SSE = Σ(yi - ŷi)^2
- yi: データ点のy座標
- ŷi: 回帰直線による予測値
2. 自由度 (df) と data の標本数の関係
自由度 (df) は、データの独立性に基づいて、統計量 (例: t検定量) の分布を決定するパラメータです。
- 計算式 df = n - k - 1
- n: データの標本数
- k: 回帰直線の次数 (線形回帰の場合、k = 1)
3. t 検定量の計算
t検定量は、回帰直線と任意の(x1, y1)が予測曲線上にあるかどうかを検定するために用いられます。
- 計算式 t = (y1 - ŷ1) / √(SSE / df)
- y1: 任意の点のy座標
- ŷ1: 回帰直線による予測値
- Welchの補正 (等分散性の仮定が成立していない場合)
- t = (y1 - ŷ1) / √(SSE / df * (1 / n + (x1 - x̄)^2 / Σ(xi - x̄)^2))
- y1: 任意の点のy座標
- ŷ: 回帰直線による予測値
- SSE: 残差平方和
- df: 自由度
- n: データの標本数
- x1: 任意の点のx座標
- x̄: データのx座標の平均
- Σ(xi - x̄)^2: データのx座標の偏差の二乗和
4. Julia のコード
-------
using Distributions, DataFrames, GLM
# データの準備x = [1.2, 2.1, 3.0, 4.1, 5.2]y = [2.1, 4/2, 6.3, 8.5, 10.1]
data = DataFrame([x,y], [:x, :y])
# 回帰直線の計算# 線形回帰モデルの作成mdl = lm(@formula(y ~ x), data)
# 回帰直線の関数f(x) = coef(mdl)[2] .* x .+ coef(mdl)[1]
# 任意の点(x1, y1)x1 = 3.5;y1 = 7.5;
# 残差 resid と標準誤差 σ の計算# 自由度は、標本数から1を引いて、回帰直線の次数 (線形回帰の場合 1) を更に引く (合計2を引く)resid = y .- predict(mdl)σ = sqrt(sum(resid.^2) / (length(x) - 2))
t = (y1 - f(x1) ) / σ
# Distribution.jl で自由度標本数−2 の t 分布から p 値を得るtDistribution = TDist(length(x) - 2)pValue = 2 * cdf(tDistribution, -abs(t))