lm()
値を予測するために使用できますが、場合によっては結果の式の方程式が必要です。たとえば、プロットに方程式を追加します。
coef()
フィット上lm
のように、オブジェクト:mod <- lm(y ~ x); coef(mod)
lm(y~x)$call
すると、式がであることがわかりますy ~ x
。それとは異なるものを意味する場合は、より具体的にする必要があります。
lm()
値を予測するために使用できますが、場合によっては結果の式の方程式が必要です。たとえば、プロットに方程式を追加します。
coef()
フィット上lm
のように、オブジェクト:mod <- lm(y ~ x); coef(mod)
lm(y~x)$call
すると、式がであることがわかりますy ~ x
。それとは異なるものを意味する場合は、より具体的にする必要があります。
回答:
この例を考えてみましょう:
set.seed(5) # this line will allow you to run these commands on your
# own computer & get *exactly* the same output
x = rnorm(50)
y = rnorm(50)
fit = lm(y~x)
summary(fit)
# Call:
# lm(formula = y ~ x)
#
# Residuals:
# Min 1Q Median 3Q Max
# -2.04003 -0.43414 -0.04609 0.50807 2.48728
#
# Coefficients:
# Estimate Std. Error t value Pr(>|t|)
# (Intercept) -0.00761 0.11554 -0.066 0.948
# x 0.09156 0.10901 0.840 0.405
#
# Residual standard error: 0.8155 on 48 degrees of freedom
# Multiple R-squared: 0.01449, Adjusted R-squared: -0.006046
# F-statistic: 0.7055 on 1 and 48 DF, p-value: 0.4051
問題は、私が推測しているように、Rの要約出力から回帰方程式を計算する方法です。代数的に、単回帰モデルの方程式は、Y、I = β 0 + β 1 X I + ε I
summary.lm()
これらの条件に出力します。機知に:
Estimate
(Intercept)
-0.00761
Estimate
x
0.09156
Residual standard error
0.8155
結果の回帰式を使用してスコアを予測するsummary(fit)
場合は、(fit
たとえば、回帰分析がという名前の変数に格納されている場合)入力し、含まれる各係数の推定値を見て、手動で式を作成できますモデル。
。
ただし、これは難しいルートです。Rには組み込み関数がpredict()
あります。これを使用して、任意のデータセットのモデルが与えられた場合に予測値を自動的に計算できます。例:predict(fit, newdata=data)
、yスコアの予測に使用するxスコアが変数に格納されている場合data
。(回帰が実行されたサンプルの予測スコアを表示するには、単にfit$fitted
またはを入力することができfitted(fit)
ます。これらは予測値、つまり近似値を提供します。)
ドキュメントに切り取り/貼り付けを行いたいが、方程式全体をまとめて面倒なことをしたくない場合は、方程式を表示します。
R> library(MASS)
R> crime.lm <- lm(y~., UScrime)
R> cc <- crime.lm$coefficients
R> (eqn <- paste("Y =", paste(round(cc[1],2), paste(round(cc[-1],2), names(cc[-1]), sep=" * ", collapse=" + "), sep=" + "), "+ e"))
[1] "Y = -5984.29 + 8.78 * M + -3.8 * So + 18.83 * Ed + 19.28 * Po1 + -10.94 * Po2 + -0.66 * LF + 1.74 * M.F + -0.73 * Pop + 0.42 * NW + -5.83 * U1 + 16.78 * U2 + 0.96 * GDP + 7.07 * Ineq + -4855.27 * Prob + -3.48 * Time + e"
keithpjolleyの答えに基づいて、これは、セパレータで使用される「+」記号を係数の実際の記号に置き換えます。
modelcrime <- lm(y~., UScrime)
modelcrime_coeff <- modelcrime$coefficients
modelcrime_coeff_sign <- sign(modelcrime_coeff)
modelcrime_coeff_prefix <- case_when(modelcrime_coeff_sign == -1 ~ " - ",
modelcrime_coeff_sign == 1 ~ " + ",
modelcrime_coeff_sign == 0 ~ " + ")
modelcrime_eqn <- paste("y =", paste(if_else(modelcrime_coeff[1]<0, "- ", ""),
abs(round(modelcrime_coeff[1],3)),
paste(modelcrime_coeff_prefix[-1],
abs(round(modelcrime_coeff[-1],3)),
" * ",
names(modelcrime_coeff[-1]),
sep = "", collapse = ""),
sep = ""))
modelcrime_eqn
結果を生成します
[1] "y = - 5984.288 + 8.783 * M - 3.803 * So + 18.832 * Ed + 19.28 * Po1 - 10.942 * Po2 - 0.664 * LF + 1.741 * M.F - 0.733 * Pop + 0.42 * NW - 5.827 * U1 + 16.78 * U2 + 0.962 * GDP + 7.067 * Ineq - 4855.266 * Prob - 3.479 * Time"
lm
と線形モデルにかなり精通していますが、あなたが何を望んでいるのか正確にはわかりません。例や明確にするために何かを与えることができますか?これはいくつかの主題のためですか?