로그 변환 된 응답 변수에 대해 LM과 GLM 중에서 선택


55

GLM (Generalized Linear Model)과 LM (Linear Model)을 사용하는 철학을 이해하려고합니다. 아래에 예제 데이터 세트를 만들었습니다.

log(y)=x+ε

이 예제에는 크기의 함수로 오류가 없으므로 로그 변환 된 y의 선형 모델이 가장 좋다고 가정합니다. 아래 예제에서는 로그 변환 된 데이터에 대한 LM의 AIC가 가장 낮기 때문에 실제로 그런 경우입니다. 로그 링크 기능이있는 감마 분포 GLM의 AIC는 더 작은 제곱합 (SS)을 갖지만 추가 자유도는 AIC가 약간 더 높습니다. SS가 모델 중에서 가장 낮음에도 불구하고 가우스 분포 AIC가 훨씬 높다는 것에 놀랐습니다.yεy

GLM 모델에 접근해야하는 시점에 대한 조언을 얻고 자합니다. 즉, 다른 분포가 더 적합하다는 것을 알리기 위해 LM 모델에 적합한 잔차를 찾아야합니까? 또한 적절한 배포 제품군을 선택하려면 어떻게해야합니까?

당신의 도움에 미리 감사드립니다.

[편집] : 이제 로그 변환 선형 모델의 SS가 로그 링크 기능을 사용하는 GLM 모델과 비교할 수 있도록 요약 통계를 조정했습니다. 통계 그래프가 표시됩니다.

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()

여기에 이미지 설명을 입력하십시오

여기에 이미지 설명을 입력하십시오


log.lm의 예상 값에 대한 공식이 올바르지 않습니다. 는 의 중앙값을 제공합니다 . 예상 값을 얻으려면 지수 에 를 추가하십시오exp(Xbeta^)y1/2×sigma2
pauljohn32

1
R이 패밀리를 제공하지 않는 다른 모델은 로그 정규 분포입니다. SAS는 R glm이 왜 그런지 잘 모르겠습니다. 어떤 사람들은 tgat 용 R 패키지 gamlss를 제안하지만 결코 나를 위해 이해할 수 없습니다. 아마도 당신은 더 나은 행운을 가질 것입니다.
pauljohn32

답변:


23

이 문제를 통해 생각하기위한 좋은 노력. 다음은 불완전한 답변이지만 다음 단계를위한 출발점입니다.

첫째, 가능성에 근거한 AIC 점수는 분포와 연결 함수가 다르기 때문에 규모가 다르므로 비교할 수 없습니다. 제곱합과 평균 제곱합은 원래 척도로 계산되었으므로 동일한 척도이므로 모델 선택에 대한 좋은 기준인지 여부는 다른 질문입니다 (그렇거나 그렇지 않을 수 있음). -이것에 대한 좋은 논의를 위해 모델 선택에서 교차 검증 된 아카이브를 검색하십시오).

보다 일반적인 질문의 경우 문제에 초점을 맞추는 좋은 방법은 LOG.LM (log (y)와 같은 선형 모델)의 차이점을 고려하는 것입니다. LOG.GAUSS.GLM, 응답이 y이고 로그 링크 기능이있는 glm. 첫 번째 경우 피팅 할 모델은 다음과 같습니다.

log(y)=Xβ+ϵ ;

glm () 경우는 다음과 같습니다.

log(y+ϵ)=Xβ

두 경우 모두 은 배포 됩니다.ϵN(0,σ2)


3
glm의 특성은 올바르게 보이지 않습니다. 왼쪽에는 임의 변수 있고 오른쪽에는 데이터와 매개 변수 만 있고 임의 변수는 없습니다. ϵ
whuber

4
내가 @whuber을 알고 퍼팅의 이상한 방법 만에서 온다 가된다 . 요점은 링크 함수가 돌고 있다는 것입니다.g ( E ( Y ) ) = X β의 E ( Y )E(Y)=g1(Xβ)g(E(Y))=XβE(Y)
Peter Ellis

나는 이것이 매우 유용하다는 것을 발견했다 : christoph-scherber.de/content/PDF%20Files/…
Aditya

16

보다 일반적인 방식으로 와 는 동일하지 않으며, GLM에 의한 분산 가정은 OLS보다 유연하며 특정 카운트 분산으로서의 모델링 상황은 고유 한 분포 패밀리를 사용하여 다를 수 있습니다.ln ( [ E ( Y | X ] )E[ln(Y|x)]ln([E(Y|X])

내 의견으로는 분포 패밀리에 대해 차이와 평균과의 관계에 대한 질문입니다. 예를 들어 가우시안 가족에서는 일정한 분산이 있습니다. 감마 패밀리에서 평균의 2 차 함수로 분산이 있습니다. 표준화 된 잔차 대 적합치 값을 플로팅하고 그 값을 확인하십시오.


1
실제로 (내가 좀 더 정교의 여지가 여기에있다라고 말하고 싶지만) 권리 가족을 선택하는 방법의 문제에 관한 +1
etov

7

불행히도 R코드는 인 예제로 이어지지 않습니다 . 대신 예는 입니다. 여기서 오류는 수직이 아닌 수평입니다. 그것들은 오류가 아니라 오류입니다 . 직관적으로, 이것이 차이를 가져서는 안되는 것처럼 보이지만 그렇지 않습니다. 여기에서 내 대답을 읽고 싶을 수도 있습니다. x의 y와 x의 y에 대한 선형 회귀의 차이점은 무엇입니까? 설정이 "올바른"모델의 문제를 복잡하게 만듭니다. 엄밀히 말하면 올바른 모델은 역 회귀입니다. log(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

이 모델의 지표 (예 : AIC)는 모델과 비교할 수 없습니다. 그러나 우리는 이것이 데이터 생성 프로세스를 기반으로 한 올바른 모델이라는 것을 알고 있으며 추정 계수가 목표에 적합하다는 것을 알 수 있습니다.


귀하의 의견에 감사드립니다. 예제 데이터가 더 좋았을 수도 있지만 오류가 발생하는 방식이 정확하다고 생각합니다. 이 예제에서는 절편이없고 기울기가 1입니다. 선을 돌면 x = log(y) - rnorm(n, mean=0, sd=1)log (y) = x + rnorm (n, mean = 0, sd = 1)이됩니다. @ whuber의 의견이 귀하의 답변을 얻은 경우 (그렇다고 생각합니다), 그는 데이터 생성이 아니라 @peterellis의 GLM 모델 공식을 참조한다고 생각합니다.
Marc in the box

0

선택은 변수에 대한 가설을 기반으로합니다.

로그 변환은

Var(XtE(Xt)=constant

감마 분포는

Var(Xt)E(Xt)=constant

로그 변환은 다음과 같은 가설에 근거합니다.

Var(Xt=E(Xt)σ

이런 식으로,

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

테일러 규칙에 따라

log(1+x)x

우리는 얻는다

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

그러므로,

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)

그러나 감마 분포는 다음과 같은 가설에 근거합니다.

YΓ(α,β)

{E(yi)=αiβiVar(yi)=αiβi2Var(yi)E(yi)=βi
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.