重回帰分析

1ページ 2ページ 3ページ

残差分析

実測値 $y_i$ と回帰式から得られる値 $\hat{y_i}$ をプロットしてみましょう

R
#切片
b0 <- coef(fit)[1]
#BMI
b1 <- coef(fit)[2]
#前FIMmの係数
b2 <- coef(fit)[3]
#PT時間
b3 <- coef(fit)[4]

print(c(b0, b1, b2, b3))

FIM差の予測式から求めた予測値

R
yhat1 <-  b0 + b1*dat$BMI + b2*dat$前FIMm + b3*dat$PT時間

Rのpredict関数を使えば予測値を簡単に求めることができます

R
yhat2 <- predict(fit)
# yhat1 = yhat2

FIM差をx軸、FIM差の推定値をy軸にして、誤差を確認します

R
plot(dat$FIM差, yhat1, xlim = c(0, 50), ylim = c(0, 50))

# Y=Xの直線
segments(
    x0=0, y0=0, 
    x1=50, y1=50
)

#誤差の例
segments(
    x0=dat$FIM差[3], y0=yhat1[3], 
    x1=dat$FIM差[3], y1=dat$FIM差[3],
    col="red"
)

* yhat1 を yhat2 に変えても全く同じグラフになります

Y=Xの線上からのズレ(赤線)が誤差になります

Bland Altman Plotで確認してみます

R
ba <- BlandAltmanLeh::bland.altman.stats(
  dat$FIM差, yhat1
)  

#str(ba)で確認して必要な部分だけ抜き取ります
plot(
    ba$means, ba$diffs, 
    xlab="FIM差とyhat1の平均値",
    ylab="FIM差とyhat1との差"
)
abline(h=0, lty=2, col=2)

0を中心になんとなく正規分布しているようです

次に残差のヒストグラムを見てみます

R
hist(
    dat$FIM差-yhat1,
    main="残差",
    xlab="", ylab=""
)

正規分布の形状のようです

QQプロット

R
qqnorm(dat$FIM差-yhat1)
qqline(dat$FIM差-yhat1)

正規分布していることが確認できました

コメント欄 『間違い』や『分かりにくい部分』などのご意見もお寄せください

タイトルとURLをコピーしました