R で lm() で predict() 関数を使用する方法
R のlm()関数を使用して、線形回帰モデルを近似できます。
モデルを適合させたら、 predict()関数を使用して新しい観測値の応答値を予測できます。
この関数は次の構文を使用します。
予測(オブジェクト、新しいデータ、タイプ = “応答”)
金:
- オブジェクト: glm() 関数を使用したモデル調整の名前
- newdata:予測を行う新しいデータ フレームの名前
- type:行う予測のタイプ。
次の例は、 lm()関数を使用して R の線形回帰モデルを近似する方法と、 predict()関数を使用してモデルがこれまでに見たことのない新しい観測値の応答値を予測する方法を示しています。
例: R で lm() を使用した Predict() 関数の使用
R に、さまざまなバスケットボール選手に関する情報を含む次のデータ フレームがあるとします。
#create data frame df <- data. frame (minutes=c(5, 10, 13, 14, 20, 22, 26, 34, 38, 40), fouls=c(5, 5, 3, 4, 2, 1, 3, 2, 1, 1), points=c(6, 8, 8, 7, 14, 10, 22, 24, 28, 30)) #view data frame df minutes fouls points 1 5 5 6 2 10 5 8 3 13 3 8 4 14 4 7 5 20 2 14 6 22 1 10 7 26 3 22 8 34 2 24 9 38 1 28 10 40 1 30
プレー時間と合計ファウル数を使用して次の重線形回帰モデルを適用して、各プレーヤーが獲得した得点数を予測するとします。
ポイント = β 0 + β 1 (分) + β 2 (ファウル)
lm()関数を使用して、このモデルを適応させることができます。
#fit multiple linear regression model fit <- lm(points ~ minutes + fouls, data=df) #view summary of model summary(fit) Call: lm(formula = points ~ minutes + fouls, data = df) Residuals: Min 1Q Median 3Q Max -3.5241 -1.4782 0.5918 1.6073 2.0889 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) -11.8949 4.5375 -2.621 0.0343 * minutes 0.9774 0.1086 9.000 4.26e-05 *** fouls 2.1838 0.8398 2.600 0.0354 * --- Significant. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 Residual standard error: 2.148 on 7 degrees of freedom Multiple R-squared: 0.959, Adjusted R-squared: 0.9473 F-statistic: 81.93 on 2 and 7 DF, p-value: 1.392e-05
モデル結果の係数を使用して、近似回帰式を書くことができます。
ポイント = -11.8949 + 0.9774 (分) + 2.1838 (ファウル)
次に、 predict()関数を使用して、15 分間プレーし、合計 3 つのファウルを犯したプレーヤーが獲得するポイントを予測できます。
#define new observation
newdata = data. frame (minutes=15, fouls=3)
#use model to predict points value
predict(fit, newdata)
1
9.317731
モデルは、このプレーヤーが9.317731ポイントを獲得すると予測します。
複数の新しい観測値を含むデータ フレームがある場合は、一度に複数の予測を行うこともできることに注意してください。
たとえば、次のコードは、適合回帰モデルを使用して 3 人のプレーヤーのポイント値を予測する方法を示しています。
#define new data frame of three cars
newdata = data. frame (minutes=c(15, 20, 25),
fouls=c(3, 2, 1))
#view data frame
newdata
minutes fouls
1 15 3
2 20 2
3 25 1
#use model to predict points for all three players
predict(model, newdata)
1 2 3
9.317731 12.021032 14.724334
結果を解釈する方法は次のとおりです。
- 15 分間プレイし、ファウルが 3 つあった場合のプレーヤーの予想得点数は9.32です。
- 20 分を経過し、2 ファウルを犯した場合のプレーヤーの予想得点数は12.02です。
- 25 分プレイし、ファウル 1 つを記録した場合のプレーヤーの予想得点は14.72です。
detect() 使用上の注意
新しいデータ フレームの列名は、モデルの作成に使用されたデータ フレームの列名と正確に一致する必要があります。
前の例では、モデルの作成に使用したデータ フレームに、予測変数の次の列名が含まれていたことに注意してください。
- 分
- 間違い
そのため、newdata という新しいデータ フレームを作成するときは、列にも名前を付けるようにしました。
- 分
- 間違い
列名が一致しない場合は、次のエラー メッセージが表示されます。
Error in eval(predvars, data, env)
detect()関数を使用するときは、このことに留意してください。
追加リソース
次のチュートリアルでは、R で他の一般的なタスクを実行する方法について説明します。