일 변량 로지스틱 회귀 분석을위한 표본 크기 계산


11

피험자들의 코호트가 수술 시점에 단일 연속 변수를 측정 한 다음 2 년 후에 기능적 결과 또는 손상된 결과로 분류되는 연구에 필요한 표본 크기를 어떻게 계산합니까?

측정 결과 나쁜 결과를 예측할 수 있었는지 확인하고 싶습니다. 어떤 시점에서 우리는 연속 변수에서 컷 포인트를 도출하여 그 결과가 손상 될 가능성을 줄이기 위해 개입하려고 할 수 있습니다.

어떤 아이디어? 모든 R 구현.


후속 조치 중 일부 중단이 예상됩니까? 모형에 포함 할 다른 공변량이 있습니까?
chl

엄지 손가락에서 이탈률을 20 % 줄였습니다. 우리는 실제로 나이, 외상 점수와 같은 많은 변수를 수집 할 것이지만 나는 힘 계산을 위해 가능한 한 단순하게 유지하고 싶었습니다. 나는 종종 기본 모델과 그 이후에 더 미세하고 뉘앙스가있는 보조 모델에 대해 논의하는 것이 유용하다는 것을 알게되었습니다.
Farrel

그러나 일반적으로 예상되는 % 드롭 아웃, 공변량의 수 및 공변량이 오류로 측정되는지 (예 : j.mp/9fJkhb 참조 ) 공식을 입력합니다 (모든 경우에 표본 크기가 증가 함).
chl

답변:


7

로지스틱 회귀 분석에 대한 표본 크기 계산은 복잡합니다. 나는 그것을 여기에 요약하려고 시도하지 않을 것이다. 이 문제에 대한 합리적으로 접근 가능한 솔루션은 다음에서 찾을 수 있습니다.

Hsieh FY. 로지스틱 회귀 분석을위한 표본 크기 테이블. 의학 통계. 1989 년 7 월; 8 (7) : 795-802.

Hsieh FY 등 선형 및 로지스틱 회귀 분석을위한 간단한 표본 크기 계산 방법입니다. 의학 통계. 1998 년 7 월 30 일; 17 (14) : 1623-34.

계산 예제와 관련된 문제에 대한 접근 가능한 논의는 Hosmer & Lemeshow의 Applied Logistic Regression 의 마지막 장 (8.5 pp 339-347)에서 찾을 수 있습니다 .


7

나는 보통 시뮬레이션을 실행하는 것이 더 쉽고 빠릅니다. 논문은 읽고 이해하고 마지막으로 관심있는 특별한 경우에는 적용되지 않는다는 결론에 도달하는 데 오랜 시간이 걸립니다.

그러므로 나는 많은 주제를 선택하고, 관심있는 공변량을 시뮬레이션하고 (당신이 생각하는대로 분배 됨), 자신이 정한 기능적 형태 (공변량의 임계 효과? 비선형 성?)에 따라 좋은 / 나쁜 결과를 시뮬레이션합니다. 탐지하고자하는 최소 (임상) 유효 효과 크기로 분석을 통해 결과를 실행하고 효과가 알파에서 발견되는지 확인하십시오. 이 10,000 번을 다시 실행하고 시뮬레이션의 80 %에서 (또는 필요한 다른 힘) 효과를 찾았는지 확인하십시오. 피사체 수를 조정하고 마음에 드는 힘이 생길 때까지 반복하십시오.

이것은 매우 일반적이라는 이점이 있으므로 특정 기능 형태 또는 특정 수 또는 공변량 분포에 국한되지 않습니다. 드롭 아웃을 포함시킬 수 있습니다. 위의 chl 주석을 무작위로 보거나 공변량 또는 결과의 영향을받습니다. 기본적으로 최종 샘플에 대해 수행 할 분석을 미리 코딩하면 연구 설계에 대한 내 생각에 집중할 수 있습니다. 그리고 그것은 R에서 쉽게 수행됩니다 (벡터화!).


