Bagaimana cara menerjemahkan hasil dari lm () ke persamaan?


29

Kita dapat menggunakan lm()untuk memprediksi nilai, tetapi kita masih membutuhkan persamaan rumus hasil dalam beberapa kasus. Misalnya, tambahkan persamaan ke plot.


2
Bisakah Anda ulangi pertanyaan Anda atau tambahkan beberapa detail? Saya cukup akrab dengan R, lmdan model linear lebih umum, tetapi sama sekali tidak jelas apa, tepatnya, yang Anda inginkan. Bisakah Anda memberi contoh atau sesuatu untuk diklarifikasi? Apakah ini untuk beberapa subjek?
Glen_b -Reinstate Monica

2
Saya kira Anda ingin koefisien rumus regresi linier. Coba panggil objek yang coef()pas lm, seperti pada:mod <- lm(y ~ x); coef(mod)
Jake Westfall

Jika Anda mengetiknya lm(y~x)$callmemberitahu Anda rumusnya y ~ x. Jika Anda bermaksud sesuatu yang berbeda dari itu, Anda harus lebih spesifik.
Glen_b -Reinstate Monica


Jawaban:


30

Pertimbangkan contoh ini:

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 

Pertanyaannya, saya kira, adalah bagaimana mencari persamaan regresi dari output ringkasan R. Secara aljabar, persamaan untuk model regresi sederhana adalah: Kita hanya perlu memetakan output untuk persyaratan ini. Yakni:

y^saya=β^0+β^1xsaya+ε^sayadimana εN(0, σ^2)
summary.lm()

  • β^0 adalah Estimatenilai di (Intercept)baris (khusus, -0.00761)
  • β^1 adalah Estimatenilai di xbaris (khusus, 0.09156)
  • σ^ adalah Residual standard error(khusus, 0.8155)

Memasukkan ini dalam hasil di atas: Untuk lebih teliti gambaran umum, Anda mungkin ingin membaca utas ini: Interpretasi dari output R's lm () .

y^saya=-0,00761 + 0,09156xsaya + ε^sayadimana εN(0, 0,81552)


2
Mengingat OP menyebutkan keinginan untuk menempatkan persamaan pada grafik, saya telah merenungkan apakah mereka benar-benar ingin fungsi untuk mengambil output lmdan menghasilkan ekspresi karakter seperti " " cocok untuk suatu merencanakan tugas (karenanya saya berulang kali menelepon untuk mengklarifikasi apa yang mereka inginkan - yang belum dilakukan, sayangnya). y^=-0,00761+0,09156x
Glen_b -Reinstate Monica

6

Jika yang Anda inginkan adalah memprediksi skor menggunakan persamaan regresi yang dihasilkan, Anda dapat membuat persamaan dengan tangan dengan mengetik summary(fit)(jika analisis regresi Anda disimpan dalam variabel yang disebut fit, misalnya), dan melihat perkiraan untuk setiap koefisien yang termasuk dalam Anda model.

Misalnya, jika Anda memiliki regresi sederhana dari tipe , dan Anda mendapatkan perkiraan intersep ( ) dari +0.5 dan perkiraan efek x pada y ( ) dari +1.6, Anda akan memprediksi skor y seseorang dari skor x mereka dengan menghitung: .β 0 β 1 y = 0,5 + 1,6 xy=β0+β1x+ϵβ0β1y^=0,5+1.6x

Namun, ini adalah rute yang sulit. R memiliki fungsi bawaan, predict()yang dapat Anda gunakan untuk secara otomatis menghitung nilai prediksi yang diberikan model untuk dataset apa pun. Misalnya:, predict(fit, newdata=data)jika x skor yang ingin Anda gunakan untuk memprediksi skor y disimpan dalam variabel data. (Perhatikan bahwa untuk melihat skor prediksi untuk sampel di mana regresi Anda dilakukan, Anda bisa mengetik fit$fittedatau fitted(fit); ini akan memberi Anda nilai yang diprediksi, alias cocok, nilai.)


0

Jika Anda ingin menunjukkan persamaan, suka memotong / menempelkan ke dokumen, tetapi tidak ingin repot dengan menyatukan seluruh persamaan:

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"

0

Membangun pada jawaban keithpjolley, ini menggantikan tanda '+' yang digunakan dalam pemisah dengan tanda aktual dari co-efisien.

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

menghasilkan hasilnya

[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"
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.