レポート10の課題は,図1に示す。
図1: 課題
下記のRプログラムを用いて,回帰分析を行い,散布図に回帰直線, 回帰式と決定係数を示す。xは説明変数(年齢),yは目的変数(身長)とする。
#回帰分析で散布図に回帰直線と回帰式,決定係数
# 例1データ(Xは身長で説明変数,Yは体重で目的変数)
X <- c(6,7,8,9,10,11,12,13,14,15,16,17)
Y <- c(116.7,122.6,128.3,133.8,139.3,145.9,153.6,160.6,165.7,168.6,169.8,170.8)
#例2データ(XはPT単位数で説明変数,YはFIM差で目的変数)
#X <- c(12,24,10,8,25,26,13,15,10)
#Y <- c(5,12,10,8,12,22,10,10,8)
#データの正規性をシャピロ・ウィルク検定で確認
shapiro_x <- shapiro.test(X)
shapiro_y <- shapiro.test(Y)
cat("Xのシャピロ検定 p値: ", shapiro_x$p.value, "\n")
## Xのシャピロ検定 p値: 0.8757314
cat("Yのシャピロ検定 p値: ", shapiro_y$p.value, "\n")
## Yのシャピロ検定 p値: 0.2295581
# 正規性の判定 (p値 > 0.05なら正規分布とみなす)
if (shapiro_x$p.value > 0.05 & shapiro_y$p.value > 0.05) {
# ピアソン相関係数の計算
result <- cor.test(X, Y, method = "pearson")
cat("\nピアソン相関係数: ", result$estimate, "\n")
cat("相関検定p値: ", result$p.value, "\n")
} else {
cat("\nXまたはY正規分布でないため、ピアソン係数が利用できない。
よって,下記の回帰分析は有意ではない可能性がある。\n")
}
##
## ピアソン相関係数: 0.9870605
## 相関検定p値: 2.795451e-09
# 回帰モデルの作成
kaiki <- lm(Y ~ X)
cat("\n回帰分析の結果とp値 \n")
##
## 回帰分析の結果とp値
print(summary(kaiki)$coefficients)
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 86.32937 3.3064175 26.10964 1.563517e-10
## X 5.36049 0.2753755 19.46611 2.795451e-09
# 回帰係数を取得
intercept <- coef(kaiki)[1]
slope <- coef(kaiki)[2]
# 決定係数 (R-squared) を取得
r_squared <- summary(kaiki)$r.squared
# 回帰直線の数式とR-squaredを作成
equation <- paste("\nY = ", round(intercept, 2), " + ", round(slope, 2), "X", "\nR-squared = ", round(r_squared, 2), sep = "")
cat("\n回帰式と決定係数: ", equation, "\n")
##
## 回帰式と決定係数:
## Y = 86.33 + 5.36X
## R-squared = 0.97
#par(mfcol = c(2, 1)) #2つのグラフを2行1列のレイアウト
# 散布図の作成
plot(X, Y, main = "散布図における回帰直線,回帰式,決定係数",
xlab = "X", ylab = "Y", pch = 19)
# 回帰直線を追加
abline(kaiki, col = "blue", lwd = 2)
# 数式とR-squaredをプロットに追加
text(x = min(X), y = max(Y)-1, labels = equation, pos = 4, col = "red")
検定した結果:回帰式 \(y=86.33+5.36x\) で,xに11.5を代入して計算すると, 測定しなかった11.5歳の身長は,\(y=86.33+5.36*11.5 \approx 148.0 (cm)\)と予測できる。 また,その決定係数は0.97で,年齢が身長に寄与率が97%となり,言い換えれば,年齢で身長を予測する当てはまる率が97%以上で,予測精度がよい。