피험자들의 코호트가 수술 시점에 단일 연속 변수를 측정 한 다음 2 년 후에 기능적 결과 또는 손상된 결과로 분류되는 연구에 필요한 표본 크기를 어떻게 계산합니까?
측정 결과 나쁜 결과를 예측할 수 있었는지 확인하고 싶습니다. 어떤 시점에서 우리는 연속 변수에서 컷 포인트를 도출하여 그 결과가 손상 될 가능성을 줄이기 위해 개입하려고 할 수 있습니다.
어떤 아이디어? 모든 R 구현.
피험자들의 코호트가 수술 시점에 단일 연속 변수를 측정 한 다음 2 년 후에 기능적 결과 또는 손상된 결과로 분류되는 연구에 필요한 표본 크기를 어떻게 계산합니까?
측정 결과 나쁜 결과를 예측할 수 있었는지 확인하고 싶습니다. 어떤 시점에서 우리는 연속 변수에서 컷 포인트를 도출하여 그 결과가 손상 될 가능성을 줄이기 위해 개입하려고 할 수 있습니다.
어떤 아이디어? 모든 R 구현.
답변:
로지스틱 회귀 분석에 대한 표본 크기 계산은 복잡합니다. 나는 그것을 여기에 요약하려고 시도하지 않을 것이다. 이 문제에 대한 합리적으로 접근 가능한 솔루션은 다음에서 찾을 수 있습니다.
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)에서 찾을 수 있습니다 .
나는 보통 시뮬레이션을 실행하는 것이 더 쉽고 빠릅니다. 논문은 읽고 이해하고 마지막으로 관심있는 특별한 경우에는 적용되지 않는다는 결론에 도달하는 데 오랜 시간이 걸립니다.
그러므로 나는 많은 주제를 선택하고, 관심있는 공변량을 시뮬레이션하고 (당신이 생각하는대로 분배 됨), 자신이 정한 기능적 형태 (공변량의 임계 효과? 비선형 성?)에 따라 좋은 / 나쁜 결과를 시뮬레이션합니다. 탐지하고자하는 최소 (임상) 유효 효과 크기로 분석을 통해 결과를 실행하고 효과가 알파에서 발견되는지 확인하십시오. 이 10,000 번을 다시 실행하고 시뮬레이션의 80 %에서 (또는 필요한 다른 힘) 효과를 찾았는지 확인하십시오. 피사체 수를 조정하고 마음에 드는 힘이 생길 때까지 반복하십시오.
이것은 매우 일반적이라는 이점이 있으므로 특정 기능 형태 또는 특정 수 또는 공변량 분포에 국한되지 않습니다. 드롭 아웃을 포함시킬 수 있습니다. 위의 chl 주석을 무작위로 보거나 공변량 또는 결과의 영향을받습니다. 기본적으로 최종 샘플에 대해 수행 할 분석을 미리 코딩하면 연구 설계에 대한 내 생각에 집중할 수 있습니다. 그리고 그것은 R에서 쉽게 수행됩니다 (벡터화!).
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의 결과가 아니라 나와 동의한다는 것을 알았습니다.
누구든지 이것이 왜 그런지 말해 줄 수 있다면, 알고 싶습니다.
실제로, 그것은 당신의 연구가 순차적 인 방식으로 수행되는 것처럼 들립니다. 이 경우 실험의 일부를 명시 적으로 작성하면 비용이 청구될 수 있습니다. 순차적 샘플링은 종종 고정 된 샘플 크기 실험보다 더 효율적일 수 있습니다 [평균적으로 적은 관측치 필요].
farrel : 댓글에 답글을 추가하겠습니다.
표본 크기를 얻기 위해 일반적으로 추정에 대한 일종의 정밀 기준 (예 : CI의 길이) 또는 데이터에 대해 수행 할 특정 시험 대안의 검정력을 지정합니다. 이 두 가지 기준을 모두 언급 한 것 같습니다. 원칙적으로 아무 문제가 없습니다. 그러면 두 가지 샘플 크기 계산을 수행해야합니다. 하나는 원하는 추정 정밀도를 달성하기 위해, 다른 하나는 명시된 대안에서 원하는 전력을 얻습니다. 두 샘플 크기 중 더 큰 것이 필요합니다. [btw – 80 %의 전력을 말하는 것 외에는 수행하려는 테스트 또는 80 %의 전력을 원하는 대안을 언급하지 않은 것 같습니다.]
순차적 분석을 사용하는 경우 : 피험자가 동시에 연구에 등록하는 경우 고정 된 표본 크기가 적합합니다. 그러나 과목이 거의없고 사이에 있으면 필요한 수를 등록하는 데 1 년 또는 2 년 (또는 그 이상)이 걸릴 수 있습니다. 따라서 재판은 3 년 또는 4 년 동안 진행될 수있다. 이 경우, 순차 계획은 그보다 더 빨리 중단 될 가능성을 제공합니다. 만약 당신이 찾고있는 효과가 시험 초기에 통계적으로 유의 해지면.