Cụ thể, tôi muốn biết nếu có sự khác biệt giữa lm(y ~ x1 + x2)
và glm(y ~ x1 + x2, family=gaussian)
. Tôi nghĩ rằng trường hợp cụ thể này của glm bằng lm. Tôi có lầm không?
Cụ thể, tôi muốn biết nếu có sự khác biệt giữa lm(y ~ x1 + x2)
và glm(y ~ x1 + x2, family=gaussian)
. Tôi nghĩ rằng trường hợp cụ thể này của glm bằng lm. Tôi có lầm không?
Câu trả lời:
Mặc dù đối với dạng cụ thể của mô hình được đề cập trong phần thân của câu hỏi (ví dụ lm(y ~ x1 + x2)
so với glm(y ~ x1 + x2, family=gaussian)
), hồi quy và GLM là cùng một mô hình, câu hỏi tiêu đề hỏi một cái gì đó hơi chung chung hơn:
Có sự khác biệt nào giữa lm và glm đối với họ gaussian của glm không?
Câu trả lời là "Có!".
Lý do chúng có thể khác nhau là vì bạn cũng có thể chỉ định chức năng liên kết trong GLM. Điều này cho phép bạn khớp các dạng quan hệ phi tuyến cụ thể giữa (hay đúng hơn là trung bình có điều kiện của nó) và các biến ; mặc dù bạn cũng có thể làm điều này , không cần giá trị bắt đầu, đôi khi sự hội tụ tốt hơn (cú pháp cũng dễ hơn một chút).nls
So sánh, ví dụ, các mô hình này (bạn có R vì vậy tôi giả sử bạn có thể tự chạy các mô hình này):
x1=c(56.1, 26.8, 23.9, 46.8, 34.8, 42.1, 22.9, 55.5, 56.1, 46.9, 26.7, 33.9,
37.0, 57.6, 27.2, 25.7, 37.0, 44.4, 44.7, 67.2, 48.7, 20.4, 45.2, 22.4, 23.2,
39.9, 51.3, 24.1, 56.3, 58.9, 62.2, 37.7, 36.0, 63.9, 62.5, 44.1, 46.9, 45.4,
23.7, 36.5, 56.1, 69.6, 40.3, 26.2, 67.1, 33.8, 29.9, 25.7, 40.0, 27.5)
x2=c(12.29, 11.42, 13.59, 8.64, 12.77, 9.9, 13.2, 7.34, 10.67, 18.8, 9.84, 16.72,
10.32, 13.67, 7.65, 9.44, 14.52, 8.24, 14.14, 17.2, 16.21, 6.01, 14.23, 15.63,
10.83, 13.39, 10.5, 10.01, 13.56, 11.26, 4.8, 9.59, 11.87, 11, 12.02, 10.9, 9.5,
10.63, 19.03, 16.71, 15.11, 7.22, 12.6, 15.35, 8.77, 9.81, 9.49, 15.82, 10.94, 6.53)
y = c(1.54, 0.81, 1.39, 1.09, 1.3, 1.16, 0.95, 1.29, 1.35, 1.86, 1.1, 0.96,
1.03, 1.8, 0.7, 0.88, 1.24, 0.94, 1.41, 2.13, 1.63, 0.78, 1.55, 1.5, 0.96,
1.21, 1.4, 0.66, 1.55, 1.37, 1.19, 0.88, 0.97, 1.56, 1.51, 1.09, 1.23, 1.2,
1.62, 1.52, 1.64, 1.77, 0.97, 1.12, 1.48, 0.83, 1.06, 1.1, 1.21, 0.75)
lm(y ~ x1 + x2)
glm(y ~ x1 + x2, family=gaussian)
glm(y ~ x1 + x2, family=gaussian(link="log"))
nls(y ~ exp(b0+b1*x1+b2*x2), start=list(b0=-1,b1=0.01,b2=0.1))
Lưu ý rằng cặp đầu tiên là cùng một mô hình ( ) và cặp thứ hai là cùng một mô hình ( và sự phù hợp về cơ bản là giống nhau trong mỗi cặp.
Vì vậy - liên quan đến câu hỏi tiêu đề - bạn có thể phù hợp với nhiều mô hình Gaussian rộng hơn đáng kể với GLM so với hồi quy.
MASS::rlm
Câu trả lời ngắn gọn, chúng giống hệt nhau:
# Simulate data:
set.seed(42)
n <- 1000
x1 <- rnorm(n, mean = 150, sd = 3)
x2 <- rnorm(n, mean = 100, sd = 2)
u <- rnorm(n)
y <- 5 + 2*x1 + 3*x2 + u
# Estimate with OLS:
reg1 <- lm(y ~ x1 + x2)
# Estimate with GLS
reg2 <- glm(y ~ x1 + x2, family=gaussian)
# Compare:
require(texreg)
screenreg(l = list(reg1, reg2))
=========================================
Model 1 Model 2
-----------------------------------------
(Intercept) 6.37 ** 6.37 **
(2.20) (2.20)
x1 1.99 *** 1.99 ***
(0.01) (0.01)
x2 3.00 *** 3.00 ***
(0.02) (0.02)
-----------------------------------------
R^2 0.99
Adj. R^2 0.99
Num. obs. 1000 1000
RMSE 1.00
AIC 2837.66
BIC 2857.29
Log Likelihood -1414.83
Deviance 991.82
=========================================
*** p < 0.001, ** p < 0.01, * p < 0.05
Câu trả lời dài hơn; Hàm glm phù hợp với mô hình của MLE, tuy nhiên, do giả định bạn đã thực hiện về chức năng liên kết (trong trường hợp này là bình thường), bạn kết thúc với các ước tính OLS.
glm
là glm(y ~ x1 + x2, family = gaussian(link = "identity"))
.
Từ câu trả lời của @ Repmat, tóm tắt mô hình là như nhau, nhưng các hệ số hồi quy của CI confint
hơi khác nhau giữa lm
và glm
.
> confint(reg1, level=0.95)
2.5 % 97.5 %
(Intercept) 2.474742 11.526174
x1 1.971466 2.014002
x2 2.958422 3.023291
> confint(reg2, level=0.95)
Waiting for profiling to be done...
2.5 % 97.5 %
(Intercept) 2.480236 11.520680
x1 1.971492 2.013976
x2 2.958461 3.023251
phân phối được sử dụng trong lm
khi phân phối bình thường được sử dụng glm
khi xây dựng các khoảng.
> beta <- summary(reg1)$coefficients[, 1]
> beta_se <- summary(reg1)$coefficients[, 2]
> cbind(`2.5%` = beta - qt(0.975, n - 3) * beta_se,
`97.5%` = beta + qt(0.975, n - 3) * beta_se) #t
2.5% 97.5%
(Intercept) 2.474742 11.526174
x1 1.971466 2.014002
x2 2.958422 3.023291
> cbind(`2.5%` = beta - qnorm(0.975)*beta_se,
`97.5%` = beta + qnorm(0.975)*beta_se) #normal
2.5% 97.5%
(Intercept) 2.480236 11.520680
x1 1.971492 2.013976
x2 2.958461 3.023251