Làm thế nào để dịch kết quả từ lm () sang phương trình?


29

Chúng ta có thể sử dụng lm()để dự đoán một giá trị, nhưng chúng ta vẫn cần phương trình của công thức kết quả trong một số trường hợp. Ví dụ, thêm phương trình vào các ô.


2
Bạn có thể vui lòng viết lại câu hỏi của bạn hoặc thêm một số chi tiết? Tôi khá quen thuộc với R, lmvà các mô hình tuyến tính nói chung hơn, nhưng không rõ ràng chính xác những gì bạn muốn. Bạn có thể đưa ra một ví dụ hoặc một cái gì đó để làm rõ? Đây có phải là cho một số chủ đề?
Glen_b -Reinstate Monica

2
Tôi đoán bạn muốn các hệ số của công thức hồi quy tuyến tính. Hãy thử gọi đối tượng coef()được trang bị lm, như trong:mod <- lm(y ~ x); coef(mod)
Jake Westfall

Nếu bạn gõ lm(y~x)$callnó sẽ cho bạn biết công thức y ~ x. Nếu bạn có ý gì khác với điều đó, bạn cần phải cụ thể hơn.
Glen_b -Reinstate Monica


Câu trả lời:


30

Xem xét ví dụ này:

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 

Câu hỏi, tôi đoán, là làm thế nào để tìm ra phương trình hồi quy từ đầu ra tóm tắt của R. Theo đại số, phương trình của mô hình hồi quy đơn giản là: Chúng ta chỉ cần ánh xạ đầu ra theo các điều khoản này. Để dí dỏm:

y^tôi= =β^0+β^1xtôi+ε^tôiỞ đâu ε~N(0, σ^2)
summary.lm()

  • β^0Estimategiá trị trong (Intercept)hàng (cụ thể, -0.00761)
  • β^1Estimategiá trị trong xhàng (cụ thể, 0.09156)
  • σ^Residual standard error(cụ thể, 0.8155)

Cắm này trong trên lãi suất: Đối với một thấu đáo hơn tổng quan, bạn có thể muốn đọc chủ đề này: Giải thích từ lm R () của đầu ra .

y^tôi= =-0,00761 + 0,09156xtôi + ε^tôiỞ đâu ε~N(0, 0,81552)


2
Do OP đề cập đến mong muốn đưa phương trình vào đồ thị, tôi đã suy nghĩ xem liệu họ có thực sự muốn một hàm lấy đầu ra lmvà tạo ra một biểu thức ký tự như " " phù hợp với điều đó không nhiệm vụ âm mưu (do đó, cuộc gọi lặp đi lặp lại của tôi để làm rõ những gì họ muốn - điều không may đã được thực hiện), thật không may). y^= =-0,00761+0,09156x
Glen_b -Reinstate Monica

6

Nếu điều bạn muốn là dự đoán điểm bằng phương trình hồi quy kết quả, bạn có thể xây dựng phương trình bằng tay bằng cách nhập summary(fit)( fitví dụ: phân tích hồi quy của bạn được lưu trữ trong một biến được gọi là ) và xem xét các ước tính cho từng hệ số có trong mô hình.

Ví dụ: nếu bạn có hồi quy đơn giản loại và bạn có ước tính về mức chặn ( ) là và ước tính về tác động của x đối với y ( ) trong +1.6, bạn sẽ dự đoán điểm y của một cá nhân từ điểm x của họ bằng cách tính toán: .y= =β0+β1x+εβ0β1y^= =0,5+1.6x

Tuy nhiên, đây là con đường khó khăn. R có một hàm dựng sẵn predict(), mà bạn có thể sử dụng để tự động tính toán các giá trị dự đoán được đưa ra một mô hình cho bất kỳ tập dữ liệu nào. Ví dụ : predict(fit, newdata=data), nếu điểm x bạn muốn sử dụng để dự đoán điểm y được lưu trong biến data. (Lưu ý rằng để xem điểm số dự đoán cho mẫu mà hồi quy của bạn được thực hiện, bạn có thể chỉ cần nhập fit$fittedhoặc fitted(fit); chúng sẽ cung cấp cho bạn các giá trị được dự đoán, còn được trang bị.)


0

Nếu bạn muốn hiển thị phương trình, muốn cắt / dán vào tài liệu, nhưng không muốn làm phiền với việc đặt toàn bộ phương trình lại với nhau:

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

Dựa trên câu trả lời của keithpjcar, điều này thay thế các dấu '+' được sử dụng trong dải phân cách bằng dấu hiệu thực tế của hệ số hiệu quả.

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

tạo ra kết quả

[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"
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.