①R言語で実装したプログラム

 例を用いて,重回帰分析プログラムを説明する。30人に対して性別・年齢・肺活量は,「6分間歩行距離」に対して,どのような影響を与えるのかを調べたい。実験したデータは下記のプログラムに入力してある。ここで従属変数:y =「6分間歩行距離」,複数の独立変数:x1 =「性別」, x2 =「年齢」, x3 = 「肺活量」となっている。

#重回帰分析
#例1のデータ
data <- data.frame(
  y = c(340,355,370,430,410,300,270,290,305,150,240,500,480,370,190,210,360,420,455,520,310,90,145,200,300,230,400,435,160,460),
  x1 = c(0,0,1,1,1,0,1,0,0,1,1,0,0,0,1,1,1,0,0,1,0,1,1,0,1,0,0,1,1,0),
  x2 = c(61,68,73,73,65,69,79,75,72,81,69,70,76,71,81,68,73,69,71,56,78,83,71,68,64,74,76,71,73,66),
  x3 = c(1800,1850,1920,2030,1970,1600,1530,1590,1630,1200,1390,2300,2200,1900,1310,1400,1870,1900,2100,2300,1610,1000,1130,1360,1580,1410,1830,2000,1310,2010)
)

# 動的にモデル式を構築
response_var <- "y"  # 目的変数の名前
predictor_vars <- setdiff(names(data), response_var)  # 予測変数の名前を抽出
formula <- as.formula(paste(response_var, "~", paste(predictor_vars, collapse = " + ")))

# 重回帰モデルの作成
k1 <- lm(formula, data = data)

# 結果を出力
#cat("\n重回帰分析の結果:\n")
#print(summary(k1))

# 回帰式の作成
coef <- coef(k1)
intercept <- round(coef[1], 2)  # 切片
terms <- paste0(round(coef[-1], 2), "*", names(coef[-1]))
equ <- paste0("y = ", intercept, " + ", paste(terms, collapse = " + "))

# 結果を出力
cat("重回帰式: ", equ, "\n")

# データを標準化
d_std <- as.data.frame(scale(data))

# 標準化データで重回帰分析
k2 <- lm(formula, data = d_std)

# 標準化結果を出力
#cat("\n標準重回帰分析の結果:\n")
#print(summary(k2)$coefficients)

# 標準偏回帰係数を計算
std_coefficients <- coef(k1)[-1] * (apply(data[, -1], 2, sd) / sd(data$y))
names(std_coefficients) <- names(coef(k1))[-1]

# 無視可の変数を判定
p_values <- summary(k1)$coefficients[-1, 4]  # p値を抽出(切片を除く)
ignored_vars <- names(std_coefficients)[abs(std_coefficients) <= 0.2 & p_values >= 0.05]

# 使用する変数(無視可でないもの)
used_vars <- names(std_coefficients)[abs(std_coefficients) > 0.2]

# 無視可の変数を除いた回帰式を作成
if (length(used_vars) > 0) {
  used_coefficients <- coef[used_vars]
  terms_used <- paste0(round(used_coefficients, 2), "*", used_vars)
  reduced_equation <- paste0("y = ", intercept, " + ", paste(terms_used, collapse = " + "))
} else {
  reduced_equation <- paste0("y = ", intercept)  # すべて無視可の場合
}
# 無視可の変数をリスト表示
#cat("\n**標準偏回帰係数の予測値≦0.2かつp≧0.05,この変数は無視しても可**\n")
cat("無視可の変数:", paste(ignored_vars, collapse = ", "), "\n")

# 結果を出力
cat("無視可の変数を除いた重回帰式: ", reduced_equation, "\n")

②簡単な出力

## 重回帰式:  y = -217.14 + -7.11*x1 + -0.14*x2 + 0.33*x3
## 無視可の変数: x1, x2
## 無視可の変数を除いた重回帰式:  y = -217.14 + 0.33*x3