로지스틱 회귀 : 그룹화 및 그룹화 해제 된 변수 (R 사용)


9

A. Agresti (2007), 범주 형 데이터 분석 소개 , 2 번째를 읽고 있습니다. 이 단락 (p.106, 4.2.1)을 올바르게 이해했는지 확실하지 않습니다 (쉽지만).

이전 장의 코골이 및 심장병에 관한 표 3.1에서 254 명의 환자가 매일 밤 코골이를보고했으며 그 중 30 명이 심장병에 걸렸습니다. 데이터 파일이 이진 데이터를 그룹화 한 경우 데이터 파일의 한 줄은 이러한 데이터를 표본 크기 254에서 30 건의 심장병 사례로보고합니다. 데이터 파일이 이진 데이터를 그룹화하지 않은 경우 데이터 파일의 각 줄은 별도의 주제이므로 30 줄은 심장병에 대해 1을 포함하고 224 줄은 심장병에 대해 0을 포함합니다. ML 추정치 및 SE 값은 두 유형의 데이터 파일에 대해 동일합니다.

그룹화되지 않은 데이터 세트를 변환하려면 (1 개의 종속, 1 개의 독립) 모든 정보를 포함하는 데 "선"이상이 필요합니다!

다음 예에서는 (비현실적!) 단순 데이터 세트가 작성되고 로지스틱 회귀 모델이 작성됩니다.

그룹화 된 데이터는 실제로 어떻게 표시됩니까 (변수 탭)? 그룹화 된 데이터를 사용하여 동일한 모델을 어떻게 구축 할 수 있습니까?

> dat = data.frame(y=c(0,1,0,1,0), x=c(1,1,0,0,0))
> dat
  y x
1 0 1
2 1 1
3 0 0
4 1 0
5 0 0
> tab=table(dat)
> tab
   x
y   0 1
  0 2 1
  1 1 1
> mod1=glm(y~x, data=dat, family=binomial())

답변:


11

표 3.1은 다음과 같습니다.

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

Agresti는 코골이 수준에 대해 {0,2,4,5}의 점수를 고려했습니다.

GLM을 R에 맞추는 방법에는 두 가지가 있습니다. 결과는 0/1의 벡터 또는 두 수준의 요인으로 제공되며 예측 변수는 공식의 rh에 있습니다. 또는 성공 / 실패에 대한 두 개의 열 열로 구성된 행렬을 수식의 lh로 지정할 수 있습니다. 후자는 Agresti가 '그룹화 된'데이터라고 부르는 것에 해당합니다. 그룹화 된 설정에도 적용되는 세 번째 방법은 weights=인수를 사용 하여 분류 표의 각 범주에 대해 관찰 된 긍정적 결과 부정적인 결과의 수를 나타냅니다 .

행렬보기의 데이터는 다음과 같습니다.

snoring <- matrix(c(24,35,21,30,1355,603,192,224), nc=2)

이를 통해 다음과 같이 data.frame긴 형식 (2484 행 = sum(snoring)관측치)을 생성 할 수 있습니다 .

snoring.df <- data.frame(snoring=gl(4, 1, labels=c("Never", "Occasional",
                                                   "Nearly every night", 
                                                   "Every night")),
                         disease=gl(2, 4, labels=c("Yes", "No")),
                         counts=as.vector(snoring))
snoring.df <- snoring.df[rep(seq_len(nrow(snoring.df)), snoring.df$counts), 1:2]

그리고 다음 두 모델은 동일한 결과를 산출합니다.

levels(snoring.df$snoring) <- c(0, 2, 4, 5)
y <- abs(as.numeric(snoring.df$disease)-2)
x <- as.numeric(as.character(snoring.df$snoring))
fit.glm1 <- glm(y ~ x, family=binomial)

fit.glm2 <- glm(snoring ~ c(0, 2, 4, 5), family=binomial)

그건, logit[π^(x)]=3.87+0.40x, Agresti의 표기법을 사용합니다.

제 표기 자주 추천 지시에 집계 테이블에 사용되는 cbind(a, b), a그리고 b이진 이벤트 카운트 열 (예를 들면 참조되어 일반화 된 선형 모델 ). 매트릭스 대신 테이블을 사용할 때 (예와 같이) 작동하는 것처럼 보입니다.

glm(as.table(snoring) ~ c(0, 2, 4, 5), family=binomial)

대단히 감사합니다! 완벽한 답변! 하나의 간단한 추가 사항이 있습니다 .as.table (snoring) 대신 table (x, y, dnn = c ( 'snoring', 'disease'))를 내 예제와 동등한 것으로 제안합니다. 데이터에도 관심이있었습니다.
FloE

1
@FloE 당신이 맞아요. 여전히 rhs ad hoc 을 구성해야합니다 . 예를 들어, tab <- table(x,y, dnn=c('snoring','disease')); glm(tab ~ as.numeric(rownames(tab)), family=binomial)"예"가 1 대신 0으로 코딩되므로 계수에 대한 빼기 부호 반전 과 같은 것이 작동합니다.
chl
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.