R で標準化回帰係数を計算する方法
通常、重線形回帰を実行する場合、モデル出力で得られる回帰係数は標準化されていません。つまり、生データを使用して最適な直線を見つけます。
model <- lm(price ~ age + sqfeet, data=df)
ただし、各予測変数と応答変数を標準化して(元の値から各変数の平均値を引き、変数の標準偏差で割ることにより)、回帰を実行することは可能です。標準化された回帰係数。
R で標準化された回帰係数を計算する最も簡単な方法は、 scale()関数を使用してモデル内の各変数を標準化することです。
model <- lm(scale(price) ~ scale(age) + scale(sqfeet), data=df)
次の例は、実際に標準化回帰係数を計算する方法を示しています。
例: R で標準化された回帰係数を計算する方法
12 戸の住宅の築年数、面積、販売価格に関する情報を含む次のデータセットがあるとします。
#create data frame df <- data. frame (age=c(4, 7, 10, 15, 16, 18, 24, 28, 30, 35, 40, 44), sqfeet=c(2600, 2800, 1700, 1300, 1500, 1800, 1200, 2200, 1800, 1900, 2100, 1300), price=c(280000, 340000, 195000, 180000, 150000, 200000, 180000, 240000, 200000, 180000, 260000, 140000)) #view data frame df age square feet price 1 4 2600 280000 2 7 2800 340000 3 10 1700 195000 4 15 1300 180000 5 16 1500 150000 6 18 1800 200000 7 24 1200 180000 8 28 2200 240000 9 30 1800 200000 10 35 1900 180000 11 40 2100 260000 12 44 1300 140000
次に、築年数と平方フィートを予測変数として、価格を応答変数として使用して重線形回帰を実行するとします。
#fit regression model model <- lm(price ~ age + sqfeet, data=df) #view model summary summary(model) Call: lm(formula = price ~ age + sqfeet, data = df) Residuals: Min 1Q Median 3Q Max -32038 -10526 -6139 21641 34060 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 34736.54 37184.32 0.934 0.374599 age -409.83 612.46 -0.669 0.520187 sqfeet 100.87 15.75 6.405 0.000125 *** --- Significant. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 Residual standard error: 24690 on 9 degrees of freedom Multiple R-squared: 0.8508, Adjusted R-squared: 0.8176 F-statistic: 25.65 on 2 and 9 DF, p-value: 0.0001916
モデルの結果から、標準化されていない回帰係数がわかります。
- インターセプト: 34736.54
- 年齢: -409.83
- 平方フィート: 100.87
一見すると、回帰表の係数が-409.833 であるのに対し、平方フィート予測変数の係数は100.866にすぎないため、築年数が不動産価格に大きく影響しているように見えます。
ただし、標準誤差は平方フィートよりも年齢の方がはるかに大きいため、対応する p 値は実際には年齢では大きく (p = 0.520)、平方フィートでは小さくなります (p = 0.000)。
回帰係数が極端に異なる理由は、2 つの変数のスケールが極端に異なるためです。
- 年齢の値の範囲は 4 ~ 44 歳です。
- 平方フィート値の範囲は 1,200 ~ 2,800 です。
代わりに生データを正規化し、新しい回帰モデルを当てはめるとします。
#standardize each variable and fit regression model model_std <- lm(scale(price) ~ scale(age) + scale(sqfeet), data=df) #turn off scientific notation options(scipen= 999 ) #view model summary summary(model_std) Call: lm(formula = scale(price) ~ scale(age) + scale(sqfeet), data = df) Residuals: Min 1Q Median 3Q Max -0.5541 -0.1820 -0.1062 0.3743 0.5891 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) -0.0000000000000002253 0.1232881457926768426 0.000 1.000000 scale(age) -0.0924421263946849786 0.1381464029075653854 -0.669 0.520187 scale(sqfeet) 0.8848591938302141635 0.1381464029075653577 6.405 0.000125 (Intercept) scale(age) scale(sqfeet)*** --- Significant. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 Residual standard error: 0.4271 on 9 degrees of freedom Multiple R-squared: 0.8508, Adjusted R-squared: 0.8176 F-statistic: 25.65 on 2 and 9 DF, p-value: 0.0001916
この表の回帰係数は標準化されており、この回帰モデルに適合させるために標準化されたデータを使用したことを意味します。
表内の係数を解釈する方法は次のとおりです。
- 平方フィートが一定であると仮定すると、築年数が 1 標準偏差で増加すると、住宅価格は0.092標準偏差で減少します。
- 築年数が一定であると仮定すると、平方フィートの1 標準偏差の増加は、住宅価格の0.885標準偏差の増加に関連します。
築年数よりも面積の方が住宅価格に大きく影響することがわかりました。
注: 各予測変数の p 値は、前の回帰モデルの p 値とまったく同じです。
どの最終モデルを使用するかを決定する際、住宅の価格を予測するには築年数よりも平方フィートの方がはるかに重要であることがわかっています。
追加リソース
次のチュートリアルでは、回帰モデルに関する追加情報を提供します。