Lựa chọn giữa LM và GLM cho biến phản hồi chuyển đổi log


55

Tôi đang cố gắng tìm hiểu triết lý đằng sau bằng cách sử dụng Mô hình tuyến tính tổng quát (GLM) so với Mô hình tuyến tính (LM). Tôi đã tạo một tập dữ liệu mẫu dưới đây:

log(y)=x+ε

Ví dụ không có lỗi là một hàm của độ lớn của y , vì vậy tôi sẽ giả định rằng một mô hình tuyến tính của log-chuyển y sẽ là tốt nhất. Trong ví dụ dưới đây, đây thực sự là trường hợp (tôi nghĩ) - vì AIC của LM trên dữ liệu chuyển đổi nhật ký là thấp nhất. AIC của GLM phân phối Gamma với chức năng liên kết nhật ký có tổng bình phương (SS) thấp hơn, nhưng mức độ tự do bổ sung dẫn đến AIC cao hơn một chút. Tôi đã ngạc nhiên rằng AIC phân phối Gaussian cao hơn rất nhiều (mặc dù SS là thấp nhất trong các mô hình).εy

Tôi hy vọng sẽ nhận được một số lời khuyên về việc khi nào nên tiếp cận các mô hình GLM - tức là có điều gì tôi nên tìm kiếm trong mô hình LM phù hợp với phần dư của tôi để nói với tôi rằng phân phối khác phù hợp hơn không? Ngoài ra, làm thế nào nên tiến hành trong việc lựa chọn một gia đình phân phối thích hợp.

Rất cám ơn trước sự giúp đỡ của bạn.

[EDIT]: Bây giờ tôi đã điều chỉnh số liệu thống kê tóm tắt để SS của mô hình tuyến tính được chuyển đổi nhật ký có thể so sánh với các mô hình GLM có chức năng liên kết nhật ký. Một biểu đồ thống kê hiện được hiển thị.

Thí dụ

set.seed(1111)
n <- 1000
y <- rnorm(n, mean=0, sd=1)
y <- exp(y)
hist(y, n=20)
hist(log(y), n=20)

x <- log(y) - rnorm(n, mean=0, sd=1)
hist(x, n=20)

df  <- data.frame(y=y, x=x)
df2 <- data.frame(x=seq(from=min(df$x), to=max(df$x),,100))


#models
mod.name <- "LM"
assign(mod.name, lm(y ~ x, df))
summary(get(mod.name))
plot(y ~ x, df)
lines(predict(get(mod.name), newdata=df2) ~ df2$x, col=2)

mod.name <- "LOG.LM"
assign(mod.name, lm(log(y) ~ x, df))
summary(get(mod.name))
plot(y ~ x, df)
lines(exp(predict(get(mod.name), newdata=df2)) ~ df2$x, col=2)

mod.name <- "LOG.GAUSS.GLM"
assign(mod.name, glm(y ~ x, df, family=gaussian(link="log")))
summary(get(mod.name))
plot(y ~ x, df)
lines(predict(get(mod.name), newdata=df2, type="response") ~ df2$x, col=2)

mod.name <- "LOG.GAMMA.GLM"
assign(mod.name, glm(y ~ x, df, family=Gamma(link="log")))
summary(get(mod.name))
plot(y ~ x, df)
lines(predict(get(mod.name), newdata=df2, type="response") ~ df2$x, col=2)

#Results
model.names <- list("LM", "LOG.LM", "LOG.GAUSS.GLM", "LOG.GAMMA.GLM")

plot(y ~ x, df, log="y", pch=".", cex=3, col=8)
lines(predict(LM, newdata=df2) ~ df2$x, col=1, lwd=2)
lines(exp(predict(LOG.LM, newdata=df2)) ~ df2$x, col=2, lwd=2)
lines(predict(LOG.GAUSS.GLM, newdata=df2, type="response") ~ df2$x, col=3, lwd=2)
lines(predict(LOG.GAMMA.GLM, newdata=df2, type="response") ~ df2$x, col=4, lwd=2)
legend("topleft", legend=model.names, col=1:4, lwd=2, bty="n") 

res.AIC <- as.matrix(
    data.frame(
        LM=AIC(LM),
        LOG.LM=AIC(LOG.LM),
        LOG.GAUSS.GLM=AIC(LOG.GAUSS.GLM),
        LOG.GAMMA.GLM=AIC(LOG.GAMMA.GLM)
    )
)

res.SS <- as.matrix(
    data.frame(
        LM=sum((predict(LM)-y)^2),
        LOG.LM=sum((exp(predict(LOG.LM))-y)^2),
        LOG.GAUSS.GLM=sum((predict(LOG.GAUSS.GLM, type="response")-y)^2),
        LOG.GAMMA.GLM=sum((predict(LOG.GAMMA.GLM, type="response")-y)^2)
    )
)

res.RMS <- as.matrix(
    data.frame(
        LM=sqrt(mean((predict(LM)-y)^2)),
        LOG.LM=sqrt(mean((exp(predict(LOG.LM))-y)^2)),
        LOG.GAUSS.GLM=sqrt(mean((predict(LOG.GAUSS.GLM, type="response")-y)^2)),
        LOG.GAMMA.GLM=sqrt(mean((predict(LOG.GAMMA.GLM, type="response")-y)^2))
    )
)

png("stats.png", height=7, width=10, units="in", res=300)
#x11(height=7, width=10)
par(mar=c(10,5,2,1), mfcol=c(1,3), cex=1, ps=12)
barplot(res.AIC, main="AIC", las=2)
barplot(res.SS, main="SS", las=2)
barplot(res.RMS, main="RMS", las=2)
dev.off()

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây


exp(Xbeta^)y1/2×sigma2