R에 문제가 있습니까?
Farrel

1
@Farrel-여기에 [0,1]-균일하게 분포 된 공변량, 공변량의 첫 번째 사분 위와 세 번째 사 분위수 사이의 2의 OR과 표준 정규 노이즈를 가정하여 n = 100의 검정력 .34가 발생하는 매우 짧은 스크립트가 있습니다. 나는 모든 것을 나의 가정에 얼마나 민감한 지 알아보기 위해 이것을 가지고 놀 것이다. run <-1000; nn <-100; set.seed (2010); 탐지 <-replicate (n = runs, expr = {공변량 <-runif (nn); 결과 <-runif (nn) <1 / (1 + exp (-2 * log (2) * covariate + rnorm (nn)) ); 요약 (glm (결과 ~ 공변량, 가족 = "이항")) $ 계수 [ "공변량", "Pr (> | z |)"] <.05}) cat ( "Power :", sum (detect) / runs, "\ n")
Stephan Kolassa

1
더 편리하다고 생각되면 코드를 pastie ( pastebin.com ) 또는 Gist ( gist.github.com ) 로 첨부 하고 주석에서 다시 링크 할 수 있습니다.
chl

@chl : +1 감사합니다! 요점은 다음과 같습니다. gist.github.com/607968
Stephan Kolassa

훌륭한 코드이지만 문제가 있습니다. 나는 당신만큼 똑똑하지 않습니다. 단계별로 세분화해야합니다. 시뮬레이션을 여러 번 실행합니까? nn은 무엇입니까? 그것은 연구에서 과목의 수입니까? 그런 다음 공변량 분포를 만들어 임계 값에 따라 예 또는 아니요를 결정하게합니다.
Farrel

4

Stephan Kolassa의 게시물 (댓글로 추가 할 수 없음)에 이어 시뮬레이션을위한 대체 코드가 있습니다. 이것은 동일한 기본 구조를 사용하지만 조금 더 폭발하므로 읽기가 조금 더 쉽습니다. 또한 로지스틱 회귀를 시뮬레이션하기 위해 Kleinman과 Horton 의 코드를 기반으로합니다 .

nn은 샘플의 숫자입니다. 공변량은 지속적으로 정규 분포를 유지하고 0과 sd 1을 의미하도록 표준화해야합니다. rnorm (nn)을 사용하여이를 생성합니다. 승산 비를 선택하여 odds.ratio에 저장합니다. 또한 인터셉트 할 숫자를 선택합니다. 이 숫자의 선택은 샘플에서 "이벤트"를 경험하는 비율을 결정합니다 (예 : 0.1, 0.4, 0.5). 적절한 비율을 얻을 때까지이 숫자로 놀아야합니다. 다음 코드는 샘플 크기가 950이고 OR이 1.5 인 비율이 0.1입니다.

nn <- 950
runs <- 10000
intercept <- log(9)
odds.ratio <- 1.5
beta <- log(odds.ratio)
proportion  <-  replicate(
              n = runs,
              expr = {
                  xtest <- rnorm(nn)
                  linpred <- intercept + (xtest * beta)
                  prob <- exp(linpred)/(1 + exp(linpred))
                  runis <- runif(length(xtest),0,1)
                  ytest <- ifelse(runis < prob,1,0)
                  prop <- length(which(ytest <= 0.5))/length(ytest)
                  }
            )
summary(proportion)

요약 (비율)은 비율이 ~ 0.1임을 확인합니다

그런 다음 동일한 변수를 사용하여 10000 회 이상의 검정력을 계산합니다.

result <-  replicate(
              n = runs,
              expr = {
                  xtest <- rnorm(nn)
                  linpred <- intercept + (xtest * beta)
                  prob <- exp(linpred)/(1 + exp(linpred))
                  runis <- runif(length(xtest),0,1)
                  ytest <- ifelse(runis < prob,1,0)
                  summary(model <- glm(ytest ~ xtest,  family = "binomial"))$coefficients[2,4] < .05
                  }
            )
