개수 데이터에 대한 포아송 회귀에 대한 간단한 소개


회귀는 하나 이상의 예측 변수와 반응 변수 사이의 관계를 확인하는 데 사용할 수 있는 통계 방법입니다.

포아송 회귀는 응답 변수가 “개수 데이터”인 특수한 유형의 회귀입니다. 다음 예에서는 포아송 회귀 분석을 사용할 수 있는 사례를 보여줍니다.

예 1: 포아송 회귀 분석을 사용하면 프로그램 입학 시 GPA와 성별을 기준으로 특정 대학 프로그램을 졸업하는 학생 수를 조사할 수 있습니다. 이 경우 “졸업하는 학생 수”는 반응 변수이고, “프로그램 입학 시 GPA”는 연속형 예측 변수이고, “성별”은 범주형 예측 변수입니다.

예 2: 포아송 회귀 분석을 사용하면 기상 조건(“맑음”, “흐림”, “비”)을 기반으로 특정 교차로에서 교통 사고 건수와 도시에서 특별 이벤트가 발생하는지 여부(“예”)를 조사할 수 있습니다. 아니면 아니오”). 이 경우 “교통사고 건수”는 반응 변수인 반면 “기상 상황”과 “특수 사건”은 모두 범주형 예측 변수입니다.

예 3: 포아송 회귀 분석을 사용하면 시간, 요일, 판매 진행 여부(“예 또는 아니요)를 기준으로 매장에서 줄을 서 있는 사람의 수를 조사할 수 있습니다. .”). 이 경우 “앞에 줄을 서 있는 사람의 수”는 반응변수이고, “시간”과 “요일”은 모두 연속형 예측변수이며, “판매 진행 중”은 범주형 예측변수입니다.

예 4: 포아송 회귀 분석을 사용하여 기상 조건(“맑음”, “흐림”, “비”) 및 코스 난이도(“쉬움”, “비”)를 기반으로 철인 3종 경기를 완주하는 사람의 수를 조사할 수 있습니다. 보통’, ‘어려움’). 이 경우 “완료한 사람 수”는 반응 변수인 반면 “날씨 조건”과 “코스 난이도”는 모두 범주형 예측 변수입니다.

포아송 회귀 분석을 수행하면 어떤 예측 변수(있는 경우)가 반응 변수에 통계적으로 유의미한 영향을 미치는지 확인할 수 있습니다.

연속형 예측 변수의 경우 해당 변수의 1단위 증가 또는 감소가 반응 변수 숫자의 백분율 변화와 어떻게 연관되어 있는지 해석할 수 있습니다(예: “GPA의 각 1단위 증가 추가 포인트는 반응 변수가 12.5% 증가함).

범주형 예측 변수의 경우 한 그룹의 개수(예: 화창한 날 철인 3종 경기를 완주한 사람 수)의 백분율 변화를 다른 그룹(예: 철인 3종 경기를 완주한 사람 수)과 비교하여 해석할 수 있습니다. 우천 시 철인 3종 경기).

포아송 회귀의 가정

포아송 회귀를 수행하려면 먼저 포아송 회귀 결과가 유효하도록 다음 가정이 충족되는지 확인해야 합니다.

가정 1: 응답 변수는 카운트 데이터입니다. 전통적인 선형 회귀 분석에서 반응 변수는 연속 데이터입니다. 그러나 포아송 회귀를 사용하려면 응답 변수가 0 이상의 정수(예: 0, 1, 2, 14, 34, 49, 200 등)를 포함하는 개수 데이터로 구성되어야 합니다. 응답 변수에는 음수 값이 포함될 수 없습니다.

가설 2: 관측치는 독립적입니다. 데이터세트의 각 관측값은 서로 독립적이어야 합니다. 이는 하나의 관찰이 다른 관찰에 대한 정보를 제공할 수 없어야 함을 의미합니다.

가설 3: 계정 분포는 포아송 분포를 따릅니다. 결과적으로 관찰된 개수와 기대되는 개수는 유사해야 합니다. 이를 테스트하는 간단한 방법은 예상 개수와 관찰 개수를 표시하고 유사한지 확인하는 것입니다.

가정 4: 모델의 평균과 분산이 동일합니다. 이는 개수 분포가 포아송 분포를 따른다는 가정에서 비롯됩니다. 포아송 분포의 경우 분산은 평균과 동일한 값을 갖습니다. 이 가정이 충족되면 등분산이 됩니다. 그러나 과분산이 일반적인 문제이기 때문에 이 가정은 종종 위반됩니다.

