순서 형 로지스틱 회귀 분석을위한 전력 분석을 수행 할 프로그램 (R 또는 SAS 또는 무료 또는 저렴한 경우 독립형)을 찾고 있습니다.
순서 형 로지스틱 회귀 분석을위한 전력 분석을 수행 할 프로그램 (R 또는 SAS 또는 무료 또는 저렴한 경우 독립형)을 찾고 있습니다.
답변:
시뮬레이션을 통해 기본을 뛰어 넘는 전력 분석을 선호합니다. 미리 준비된 패키지를 사용하면 어떤 가정을하고 있는지 확신 할 수 없습니다.
전력 시뮬레이션은 R을 사용하여 매우 간단하고 저렴합니다.
replicate
함수를 사용하여 코드를 여러 번 위에서 실행하십시오 (일반적으로 약 100 번 시작하여 걸리는 시간에 대한 느낌을 얻고 올바른 일반 영역을 얻은 다음 최대 1,000 번, 때로는 10,000 또는 100,000 사용할 최종 값). 귀무 가설을 기각 한 횟수의 비율은 검정력입니다.순서 회귀 분석을 사용한 간단한 예는 다음과 같습니다.
library(rms)
tmpfun <- function(n, beta0, beta1, beta2) {
x <- runif(n, 0, 10)
eta1 <- beta0 + beta1*x
eta2 <- eta1 + beta2
p1 <- exp(eta1)/(1+exp(eta1))
p2 <- exp(eta2)/(1+exp(eta2))
tmp <- runif(n)
y <- (tmp < p1) + (tmp < p2)
fit <- lrm(y~x)
fit$stats[5]
}
out <- replicate(1000, tmpfun(100, -1/2, 1/4, 1/4))
mean( out < 0.05 )
eta1 <- beta0 + beta1*x1 + beta2*x2 + beta3*x3
.
replicate
함수에없고 수정하지 않습니다. 이 기능은 하나의 반복에 대해 (맞춤 $ 통계 [5]에서 무엇)의 p 값을 반환 복제 함수 1,000 번 실행 (또는 당신이 무엇을 지정할 수) 반환 1,000 P-값의 mean
기능은 다음의 비율을 계산 에서 널을 거부 할 테스트 .
Snow의 답변에 다른 것을 추가하고 싶습니다 (이는 시뮬레이션을 통한 모든 전력 분석에 적용됨)-1 테일 테스트 또는 2 테일 테스트를 찾고 있는지주의하십시오. G * Power와 같은 인기있는 프로그램은 기본적으로 단측 테스트이며 시뮬레이션이 서로 일치하는지 확인하려는 경우 (이 방법을 배우면 항상 좋은 아이디어 임) 먼저 확인해야합니다.
Snow가 1- 꼬리 테스트를 실행하기 위해 함수 입력에 "tail"이라는 매개 변수를 추가하고 함수 자체에 다음과 같이 입력합니다.
#two-tail test
if (tail==2) fit$stats[5]
#one-tail test
if (tail==1){
if (fit$coefficients[5]>0) {
fit$stats[5]/2
} else 1
단측 버전은 기본적으로 계수가 양수인지 확인한 다음 p- 값을 반으로 자릅니다.
Snow의 훌륭한 예 외에도 기존 데이터 세트에서 리샘플링하여 전력 시뮬레이션을 수행 할 수 있다고 생각합니다. 교체와 함께 동일한 n을 샘플링 하지는 않지만 동일한 아이디어 이므로 부트 스트랩이 아닙니다 .
여기 예가 있습니다 : 나는 약간의 자기 실험 을 실행 하여 긍정적 인 포인트 추정치로 돌아 왔지만, 그것이 적었 기 때문에, 서수 로지스틱 회귀 분석에서 통계적으로 유의하지는 않았습니다. 그 점을 추정하면 얼마나 큰 n 이 필요합니까? 다양한 가능한 n 에 대해 여러 번 데이터 세트를 생성하고 순서 로지스틱 회귀 분석을 실행하고 p- 값이 얼마나 작은 지 보았습니다 .
library(boot)
library(rms)
npt <- read.csv("http://www.gwern.net/docs/nootropics/2013-gwern-noopept.csv")
newNoopeptPower <- function(dt, indices) {
d <- dt[sample(nrow(dt), n, replace=TRUE), ] # new dataset, possibly larger than the original
lmodel <- lrm(MP ~ Noopept + Magtein, data = d)
return(anova(lmodel)[7])
}
alpha <- 0.05
for (n in seq(from = 300, to = 600, by = 30)) {
bs <- boot(data=npt, statistic=newNoopeptPower, R=10000, parallel="multicore", ncpus=4)
print(c(n, sum(bs$t<=alpha)/length(bs$t)))
}
출력으로 (나를 위해) :
[1] 300.0000 0.1823
[1] 330.0000 0.1925
[1] 360.0000 0.2083
[1] 390.0000 0.2143
[1] 420.0000 0.2318
[1] 450.0000 0.2462
[1] 480.000 0.258
[1] 510.0000 0.2825
[1] 540.0000 0.2855
[1] 570.0000 0.3184
[1] 600.0000 0.3175
이 경우, n = 600에서 전력은 32 %였다. 매우 격려하지 않습니다.
(시뮬레이션 접근 방식이 틀리면 누군가에게 말씀해주십시오. 임상 실험 계획을위한 전력 시뮬레이션에 대해 몇 가지 의료 논문을 작성하고 있지만 정확한 구현에 대해서는 확신이 없습니다.)
Snow에서 제안한 첫 번째 시뮬레이션 ( /stats//a/22410/231675 )을 참조하십시오 .
더 많은 (특히 3 개의) 독립 변수를 사용하여 시뮬레이션이 어떻게 표시되는지 잘 모르겠습니다. 나는 'eta1 조각에 모두 포함시켜야합니다. 예 : eta1 <-beta0 + beta1 * x1 + beta2 * x2 + beta3 * x3' ' 그러나 함수의 나머지 매개 변수를 조정하는 방법을 모르겠습니다. 누군가 나를 도와 줄 수 있습니까?