print(sum(result)/runs)

이 코드는 정확하다고 생각합니다. 1998 년 Hsieh (표 2)의 예제와 비교해 보았으며 여기에 주어진 세 가지 예제와 일치하는 것 같습니다. 또한 Hosmer와 Lemeshow의 p 342-343의 예제와 비교하여 0.75의 힘을 얻었습니다 (Hosmer와 Lemeshow의 0.8과 비교). 따라서 어떤 상황에서는이 접근법이 권력을 과소 평가하는 것일 수 있습니다. 그러나이 온라인 계산기 에서 동일한 예제를 실행했을 때 Hosmer와 Lemeshow의 결과가 아니라 나와 동의한다는 것을 알았습니다.

누구든지 이것이 왜 그런지 말해 줄 수 있다면, 알고 싶습니다.


마음에 들지 않으면 2 개의 질문이 있습니다. 2) ytest (prob와 random uni draw 비교)의 논리는 무엇입니까?
B_Miner

@B_Miner 1) 다른 방법-비율을 올바르게 얻으려면 절편을 올바르게 설정해야하므로 예상 비율을 얻을 때까지 절편을 조정하십시오. 2) ytest의 논리는 이분법적인 0 또는 1 결과를 얻어야한다는 것입니다. 따라서 우리는 이분법적인 결과를 얻기 위해 균일 분포에서 확률 (prob)과 각 표본을 비교합니다. 'runis'는 임의의 균일 분포에서 도출 할 필요가 없습니다. 이항 또는 다른 분포는 데이터에 더 적합 할 수 있습니다. 이것이 도움이되기를 바랍니다 (답장 지연으로 죄송합니다).
앤드류

3

θ=10:θ=0

실제로, 그것은 당신의 연구가 순차적 인 방식으로 수행되는 것처럼 들립니다. 이 경우 실험의 일부를 명시 적으로 작성하면 비용이 청구될 수 있습니다. 순차적 샘플링은 종종 고정 된 샘플 크기 실험보다 더 효율적일 수 있습니다 [평균적으로 적은 관측치 필요].

farrel : 댓글에 답글을 추가하겠습니다.

표본 크기를 얻기 위해 일반적으로 추정에 대한 일종의 정밀 기준 (예 : CI의 길이) 또는 데이터에 대해 수행 할 특정 시험 대안의 검정력을 지정합니다. 이 두 가지 기준을 모두 언급 한 것 같습니다. 원칙적으로 아무 문제가 없습니다. 그러면 두 가지 샘플 크기 계산을 수행해야합니다. 하나는 원하는 추정 정밀도를 달성하기 위해, 다른 하나는 명시된 대안에서 원하는 전력을 얻습니다. 두 샘플 크기 중 더 큰 것이 필요합니다. [btw – 80 %의 전력을 말하는 것 외에는 수행하려는 테스트 또는 80 %의 전력을 원하는 대안을 언급하지 않은 것 같습니다.]

순차적 분석을 사용하는 경우 : 피험자가 동시에 연구에 등록하는 경우 고정 된 표본 크기가 적합합니다. 그러나 과목이 거의없고 사이에 있으면 필요한 수를 등록하는 데 1 년 또는 2 년 (또는 그 이상)이 걸릴 수 있습니다. 따라서 재판은 3 년 또는 4 년 동안 진행될 수있다. 이 경우, 순차 계획은 그보다 더 빨리 중단 될 가능성을 제공합니다. 만약 당신이 찾고있는 효과가 시험 초기에 통계적으로 유의 해지면.


기준은 좋은 결과와 나쁜 결과의 확률의 10 % 차이가됩니다. 또는 로지스틱 회귀, 확률 비 = 2이므로, 연속 변수에 대한 풀링 된 분산이 무엇인지 아직 모르지만 표준 편차가 7mmHg라고 가정합시다. 순차적 분석은 양호하지만 최종 결과는 측정 후 2 년입니다.
Farrel
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.