예: R의 포아송 회귀

이제 R에서 포아송 회귀를 수행하는 방법의 예를 검토하겠습니다.

배경

특정 카운티의 고등학교 야구 선수가 그의 학교 부문(“A”, “B” 또는 “C”)과 학교 성적을 기준으로 얼마나 많은 장학금을 받는지 알고 싶다고 가정해 보겠습니다. 대학 입학 시험(0에서 100까지 측정). ).

다음 코드는 100명의 야구 선수에 대한 데이터가 포함된 데이터 세트를 생성합니다.

 #make this example reproducible
set.seed(1)

#create dataset
data <- data.frame(offers = c(rep(0, 50), rep(1, 30), rep(2, 10), rep(3, 7), rep(4, 3)),
                   division = sample(c("A", "B", "C"), 100, replace = TRUE),
                   exam = c(runif(50, 60, 80), runif(30, 65, 95), runif(20, 75, 95)))

데이터 이해

포아송 회귀 모델을 이 데이터 세트에 실제로 적용하기 전에 데이터 세트의 처음 몇 행을 시각화하고 dplyr 라이브러리를 사용하여 요약 통계를 실행함으로써 데이터를 더 잘 이해할 수 있습니다.

 #view dimensions of dataset
dim(data)

#[1] 100 3

#view first six lines of dataset
head(data)

# offers division exam
#1 0 A 73.09448
#2 0 B 67.06395
#3 0 B 65.40520
#4 0 C 79.85368
#5 0 A 72.66987
#6 0 C 64.26416

#view summary of each variable in dataset
summary(data)

# offers division exam      
# Min. :0.00 To:27 Min. :60.26  
# 1st Qu.:0.00 B:38 1st Qu.:69.86  
# Median: 0.50 C:35 Median: 75.08  
# Mean:0.83 Mean:76.43  
# 3rd Qu.:1.00 3rd Qu.:82.87  
# Max. :4.00 Max. :93.87  

#view mean exam score by number of offers
library(dplyr)
data %>%
  group_by (offers) %>%
  summarize (mean_exam = mean(exam))

# A tibble: 5 x 2
# offers mean_exam
#        
#1 0 70.0
#2 1 80.8
#3 2 86.8
#4 3 83.9
#5 4 87.9

위의 결과로부터 우리는 다음과 같은 사실을 관찰할 수 있습니다.

  • 데이터 세트에는 100개의 행과 3개의 열이 있습니다.
  • 플레이어가 받은 최소 제안 수는 0개, 최대 제안 수는 4개, 평균은 0.83이었습니다.
  • 이 데이터 세트에는 “A” 디비전의 플레이어 27명, “B” 디비전의 플레이어 38명, “C” 디비전의 플레이어 35명이 있습니다.
  • 시험최소점수는 60.26점, 최고점수는 93.87점, 평균점수는 76.43점이었습니다.
  • 일반적으로 장학금 제안을 더 많이 받은 플레이어는 시험 점수가 더 높은 경향이 있습니다(예를 들어 제안을 받지 않은 플레이어의 평균 시험 점수는 70.0이었고 4개의 제안을 받은 플레이어의 평균 검토 점수는 87.9였습니다).

또한 디비전에 따라 플레이어가 받은 제안 수를 시각화하는 히스토그램을 만들 수도 있습니다.

 #load ggplot2 package
library(ggplot2)

#create histogram
ggplot(data, aes(offers, fill = division)) +
  geom_histogram(binwidth=.5, position="dodge")

대부분의 플레이어가 제안을 전혀 받지 않거나 단 한 번만 받은 것을 볼 수 있습니다. 이는 포아송 분포를 따르는 데이터 세트의 전형적인 현상입니다. 응답 값의 상당 부분이 0입니다.

포아송 회귀 모델 피팅

다음으로 glm() 함수를 사용하고 모델에 family=”fish”를 사용하도록 지정하여 모델을 조정할 수 있습니다.

 #fit the model
model <- glm(offers ~ division + exam, family = "fish" , data = data)

#view model output
summary(model)

