Tôi đang tìm kiếm một chương trình (trong R hoặc SAS hoặc độc lập, nếu miễn phí hoặc chi phí thấp) sẽ thực hiện phân tích công suất cho hồi quy logistic thông thường.
Tôi đang tìm kiếm một chương trình (trong R hoặc SAS hoặc độc lập, nếu miễn phí hoặc chi phí thấp) sẽ thực hiện phân tích công suất cho hồi quy logistic thông thường.
Câu trả lời:
Tôi thích làm phân tích sức mạnh vượt ra ngoài những điều cơ bản bằng mô phỏng. Với các gói có sẵn, tôi không bao giờ chắc chắn những giả định nào đang được thực hiện.
Mô phỏng cho sức mạnh là khá đơn giản (và giá cả phải chăng) bằng cách sử dụng R.
replicate
chức năng để chạy mã từ trên một loạt lần (tôi thường bắt đầu khoảng 100 lần để có cảm giác mất bao lâu và để có được khu vực chung phù hợp, sau đó tăng lên 1.000 và đôi khi 10.000 hoặc 100.000 cho giá trị cuối cùng mà tôi sẽ sử dụng). Tỷ lệ số lần bạn từ chối giả thuyết khống là sức mạnh.Đây là một ví dụ đơn giản với hồi quy thứ tự:
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
không có trong chức năng và không sửa đổi. Hàm trả về giá trị p (giá trị phù hợp với $ stats [5]) cho một lần lặp, sao chép chạy hàm 1.000 lần (hoặc bất kỳ số nào bạn chỉ định) và trả về 1.000 giá trị p, mean
sau đó hàm sẽ tính tỷ lệ các xét nghiệm sẽ từ chối null tại.
Tôi sẽ thêm một điều nữa vào câu trả lời của Snow (và điều này áp dụng cho bất kỳ phân tích sức mạnh nào thông qua mô phỏng) - chú ý xem bạn có đang tìm kiếm thử nghiệm 1 hoặc 2 đuôi hay không. Các chương trình phổ biến như G * Power mặc định cho kiểm tra 1 đuôi và nếu bạn đang cố gắng xem liệu mô phỏng của mình có khớp với chúng không (luôn luôn là một ý tưởng hay khi bạn học cách làm điều này), trước tiên bạn sẽ muốn kiểm tra xem.
Để làm cho Snow chạy thử nghiệm 1 đuôi, tôi sẽ thêm một tham số gọi là "đuôi" vào các đầu vào hàm và đặt một cái gì đó như thế này vào chính hàm:
#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
Phiên bản 1 đuôi về cơ bản kiểm tra xem hệ số có dương không, và sau đó giảm giá trị p xuống một nửa.
Bên cạnh ví dụ tuyệt vời của Snow, tôi tin rằng bạn cũng có thể thực hiện mô phỏng sức mạnh bằng cách lấy mẫu lại từ bộ dữ liệu hiện có có tác dụng của bạn. Không hẳn là một bootstrap, vì bạn không lấy mẫu thay thế cùng n , nhưng cùng một ý tưởng.
Vì vậy, đây là một ví dụ: Tôi đã thực hiện một thử nghiệm bản thân nhỏ trong một ước tính điểm tích cực nhưng vì nó rất nhỏ, gần như không có ý nghĩa thống kê trong hồi quy logistic thông thường. Với ước tính điểm đó, tôi cần bao nhiêu n ? Đối với nhiều càng tốt n , tôi nhiều lần tạo ra một tập dữ liệu & chạy hồi quy logistic thứ tự & cưa nhỏ như thế nào p -giá trị là:
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)))
}
Với đầu ra (đối với tôi):
[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
Trong trường hợp này, tại n = 600, công suất là 32%. Không đáng khích lệ lắm.
(Nếu cách tiếp cận mô phỏng của tôi là sai, xin vui lòng ai đó cho tôi biết. Tôi sẽ gửi một vài bài báo y tế thảo luận về mô phỏng sức mạnh để lập kế hoạch thử nghiệm lâm sàng, nhưng tôi không chắc chắn về việc thực hiện chính xác của mình.)
Đề cập đến mô phỏng đầu tiên (được đề xuất bởi Snow; /stats//a/22410/231675 ):
Tôi vẫn không chắc mô phỏng sẽ như thế nào với nhiều biến độc lập hơn (cụ thể là ba). Tôi hiểu rằng tôi nên 'bao gồm tất cả chúng trong phần eta1, ví dụ eta1 <- beta0 + beta1 * x1 + beta2 * x2 + beta3 * x3' '(như đã đề cập ở trên). Nhưng tôi không biết làm thế nào để điều chỉnh phần còn lại của các tham số trong hàm. Ai đó có thể giúp tôi với điều này?