R で重回帰を実行する方法
このガイドでは、R で重線形回帰を実行する方法の例を示します。
- モデルを当てはめる前にデータを調べる
- モデルの調整
- モデルの仮定を確認する
- モデル出力の解釈
- モデルの適合度の評価
- モデルを使用して予測を行う
さあ行こう!
施設
この例では、32 台の異なる車のさまざまな属性に関する情報が含まれる組み込み R データセットmtcarsを使用します。
#view first six lines of mtcars
head(mtcars)
# mpg cyl disp hp drat wt qsec vs am gear carb
#Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
#Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
#Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
#Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
#Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
#Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
この例では、応答変数としてmpg を使用し、予測変数としてdisp 、 hp 、およびdratを使用する重線形回帰モデルを構築します。
#create new data frame that contains only the variables we would like to use to data <- mtcars[, c("mpg", "disp", "hp", "drat")] #view first six rows of new data frame head(data) # mpg disp hp drat #Mazda RX4 21.0 160 110 3.90 #Mazda RX4 Wag 21.0 160 110 3.90 #Datsun 710 22.8 108 93 3.85 #Hornet 4 Drive 21.4 258 110 3.08 #Hornet Sportabout 18.7 360 175 3.15 #Valiant 18.1 225 105 2.76
データレビュー
モデルを当てはめる前に、データを見て理解を深め、重線形回帰がこのデータを当てはめるのに適したモデルであるかどうかを視覚的に評価することもできます。
特に、予測変数が応答変数と線形の関係があるかどうかをチェックする必要があります。これは、重線形回帰モデルが適切である可能性があることを示します。
これを行うには、 pairs()関数を使用して、考えられる変数の各ペアの散布図を作成します。
pairs(data, pch = 18, col = "steelblue")
このペアのグラフから、次のことがわかります。
- mpgと可用性には強い負の線形相関があるようです
- mpgとhpには強い正の線形相関があるようです
- mpgとdratには適度な負の線形相関があるようです
GGallyライブラリのggpairs()関数を使用して、変数の各ペアの実際の線形相関係数を含む同様のプロットを作成することもできることに注意してください。
#install and load the GGally library install.packages("GGally") library(GGally) #generate the pairs plot ggpairs(data)
各予測子変数には応答変数mpgと顕著な線形相関があるように見えるため、線形回帰モデルをデータに当てはめることに進みます。
モデルの調整
R で重線形回帰モデルを近似するための基本的な構文は次のとおりです。
lm(response_variable ~ predictor_variable1 + predictor_variable2 + ..., data = data)
データを使用すると、次のコードを使用してモデルを当てはめることができます。
model <- lm(mpg ~ disp + hp + drat, data = data)
モデルの仮定を確認する
モデルの結果の検証に進む前に、まずモデルの仮定が満たされていることを検証する必要があります。つまり、次のことを確認する必要があります。
1. モデル残差の分布はほぼ正規である必要があります。
残差の単純なヒストグラムを作成することで、この仮定が満たされているかどうかを確認できます。
hist(residuals(model), col = "steelblue")
分布はわずかに右に偏っていますが、大きな懸念を引き起こすほど異常ではありません。
2. 残差の分散はすべての観測値で一貫していなければなりません。
この好ましい条件は等分散性として知られています。この仮定に反することは、不均一分散として知られています。
この仮定が満たされているかどうかを確認するには、調整済み/残存価値グラフを作成します。
#create fitted value vs residual plot plot(fitted(model), residuals(model)) #add horizontal line at 0 abline(h = 0, lty = 2)
理想的には、残差が各近似値で均等に分散されることが望ましいです。グラフから、適合値が大きくなると分散が若干大きくなる傾向があることがわかりますが、この傾向はあまり心配するほど極端ではありません。
モデル出力の解釈
モデルの仮定が十分に満たされていることを確認したら、 summary()関数を使用してモデルの出力を調べることができます。
summary(model) #Call: #lm(formula = mpg ~ disp + hp + drat, data = data) # #Residuals: # Min 1Q Median 3Q Max #-5.1225 -1.8454 -0.4456 1.1342 6.4958 # #Coefficients: #Estimate Std. Error t value Pr(>|t|) #(Intercept) 19.344293 6.370882 3.036 0.00513 ** #disp -0.019232 0.009371 -2.052 0.04960 * #hp -0.031229 0.013345 -2.340 0.02663 * #drat 2.714975 1.487366 1.825 0.07863 . #--- #Significant. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 # #Residual standard error: 3.008 on 28 degrees of freedom #Multiple R-squared: 0.775, Adjusted R-squared: 0.7509 #F-statistic: 32.15 on 3 and 28 DF, p-value: 3.28e-09
結果から次のことがわかります。
- モデルの全体的な F 統計量は32.15で、対応する p 値は3.28e-09です。これは、モデル全体が統計的に有意であることを示しています。言い換えれば、回帰モデルは全体として有用です。
- dispは 0.10 の有意水準で統計的に有意です。特に、モデル結果の係数は、馬力と燃料消費量が一定であると仮定すると、可用性が1 単位増加すると、平均でmpg 単位で -0.019 単位の減少に関連していることを示しています。 。
- hpは 0.10 の有意水準で統計的に有意です。特に、モデル結果の係数は、 dispとdratが一定のままであると仮定すると、馬力の 1 単位の増加はmpg単位で平均 -0.031 単位の減少に関連していることを示しています。
- dratは 0.10 の有意水準で統計的に有意です。特に、モデル結果の係数は、流量と馬力が一定であると仮定すると、ガソリン消費量が 1 単位増加すると、平均 2,715 mpg単位の増加に関連することを示しています。
モデルの適合度の評価
回帰モデルがデータにどの程度適合しているかを評価するために、いくつかの異なる指標を確認できます。
1. 複数の決定係数
これは、予測変数と応答変数の間の線形関係の強さを測定します。 R 二乗の 1 の倍数は完全な線形関係を示し、R 二乗の 0 の倍数は線形関係がないことを示します。
倍数 R は、R の 2 乗の平方根でもあり、これは、予測変数によって説明できる応答変数の分散の割合です。この例では、決定係数の倍数は0.775です。したがって、R の 2 乗は 0.775 2 = 0.601となります。これは、 mpgの分散の60.1%がモデル予測子によって説明できることを示しています。
2. 残存標準誤差
これは、観測値と回帰直線の間の平均距離を測定します。この例では、観測値は回帰直線から平均して3.008 単位外れています。
関連している: 回帰の標準誤差を理解する
モデルを使用して予測を行う
モデルの結果から、近似された重回帰式は次のとおりであることがわかります。
ハットmpg = -19.343 – 0.019*disp – 0.031*hp + 2.715*drat
この方程式を使用して、新しい観測値のmpg がどのようになるかを予測することができます。たとえば、次の属性を持つ車の予測燃費値を見つけることができます。
- 表示= 220
- ch =150
- ドラット= 3
#define the coefficients from the model output intercept <- coef(summary(model))["(Intercept)", "Estimate"] disp <- coef(summary(model))["disp", "Estimate"] hp <- coef(summary(model))["hp", "Estimate"] drat <- coef(summary(model))["drat", "Estimate"] #use the model coefficients to predict the value for mpg intercept + disp*220 + hp*150 + drat*3 #[1] 18.57373
disp = 220、 hp = 150、 drat = 3 の車の場合、モデルは車の燃費が18.57373 mpgになると予測します。
このチュートリアルで使用される完全な R コードは、ここで見つけることができます。
追加リソース
次のチュートリアルでは、R で他のタイプの回帰モデルを当てはめる方法について説明します。