순서 형 로지스틱 회귀 분석을위한 검정력 분석


답변:


27

시뮬레이션을 통해 기본을 뛰어 넘는 전력 분석을 선호합니다. 미리 준비된 패키지를 사용하면 어떤 가정을하고 있는지 확신 할 수 없습니다.

전력 시뮬레이션은 R을 사용하여 매우 간단하고 저렴합니다.

  1. 데이터의 모양과 분석 방법 결정
  2. 주어진 관계 및 표본 크기에 대한 데이터를 시뮬레이트하는 함수 또는 표현식 세트를 작성하고 분석을 수행하십시오 (함수는 표본 크기 및 매개 변수를 인수로 만들어서 다른 값을 쉽게 시도 할 수 있다는 점에서 바람직합니다). 함수 또는 코드는 p- 값 또는 다른 검정 통계량을 반환해야합니다.
  3. replicate함수를 사용하여 코드를 여러 번 위에서 실행하십시오 (일반적으로 약 100 번 시작하여 걸리는 시간에 대한 느낌을 얻고 올바른 일반 영역을 얻은 다음 최대 1,000 번, 때로는 10,000 또는 100,000 사용할 최종 값). 귀무 가설을 기각 한 횟수의 비율은 검정력입니다.
  4. 다른 조건 세트에 대해서는 위의 내용을 다시 실행하십시오.

순서 회귀 분석을 사용한 간단한 예는 다음과 같습니다.

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 )

6
+1, 이것은 매우 강력하고 보편적 인 접근 방식입니다. 나는 종종 그것을 사용했다. 나는 또 다른 기능을 제안하고 싶습니다 : 당신은 최대의 데이터를 생성 할 수 있습니다 다음, 당신이 고려해야 할 연속적으로 최대 일정한 간격으로 N 중 1 피팅하여 이러한 데이터의 비율의 모델에 맞게 = 100 예 (N , 120, 140, 160, 180 및 200). 생성 된 각 데이터 세트에서 p- 값을 저장하는 대신 p- 값 을 저장할 수 있습니다 . 각 열의 평균을 계산하면 전력이 / w로 어떻게 변하는 지 빠르고 신속하게 알 수 있으며 적절한 값으로 빠르게 갈 수 있습니다. N NNNN
gung-복직 모니카

2
@ gung : 귀하의 의견은 말이됩니다 .R의 경험이 적은 사람들도 혜택을 누릴 수 있도록 코드를 추가하고 싶습니까? 감사합니다

1
나는 이것을 다시보고 있고 몇 가지 질문이 있습니다 : 1) 왜 x가 1:10에 균일합니까? 2) 하나 이상의 독립 변수로 어떻게 일반화 하시겠습니까?
Peter Flom-Monica Monica 복원

1
@PeterFlom, x는 무언가 여야 했으므로 0에서 10 사이의 균일 성을 갖도록 (임의로) 선택했습니다. 정상적이거나 감마 등일 수도 있습니다. 실제 예상되는 것과 비슷한 것을 선택하는 것이 가장 좋습니다. 보이는 x 변수. 둘 이상의 예측 변수를 사용하려면 독립적으로 (또는 다변량 법선, copula 등) 변수를 생성 한 다음 eta1 조각에 모두 포함하십시오 (예 :) eta1 <- beta0 + beta1*x1 + beta2*x2 + beta3*x3.
Greg Snow

1
복제가 아닌 @ABC는 단일 결정을 내릴 뿐이므로 테스트 거부 빈도 (파워 정의)를 결정하기 위해 복제가 필요합니다. replicate함수에없고 수정하지 않습니다. 이 기능은 하나의 반복에 대해 (맞춤 $ 통계 [5]에서 무엇)의 p 값을 반환 복제 함수 1,000 번 실행 (또는 당신이 무엇을 지정할 수) 반환 1,000 P-값의 mean기능은 다음의 비율을 계산 에서 널을 거부 할 테스트 . α=0.05
Greg Snow

3

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- 값을 반으로 자릅니다.


2

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 %였다. 매우 격려하지 않습니다.

(시뮬레이션 접근 방식이 틀리면 누군가에게 말씀해주십시오. 임상 실험 계획을위한 전력 시뮬레이션에 대해 몇 가지 의료 논문을 작성하고 있지만 정확한 구현에 대해서는 확신이 없습니다.)


0

Snow에서 제안한 첫 번째 시뮬레이션 ( /stats//a/22410/231675 )을 참조하십시오 .

더 많은 (특히 3 개의) 독립 변수를 사용하여 시뮬레이션이 어떻게 표시되는지 잘 모르겠습니다. 나는 'eta1 조각에 모두 포함시켜야합니다. 예 : eta1 <-beta0 + beta1 * x1 + beta2 * x2 + beta3 * x3' ' 그러나 함수의 나머지 매개 변수를 조정하는 방법을 모르겠습니다. 누군가 나를 도와 줄 수 있습니까?


1
이 질문에 대한 링크가있는 새로운 질문을하면 더 나은 답변을 얻을 수있을 것 같습니다.
mdewey
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.