1
Một mô hình khác, mà R không cung cấp một gia đình, là một phân phối hợp lý. SAS sẽ phù hợp với điều đó, tôi không biết tại sao R glm không. Một số gợi ý gói R gamlss cho tgat, nhưng nó không bao giờ hoạt động dễ hiểu đối với tôi. Có lẽ bạn sẽ gặp may mắn hơn.
pauljohn32

Câu trả lời:


23

Nỗ lực tốt để suy nghĩ thông qua vấn đề này. Đây là một câu trả lời không đầy đủ, nhưng một số khởi đầu cho các bước tiếp theo.

Đầu tiên, điểm AIC - dựa trên khả năng - ở các thang đo khác nhau do các phân phối và chức năng liên kết khác nhau, do đó không thể so sánh được. Tổng bình phương và tổng bình phương trung bình của bạn đã được tính theo tỷ lệ ban đầu và do đó có cùng tỷ lệ, vì vậy có thể so sánh được, mặc dù đây có phải là một tiêu chí tốt để lựa chọn mô hình hay không là một câu hỏi khác (có thể hoặc không - tìm kiếm các tài liệu lưu trữ được xác thực chéo về lựa chọn mô hình cho một số thảo luận tốt về điều này).

Đối với câu hỏi chung hơn của bạn, một cách tốt để tập trung vào vấn đề là xem xét sự khác biệt giữa LOG.LM (mô hình tuyến tính của bạn với phản hồi là log (y)); và LOG.GAUSS.GLM, glm với phản hồi là y và chức năng liên kết nhật ký. Trong trường hợp đầu tiên, mô hình bạn phù hợp là:

log(y)=Xβ+ϵ

và trong trường hợp glm (), đó là:

log(y+ϵ)=Xβ

ϵN(0,σ2)


3
ϵ

4
E(Y)=g1(Xβ)g(E(Y))=XβE(Y)

Tôi thấy điều này rất hữu ích: christoph-scherber.de/content/PDF%20Files/iêu
Aditya

16

E[ln(Y|x)]ln([E(Y|X])

Về gia đình phân phối theo tôi là một câu hỏi về phương sai và mối quan hệ của nó với giá trị trung bình. Ví dụ trong một gia đình gaussian chúng ta có phương sai không đổi. Trong một họ gamma, chúng ta có phương sai là một hàm bậc hai của giá trị trung bình. Vẽ phần dư của bạn so với giá trị được trang bị và xem chúng như thế nào.


1
+1 cho thực sự liên quan đến câu hỏi làm thế nào để chọn đúng gia đình (và tôi muốn nói có chỗ cho một số chi tiết hơn ở đây)
etov

7

Rlog(y)=x+εx=log(y)+εxy

ly = log(y)
REVERSE.REGRESSION = lm(x~ly)
summary(REVERSE.REGRESSION)
# Call:
# lm(formula = x ~ ly)
# 
# Residuals:
#      Min       1Q   Median       3Q      Max 
# -2.93996 -0.64547 -0.01351  0.63133  2.92991 
# 
# Coefficients:
#             Estimate Std. Error t value Pr(>|t|)    
# (Intercept)  0.01563    0.03113   0.502    0.616    
# ly           1.01519    0.03138  32.350   <2e-16 ***
# ---
# Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
# 
# Residual standard error: 0.984 on 998 degrees of freedom
# Multiple R-squared:  0.5119,    Adjusted R-squared:  0.5114 
# F-statistic:  1047 on 1 and 998 DF,  p-value: < 2.2e-16

Số liệu cho mô hình này (như AIC) sẽ không thể so sánh với các mô hình của bạn. Tuy nhiên, chúng tôi biết rằng đây là mô hình phù hợp dựa trên quy trình tạo dữ liệu và lưu ý rằng các hệ số ước tính là đúng trên mục tiêu.


Cám ơn bạn đã góp ý. Tôi thừa nhận, dữ liệu ví dụ có thể tốt hơn, nhưng tôi tin rằng nó là chính xác trong cách nó tạo ra lỗi. Trong ví dụ, không có đánh chặn và độ dốc là 1. Nếu bạn quay lại đường thẳng x = log(y) - rnorm(n, mean=0, sd=1), bạn nhận được log (y) = x + rnorm (n, mean = 0, sd = 1). Nếu bình luận của @ whuber đã sinh ra câu trả lời của bạn (tôi tin là có), thì tôi tin rằng anh ta không đề cập đến việc tạo dữ liệu, mà là công thức mô hình GLM của @peterellis.
Marc trong hộp

0

Sự lựa chọn dựa trên giả thuyết của bạn về biến của bạn.

Var(XtE(Xt)=constant

phân phối gamma dựa trên

Var(Xt)E(Xt)=constant

Việc chuyển đổi nhật ký dựa trên giả thuyết rằng,

Var(Xt=E(Xt)σ

Theo cách này,

Xt=Xt=E(Xt)XtE(Xt)=E(Xt)XtE(Xt)+E(Xt)E(Xt)=E(Xt)(1+XtE(Xt)E(Xt))

Dựa trên quy tắc Taylor,

log(1+x)x

Chúng tôi nhận được

log(1+XtE(Xt)E(Xt))=XtE(Xt)E(Xt)

Do vậy,

Xt=E(Xt)(1+XtE(Xt)E(Xt))logXt=logE(Xt)+log(1+XtE(Xt)E(Xt))=logE(Xt)+XtE(Xt)E(Xt)E(logXt)logE(Xt)

Tuy nhiên, phân phối gamma dựa trên giả thuyết rằng,

YΓ(α,β)

{E(yi)=αiβiVar(yi)=αiβi2Var(yi)E(yi)=βi
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.