#Call:
#glm(formula = offers ~ division + exam, family = "fish", data = data)
#
#Deviance Residuals: 
# Min 1Q Median 3Q Max  
#-1.2562 -0.8467 -0.5657 0.3846 2.5033  
#
#Coefficients:
#Estimate Std. Error z value Pr(>|z|)    
#(Intercept) -7.90602 1.13597 -6.960 3.41e-12 ***
#divisionB 0.17566 0.27257 0.644 0.519    
#divisionC -0.05251 0.27819 -0.189 0.850    
#exam 0.09548 0.01322 7.221 5.15e-13 ***
#---
#Significant. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#
#(Dispersion parameter for fish family taken to be 1)
#
# Null deviance: 138,069 on 99 degrees of freedom
#Residual deviance: 79,247 on 96 degrees of freedom
#AIC: 204.12
#
#Number of Fisher Scoring iterations: 5

결과에서 우리는 다음을 관찰할 수 있습니다.

  • 포아송 회귀계수, 추정값의 표준오차, z-점수, 해당 p-값이 모두 제공됩니다.
  • 리뷰 계수는 0.09548 입니다. 이는 리뷰 1단위 증가에 대한 제안 수의 예상 로그 수가 0.09548 임을 나타냅니다. 이를 해석하는 더 간단한 방법은 지수화된 값, 즉 e 0.09548 = 1.10 을 취하는 것입니다. 이는 입학 시험에서 추가 점수를 획득할 때마다 받는 제안 수가 10% 증가한다는 의미입니다.
  • 디비전 B 의 계수는 0.1756 입니다. 이는 디비전 B의 선수에 대한 예상 제안 수가 디비전 A의 선수보다 0.1756 더 높다는 것을 나타냅니다. 이를 해석하는 더 간단한 방법은 지수화된 값, 즉 e 0.1756 =을 취하는 것입니다. 1.19 . 이는 B 부문의 선수가 A 부문의 선수보다 19% 더 많은 제안을 받는다는 의미입니다. 이 차이는 통계적으로 유의하지 않습니다(p = 0.519).
  • 디비전 C 의 계수는 -0.05251 입니다. 이는 디비전 C의 플레이어에 대한 제안 수의 예상 로그 수가 디비전 A의 플레이어보다 0.05251 낮다 는 것을 나타냅니다. 이를 해석하는 더 간단한 방법은 지수화된 값을 취하는 것입니다. , 즉 e 0.05251 = 0.94 입니다. 이는 C 부문의 플레이어가 A 부문의 플레이어보다 6% 더 적은 제안을 받는다는 의미입니다. 이 차이는 통계적으로 유의하지 않습니다(p = 850).

모델 이탈에 대한 정보도 제공됩니다. 우리는 특히 96 자유도 중 79,247 값을 갖는 잔차 이탈도 에 관심이 있습니다. 이 숫자를 사용하여 카이제곱 적합도 테스트를 수행하여 모델이 데이터에 적합한지 확인할 수 있습니다. 다음 코드는 이 테스트를 수행하는 방법을 보여줍니다.

 pchisq(79.24679, 96, lower.tail = FALSE)

#[1] 0.8922676

이 테스트의 p-값은 0.89 로, 유의 수준 0.05보다 훨씬 높습니다. 우리는 데이터가 모델에 합리적으로 잘 맞는다는 결론을 내릴 수 있습니다.

결과 보기

또한 다음 코드를 사용하여 학과 및 입학 시험 결과에 따라 예상되는 장학금 제안 수를 보여주는 차트를 만들 수도 있습니다.

 #find predicted number of offers using the fitted Poisson regression model
data$phat <- predict(model, type="response")

#create plot that shows number of offers based on division and exam score
ggplot(data, aes(x = exam, y = phat, color = division)) +
  geom_point(aes(y = offers), alpha = .7, position = position_jitter(h = .2)) +
  geom_line() +
  labs(x = "Entrance Exam Score", y = "Expected number of scholarship offers")

차트는 입학 시험에서 높은 점수를 받은 선수에게 예상되는 가장 높은 장학금 제안 수를 보여줍니다. 또한 디비전 B(녹색 선)의 플레이어는 일반적으로 디비전 A 또는 디비전 C의 플레이어보다 더 많은 제안을 받아야 함을 알 수 있습니다.

결과보고

마지막으로, 결과를 요약하는 방식으로 회귀 결과를 보고할 수 있습니다.

디비전 및 입학 시험 점수를 기반으로 야구 선수가 받는 장학금 제안 수를 예측하기 위해 포아송 회귀 분석을 실행했습니다. 입학 시험에서 추가 점수를 얻을 때마다 제안을 받은 횟수가 10%씩 증가합니다( p < 0.0001) . 구분은 통계적으로 유의미한 것으로 확인되지 않았습니다.

추가 리소스

단순 선형 회귀 소개
다중 선형 회귀 소개
다항식 회귀 소개

의견을 추가하다

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다