36.일반선형모델 - 포아송회귀분석.Rmd
0.02MB
36.일반선형모델---포아송회귀분석.html
1.95MB
35.통계데이터분석 - 일반선형모델 - 포아송회귀분석
2022-11-06
https://www.youtube.com/watch?v=-Za5MrWUohg&list=PLY0OaF78qqGAxKX91WuRigHpwBU0C2SB_&index=36
- 목표: 포아송회귀분석 이해
1. 포아송회귀분석 개요
- 포아송회기분석은 결과변수가 특정기간동안의 사건발생 횟수인 경우에 적용할 수 있음
- 1시간동안 걸려오는 상담전화수, 하루동안 발생하는 범죄횟수, 한 달동안 발생하는 교통사고횟수, 한해동안 일어나는 지진건수 등은 모두 포아송회귀분석으로 사건발생 횟수를 예측 가능
- 사건발생 횟수는 일반적으로 제한된 값을 가지며 음수일 수 없음
- 사건발생 횟수는 정규분포를 따르지 않기 때문에 표준적인 선형회귀분석으로 예측할 수는 없음
2. 포아송회귀모델
- 포아송회귀모델은 결과변수 y가 포아송분포를 따른다고 가정하며 아래 선형모델로 정의 됨
\[ln(\lambda) = \beta_0 + \beta_0x_2 + \dots + + \beta_mx_m\]
- 여기서 \(\lambda\)는 결과변수 y의 평균을 나타냄
- 결과변수 \(\lambda\)에 로그를 취한 \(ln(\lambda)\)는 예측변수들의 선형결합으로 나타낼 수 있음
- 포아송회귀모델을 일반선형모델 틀로 보면, 링크함수는 \(ln(\lambda\),) 결과변수 y의 확률분포는 포아송분포임
3. 포아송회기분석 수행 절차
- 분석대상 데이터(breslow.dat) 설명
- 여기서는 robust패키지 breslow.dat를 사용함
- breslow.dat데이터셋은 뇌전증환자의 치료제 투약 전 8주간의 발작일수와 투여 후 8주간의 발작횟수가 기록돼 있음
- 뇌전증 치료제가 투약 후 8주동안 발생하는 발작횟수에 미치는 영향을 포아송회귀분석으로 분석할 것임
library(robust)
data("breslow.dat")
str(breslow.dat)
## 'data.frame': 59 obs. of 12 variables:
## $ ID : int 104 106 107 114 116 118 123 126 130 135 ...
## $ Y1 : int 5 3 2 4 7 5 6 40 5 14 ...
## $ Y2 : int 3 5 4 4 18 2 4 20 6 13 ...
## $ Y3 : int 3 3 0 1 9 8 0 23 6 6 ...
## $ Y4 : int 3 3 5 4 21 7 2 12 5 0 ...
## $ Base : int 11 11 6 8 66 27 12 52 23 10 ...
## $ Age : int 31 30 25 36 22 29 31 42 37 28 ...
## $ Trt : Factor w/ 2 levels "placebo","progabide": 1 1 1 1 1 1 1 1 1 1 ...
## $ Ysum : int 14 14 11 13 55 22 12 95 22 33 ...
## $ sumY : int 14 14 11 13 55 22 12 95 22 33 ...
## $ Age10: num 3.1 3 2.5 3.6 2.2 2.9 3.1 4.2 3.7 2.8 ...
## $ Base4: num 2.75 2.75 1.5 2 16.5 6.75 3 13 5.75 2.5 ...
- breslow.dat데이터셋 변수 중 분석에 필요한 4개 변수만 추출한 별도 데이터셋으로 분석수행
seizure <- breslow.dat[c("Base", "Age", "Trt", "sumY")]
- 앞의 세 개 변수, Base·Age·Trt변수는 예측변수, 네번째 변수 sumY는 결과변수로서 사용함
- 변수설명
- 결과변수로서 사용할 sumY은 치료 시작 후 8주 동안의 발작횟수를 나타냄
- Base변수는 치료 시작 전 8주간의 발작횟수를 나타냄
- Age변수는 환자의 나이를 나타내고
- Trt변수는 치료제로서 2개의 범주를 가짐. placebo은 위약, progabide은 진약을 나타냄
- Base·Age·Trt 이 세 개의 예측변수가 결과변수인 sumY, 즉 치료 시작 후 8주 동안의 발작횟수에 미치는 영향을 포아송회귀분석으로 분석할 것임
- 먼저 결과변수와 예측변수에 요약통계량을 살펴볼 것임
summary(seizure)
## Base Age Trt sumY
## Min. : 6.00 Min. :18.00 placebo :28 Min. : 0.00
## 1st Qu.: 12.00 1st Qu.:23.00 progabide:31 1st Qu.: 11.50
## Median : 22.00 Median :28.00 Median : 16.00
## Mean : 31.22 Mean :28.34 Mean : 33.05
## 3rd Qu.: 41.00 3rd Qu.:32.00 3rd Qu.: 36.00
## Max. :151.00 Max. :42.00 Max. :302.00
- 발작횟수를 나타내는 Base변수와 sumY변수 요약통계량에서 중위수가 평균에 비해 모두 작음
- 중위수가 평균에 비해 작기 때문에 발작횟수는 오른쪽으로 꼬리가 긴 분포를 갖는 것으로 예상할 수 있음
- 히스토그램으로 그러한 분포를 갔는지 시각적으로 확인할 것임
hist(seizure$sumY, breaks = 20, col="cornflowerblue",
xlab="Seizure Count",
main="Distribution of Seizures")
- 결과
- 발작횟수는 실제 오른쪽으로 꼬리가 긴 편향된 분포를 가짐
- 이러한 오른쪽으로 꼬리가 긴 편향된 분포를 갖고 있기 때문에 결과변수가 정규분포를 따를 것을 요구하는 표준적인 선형회귀분석을 적용할 수 없음
- 이처럼 결과변수가 정규분포에서 요구하는 형태를 따르지 않을 때 일반선형모델 범주에 속하는 포아송 회귀분석은 좋은 대안이 될 수 있음
- 포아송회귀모델은 일반선형모델의 범주에 속하기 때문에 로지스틱회귀분석을 수행하는 glm()를 포아송회귀분석에서도 동일하게 이용할 수 있음
- glm() 함수 인수설명
- 1st: 결과변수와 예측변수 간의 관계를 포뮬러 형식으로 지정함
- data: 예측모델 개발에 사용할 데이터셋을 지정함
- family: 결과변수의 확률분포함수를 지정함. 여기서는 결과변수가 포아송분포를 따르는 것으로 가정하기 때문에 poisson함수를 지정함
- 분석결과는 summary()를 로 확인할 수 있음
3-1. 회귀모델 구축 + 회귀계수 유의성 검정
seizure.poisson <- glm(sumY ~ Base + Age + Trt,
data=seizure, family=poisson())
summary(seizure.poisson)
##
## Call:
## glm(formula = sumY ~ Base + Age + Trt, family = poisson(), data = seizure)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -6.0569 -2.0433 -0.9397 0.7929 11.0061
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 1.9488259 0.1356191 14.370 < 2e-16 ***
## Base 0.0226517 0.0005093 44.476 < 2e-16 ***
## Age 0.0227401 0.0040240 5.651 1.59e-08 ***
## Trtprogabide -0.1527009 0.0478051 -3.194 0.0014 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for poisson family taken to be 1)
##
## Null deviance: 2122.73 on 58 degrees of freedom
## Residual deviance: 559.44 on 55 degrees of freedom
## AIC: 850.71
##
## Number of Fisher Scoring iterations: 5
- 결과
- 포아송회귀분석의 결과로써 Estimate(회귀계수), Std. Error(표준오차), Pr(>|z|)(회귀계수의 유의성 검정결과가 출력됨)
- 여기서 위의 세 예측변수는 유의수준 0.05에서 모두 통계적으로 유의함
3-2. 회귀모델 유의성 검정
- 회귀모델 자체 유의성 검정은 출력 결과의 아랫부분, deviance를 이용해 할 수 있음
- deviance(이탈도) 설명
- deviance는 이탈도라고 번역해서 얘기하기도 함
- 이탈도는 예측모델의 적합도 정도를 나타낸 지표로, 엄밀히는 비적합도를 나타낸 지표임
- 왜냐하면 이탈도가 클수록 예측모델은 적합도가 좋지 않다는 것을 나타내기 때문임
- Null deviance는 예측모델의 상수항만을 포함하는 모델인 Null 모델의 이탈도를 나타냄
- Residual deviance는 현재 구축한 3개의 예측변수를 포함하고 있는 예측모델의 이탈도를 나타냄
- 회귀모델의 유의성 검정은 Null 모델 이탈도와 구축한 현재 모델 이탈도 간의 차이가 통계적으로 유의한 지를 검정함으로써 수행할 수 있음
- 이탈도는 \(\chi^2\)분포를 따르기 때문에 \(\chi^2\)분포 하에서 이탈도의 차이가 통계적으로 유의한 지 검정함
- 이는 pchisq()로 검정할 수 있음
- pchisq() 인수설명
- q: 2개의 이탈도의 차이값 지정
- df: 대응되는 자유도의 차이값 지정
- lower.tail: \(\chi^2\)분포 상 오른 쪽 꼬리 부분 면적이 유의확률이기 때문에 FALSE로 지정
pchisq(q=2122.73-559.44, df= 55-53,
lower.tail=FALSE)
## [1] 0
- 결과
- 유의확률은 0 으로 산출 됨
- 상수항만을 포함하고 있는 Null 모델의 이탈도와 추가로 3개의 예측변수를 투입하여 현재 구축한 예측모델의 이 이탈도 간 차이는 통계적으로 유의함
- 따라서 추가로 투입한 3개의 예측변수는 모델의 적합도 개선에 통계적으로 의미있는 기여를 한다고 볼 수 있고, 이는 3개의 예측변수를 포함하고 있는 이 모델이 통계적으로 유의하다는 것을 의미
3-3. 포아송회귀모델에서 결과변수 해석 - 로그값을 지수함수로 변환해 해석
- 포아송회귀모델에서 결과변수는 로그값으로 표현됨
- 나이(Age) 회귀계수 0.023은 나이 1살 증가할 때 발작횟수의 로그값은 0.023만큼 커진다는 의미임
- 그런데 로그값은 원래 관측값과 척도가 달라 해석상 어려움이 있음
- 따라서 로그값보다는 일반적으로 결과변수의 원래 척도로 예측변수의 회귀계수를 해석함
- 회귀계수에 지수함수를 취하면 원래 척도를 바탕으로 회귀계수를 해석할 수 있음
- 지수함수로 변환한 나이의 회귀계수를 계산하면 아래와 같음
exp(coef(seizure.poisson))
## (Intercept) Base Age Trtprogabide
## 7.0204403 1.0229102 1.0230007 0.8583864
- 결과
- 지수함수로 변환한 나이의 회귀계수는 1.0 이상임
- 나이 1살 증가는 발작횟수를 1.023배 증가시킨다는 의미임
- 나이 1살 증가는 발작횟수를 2.3% 증가시킴
- 이는 나이가 많아질수록 발작횟수도 증가한다는 것을 의미함
- 치료제 유형 1단위의 증가는 발작횟수를 0.858배 증가시킴
- 치료제 유형 1단위의 증가는
- Trt변수값이 기준범주인 1에서 2로 변화한다는 것을 나타냄
- 이는 위약에서 진약으로의 이동을 의미함
- 즉 뇌전증 치료제를 처방받은 환자집단은 위약복용 환자집단에 비해 발작횟수가 14.2% 감소함
4. 포아송회귀분석에서 과산포 문제
4-1. 포아송회귀분석에서 과산포 문제 설명
- 포아송분포에서는 평균과 분산이 같음
- 포아송회귀분석에서 과산포 문제 발생 조건
- 결과변수의 실제 관측된 분산이 포아송분포의 의해 기대되는 분산보다 더 클 때 발생함
- 즉 분산 대 평균의 비율이 1보다 클 때 발생함
- 사건발생 횟수데이터에서는 과산포가 빈번히 발생하고 과산포는 잘못된 분석결과를 유도할 수 있기 때문에 주의 깊게 다룰 필요가 있음
- 과산포 발생으로 인한 표준오차, t값, 유의확률의 왜곡
- 데이터셋에 과산포가 존재하면 표준오차가 매우 작아지게 됨
- 회귀계수의 유의성 검정을 위해 사용하는 검정통계량 t값은 회귀계수를 표준오차로 나눠 계산하기 때문에 표준오차가 매우 작아지게 되면 t값은 매우 커지게 되고
- 이는 유의확률을 지나치게 작게 만들어 회귀계수가 0이라는 귀무가설을 쉽게 기각하게 만듦
- 과산포는 종종 상태의존성이라는 현상으로 인해 발생함
- 포아송분포는 각 사건이 독립적이고 사건발생률이 일정하다고 가정함
- 현재 사용하고 있는 뇌전증 발작데이터에서 이는 이미 환자에 대해서 발생하는 발작은
- 서로 독립적이고(즉, 발작의 발생은 다음에 발생하는 다른 발작들과 관련성이 없고),
- 발작이 발생하는 간격은 일정하다는 것을 의미함
- 현재 사용하고 있는 뇌전증 발작데이터에서 이는 이미 환자에 대해서 발생하는 발작은
- 하지만 이러한 가정은 종종 현실적이지 못함
- 이는 어떤 한 환자에 대해 1번째 발작 발생확률은 이미 20번째 발작을 겪은 상태에서 21번째 발작이 일어날 확률과 같을 가능성은 없기 때문임
- 따라서 관측값의 변동성은 기대한 것보다 더욱 커지게 됨
- 포아송분포는 각 사건이 독립적이고 사건발생률이 일정하다고 가정함
- 로지스틱회귀분석에서처럼 잔차이탈도 대 잔차자유도의 비율이 1을 크게 상회하면 과산포를 의심함
- 아래는 뇌전증 발작데이터에서의 과산포 비율을 계산한 것임
deviance(seizure.poisson) / df.residual(seizure.poisson)
## [1] 10.1717
- 결과
- 과산포 비율이 10.17로 1보다 많이 큰 것으로 나타남
- 따라서 과산포 가능성은 매우 높은 것으로 생각됨
4-2. 포아송회귀분석에서 과산포가능성의 통계적 검정
- qcc패키지 qcc.overdispersion.test()로 과산포 가능성을 통계적으로 검정할 수 있음
- qcc.overdispersion.test() 인수설명
- 1st: 과산포를 검정하고자 하는 데이터를 지정함. 여기서는 결과변수인 발작횟수를 지정함
- type: 확률분포를 지정함. 여기서는 포아송을 지정함
- qcc.overdispersion.test()는 ‘데이터가 과산포가 아니다’ 라는 귀무가설을 검정함
library(qcc)
qcc.overdispersion.test(seizure$sumY, type="poisson")
##
## Overdispersion test Obs.Var/Theor.Var Statistic p-value
## poisson data 62.87013 3646.468 0
- 결과
- 유의확률 0으로서 유의수준 0.05보다 작기 때문에 귀무가설을 기각하고
- 이 데이터는 과산포문제를 갖고 있는 것으로 판단해 볼 수 있음
4-3. 과산포 문제를 지닌 데이터에 대한 포아송회귀분석 수행
- 과산포 문제가 존재하더라도 여전히 glm()로 포아송회귀분석을 수행할 수 있음
- family인수에 poisson()을 지정하는 대신에 quasipoisson()을 지정함
seizure.qpoisson <- glm(sumY ~ Base + Age + Trt,
data=seizure, family=quasipoisson())
summary(seizure.poisson)
##
## Call:
## glm(formula = sumY ~ Base + Age + Trt, family = poisson(), data = seizure)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -6.0569 -2.0433 -0.9397 0.7929 11.0061
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 1.9488259 0.1356191 14.370 < 2e-16 ***
## Base 0.0226517 0.0005093 44.476 < 2e-16 ***
## Age 0.0227401 0.0040240 5.651 1.59e-08 ***
## Trtprogabide -0.1527009 0.0478051 -3.194 0.0014 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for poisson family taken to be 1)
##
## Null deviance: 2122.73 on 58 degrees of freedom
## Residual deviance: 559.44 on 55 degrees of freedom
## AIC: 850.71
##
## Number of Fisher Scoring iterations: 5
summary(seizure.qpoisson)
##
## Call:
## glm(formula = sumY ~ Base + Age + Trt, family = quasipoisson(),
## data = seizure)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -6.0569 -2.0433 -0.9397 0.7929 11.0061
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.948826 0.465091 4.190 0.000102 ***
## Base 0.022652 0.001747 12.969 < 2e-16 ***
## Age 0.022740 0.013800 1.648 0.105085
## Trtprogabide -0.152701 0.163943 -0.931 0.355702
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for quasipoisson family taken to be 11.76075)
##
## Null deviance: 2122.73 on 58 degrees of freedom
## Residual deviance: 559.44 on 55 degrees of freedom
## AIC: NA
##
## Number of Fisher Scoring iterations: 5
- 결과:
- 과산포를 고려한 포아송회귀 분석결과를 살펴보고 회귀계수/표준오차를 종전모델과 비교할 것임
- 회귀계수: 종전의 모델과 동일함
- 표준오차: 종전보다 매우 커졌음
- 따라서 이 경우는 더 커진 표준오차로 인해
- 나이와 치료제에 대한 유의확률이 유의수준 0.05보다 커져서
- 회귀계수가 0이라는 귀무가설을 기각하지 못함
- 검정통계량 t값은 회귀계수를 표준오차로 나눠 구할 수 있음. 그래서 지금처럼 표준오차가 커지면 t값이 작아지게 되고 이는 유의확률 p값을 증가시킴
- 과산포를 고려할 때,
- 뇌전증 치료제 복용 환자집단이 위약을 처방받은 환자집단보다 발작횟수가 더 적다고 할 만한 증거가 충분하지 못함
- 나이 또한 발작횟수의 유의확률에 영향을 미치지 못함
- 따라서 여기에서는 과거의 발작횟수만이 향후 발작횟수를 예측하는데 유의한 영향을 미치는 것으로 나타남
5. 관측값 시간 간격이 다른 경우의 포아송회귀분석
- 지금까지 다른 포아송회귀분석에서는 결과변수로 사용한 사건발생횟수를 하나의 고정된 기간동안 측정하는 것으로 제한하였음
- 뇌전증 발작데이터에서 각 관측값은 모두 8주 동안의 동일한 기간에서의 발작횟수로 측정됨
- 발작횟수를 측정한 시간의 길이는 모든 환자에 대해서 동일함
- 하지만 많은 경우, 각 관측값에 대한 시간의 길이가 서로 다를 수 있음
- 어떤 환자는 8주간의 기간동안 발작횟수를 측정할 수 있고
- 어떤 환자는 12주간의 기간동안 발작횟수를 기록할 수 있음
- 기존 포아송회귀분석을 확장해 이처럼 각 관측값 시간간격이 다른 경우의 통계분석을 수행할 수 있음
- 이 경우 결과변수는 사건발생횟수를 단위시간으로 나눈 사건발생률이 됨
- 즉, 단위시간당 발생횟수가 분석 대상이 됨
- 사건발생률을 분석하기 위해 각 관측값에 대해 얼마의 기간동안 사건발생횟수를 측정했는지를 나타내는 시간변수가 포아송회귀모델에 포함되어야 함
- 시간이 포함된 포아송회귀모델은 이와 같은 수식으로 표현될 수 있음\[ln(\lambda) = \beta_0 + \beta_0x_2 + \dots + + \beta_mx_m\]
- \[ln(\frac{\lambda}{time}) = \beta_0 + \beta_0x_2 + \dots + + \beta_mx_m\]
- 기존의 포아송회귀모델에, 시간변수에 로그를 취한 값이 새로운 항으로 추가됨
5-1. 관측값 시간 간격이 다른 경우의 포아송회귀분석 수행
- 사건발생횟수의 측정기간이 서로 달라 가변적인 측정기간을 갖는 포아송회귀분석을 수행할 것임
- MASS패키지로 ships데이터셋 설명
- 파도로 인한 선박의 손상횟수와 월단위로 측정된 사용기간이 기록돼 있음
- 선박 손상횟수는 incidents변수에 저장되어 있음
- 선박의 사용기간은 service변수에 기록되어 있음
- 선박 종류인 type변수, 건조연도인 year변수, 운행기간인 period변수가 포함돼 있음
library(MASS)
str(ships)
## 'data.frame': 40 obs. of 5 variables:
## $ type : Factor w/ 5 levels "A","B","C","D",..: 1 1 1 1 1 1 1 1 2 2 ...
## $ year : int 60 60 65 65 70 70 75 75 60 60 ...
## $ period : int 60 75 60 75 60 75 60 75 60 75 ...
## $ service : int 127 63 1095 1095 1512 3353 0 2244 44882 17176 ...
## $ incidents: int 0 0 3 4 6 18 0 11 39 29 ...
- 선박의 손상횟수를 측정한 기간이 각 관측값마다 다르기 때문에 여기서는 사용기간 당 손상횟수를 결과변수로 하는 포아송회귀모델을 적용하는 것이 적절해 보임
- 이를 위해 먼저 간단한 전처리 작업을 수행할 것임
- 먼저 사용기간이 0개월인 선박은 분석해서 제외함
- 그리고 year변수와 period변수는 범주형 변수로 변환할 것임
shipsinc <- subset(ships, service > 0)
shipsinc$year <- factor(shipsinc$year)
shipsinc$period <- factor(shipsinc$period)
levels(shipsinc$year)
## [1] "60" "65" "70" "75"
levels(shipsinc$period)
## [1] "60" "75"
- 결과: 4개의 건조시점으로 구분된 year변수와 2개의 운행시점으로 구분된 period변수는 범주형 변수인 factor로 변환됨
- 포아송회귀분석 수행 - glm()
- 종전과 동일하게 주에 glm()을 이용할 수 있음
- glm() 인수설명
- 1st: 결과변수와 예측변수 간의 관계를 포뮬러 형식으로 지정함
- data: 모델 생성을 위한 데이터셋을 지정함
- family: poisson() 함수를 지정함
- offset: 시간변수를 지정함. 여기서는 선박의 사용기간을 지정함
shipsinc.poisson <- glm(incidents ~ type + year + period,
data=shipsinc,
family=poisson(),
offset=log(service))
summary(shipsinc.poisson)
##
## Call:
## glm(formula = incidents ~ type + year + period, family = poisson(),
## data = shipsinc, offset = log(service))
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -1.6768 -0.8293 -0.4370 0.5058 2.7912
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -6.40590 0.21744 -29.460 < 2e-16 ***
## typeB -0.54334 0.17759 -3.060 0.00222 **
## typeC -0.68740 0.32904 -2.089 0.03670 *
## typeD -0.07596 0.29058 -0.261 0.79377
## typeE 0.32558 0.23588 1.380 0.16750
## year65 0.69714 0.14964 4.659 3.18e-06 ***
## year70 0.81843 0.16977 4.821 1.43e-06 ***
## year75 0.45343 0.23317 1.945 0.05182 .
## period75 0.38447 0.11827 3.251 0.00115 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for poisson family taken to be 1)
##
## Null deviance: 146.328 on 33 degrees of freedom
## Residual deviance: 38.695 on 25 degrees of freedom
## AIC: 154.56
##
## Number of Fisher Scoring iterations: 5
- 분석결과를 보기 전 먼저 과산포 여부를 점검할 것임
deviance(shipsinc.poisson) / df.residual(shipsinc.poisson)
## [1] 1.547802
qcc.overdispersion.test(shipsinc$incidents , type="poisson")
##
## Overdispersion test Obs.Var/Theor.Var Statistic p-value
## poisson data 23.64624 780.3258 0
- 결과
- 과산포 비율이 1보다 크고 qcc.overdispersion.test()의의 통계적 검정결과 또한 과산포를 지지함
- 따라서 family 인수에 포아송을 지정하는 대신에 quasipoisson()을 지정해 poisson회귀모델을 다시 추정해 볼 것임
- 그런데 update()를 이용하면 기존 생성모델을 기반으로 새로운 모델을 쉽게 추정할 수 있음
shipsinc.poisson <- update(shipsinc.poisson,
family=quasipoisson())
summary(shipsinc.poisson)
##
## Call:
## glm(formula = incidents ~ type + year + period, family = quasipoisson(),
## data = shipsinc, offset = log(service))
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -1.6768 -0.8293 -0.4370 0.5058 2.7912
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -6.40590 0.28276 -22.655 < 2e-16 ***
## typeB -0.54334 0.23094 -2.353 0.02681 *
## typeC -0.68740 0.42789 -1.607 0.12072
## typeD -0.07596 0.37787 -0.201 0.84230
## typeE 0.32558 0.30674 1.061 0.29864
## year65 0.69714 0.19459 3.583 0.00143 **
## year70 0.81843 0.22077 3.707 0.00105 **
## year75 0.45343 0.30321 1.495 0.14733
## period75 0.38447 0.15380 2.500 0.01935 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for quasipoisson family taken to be 1.691028)
##
## Null deviance: 146.328 on 33 degrees of freedom
## Residual deviance: 38.695 on 25 degrees of freedom
## AIC: NA
##
## Number of Fisher Scoring iterations: 5
- 회귀계수에 지수함수를 취해서 원래의 척도를 바탕으로 회귀계수를 해석할 수 있도록 변환할 것임
exp(coef(shipsinc.poisson))
## (Intercept) typeB typeC typeD typeE year65
## 0.00165178 0.58080262 0.50288104 0.92685196 1.38483286 2.00800246
## year70 year75 period75
## 2.26693019 1.57369544 1.46883116
5-2. 관측값 시간 간격이 다른 경우의 포아송회귀분석 결과분석
- 지수함수를 이용하여 변환한 회귀계수를 바탕으로 아래사항들을 확인할 수 있음
https://youtu.be/-Za5MrWUohg?list=PLY0OaF78qqGAxKX91WuRigHpwBU0C2SB_&t=1564
- 선박 종류에 따른 분석
- 선박 종류에서 A~E형 선박까지 5가지 종류가 있고, 기준범주는 A형 선박임
- 따라서 여기 회귀계수는 기준범주인 A형 선박 대비 손상위험 정도를 나타냄
- A형 선박 대비 B형은 0.58배, C형은 0.50배, D형은 0.92배, E형은 1.38배 더 손상 위험이 높음.
- 따라서 E형의 손상위험이 가장 높고 C형의 손상위험이 가장 낮음
- 기준범주인 A형 선박은 두번째로 손상위험이 높음
- 가장 손상위험이 높은 E형 대비 가장 손상위험이 낮은 C형의 비는 2.75임
- 따라서 E형 선박은 C형 선박에 비해 손상 위험이 2.75베 더 높음
- 건조시점에 따른 분석
- 건조시점은 4개의 범주를 가짐
- 1960~64년인 선박, 65~69년, 70~74년, 75~79년인 선박으로 나눠짐
- 그 중 기준범주는 1960~64년 사이 건조된 선박임
- 회귀계수를 보면,
- 65~69년 건조선박은 기준범주인 60~64년 대비 2배 더 손상위험이 높음
- 70~74년 건조선박은 기준범주 대비 2.27배 더 손상위험이 높음
- 75~79년 건조선박은 기준범주 대비 1.57배 더 손상 위험이 높음
- 따라서 70~74년 건조선박이 가장 손상에 취약함
- 기준범주인 60~64년 건조선박은 가장 안전함
- 70~74년 건조선박은 60~64년 건조선박에 비해 2.27배 손상위험이 더 큼
- 건조시점은 4개의 범주를 가짐
- 운행기간에 따른 분석
- 운행기간은 2개의 범주를 가짐
- 60~74년, 75~79년 사이 운행선박임
- 그 중 첫 번째 범주인 60~74년 운행선박이 기준범주임
- 기준범주 대비 75~79년 운행선박은 손상위험이 1.47배 더 높음