मैं एक कार्यक्रम (आर या एसएएस या स्टैंडअलोन में, अगर मुफ्त या कम लागत) की तलाश कर रहा हूं जो कि ऑर्डिनल लॉजिस्टिक रिग्रेशन के लिए शक्ति विश्लेषण करेगा।
मैं एक कार्यक्रम (आर या एसएएस या स्टैंडअलोन में, अगर मुफ्त या कम लागत) की तलाश कर रहा हूं जो कि ऑर्डिनल लॉजिस्टिक रिग्रेशन के लिए शक्ति विश्लेषण करेगा।
जवाबों:
मैं सिमुलेशन द्वारा मूल बातों से परे शक्ति विश्लेषण करना पसंद करता हूं। पहले से तैयार किए गए पैकेजों के साथ, मैं कभी भी निश्चित नहीं हूं कि क्या धारणाएं बन रही हैं।
आर का उपयोग करके बिजली के लिए अनुकरण करना बहुत सीधे आगे (और सस्ती) है।
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] में है) लौटाता है, फ़ंक्शन को 1,000 बार चलाता है (या जो भी संख्या आप निर्दिष्ट करते हैं) और 1,000 पी-मान लौटाता है, mean
फ़ंक्शन तब अनुपात का अनुपात करता है परीक्षण जो null को पर अस्वीकार कर देंगे ।
मैं स्नो के जवाब में एक और बात जोड़ूंगा (और यह सिमुलेशन के माध्यम से किसी भी शक्ति विश्लेषण पर लागू होता है) - ध्यान दें कि क्या आप 1 या 2 पूंछ वाले परीक्षण की तलाश कर रहे हैं। G * जैसे लोकप्रिय प्रोग्राम 1-टेल्ड टेस्ट के लिए पावर डिफॉल्ट करते हैं, और यदि आप यह देखने की कोशिश कर रहे हैं कि क्या आपके सिमुलेशन उनसे मेल खाते हैं (हमेशा एक अच्छा विचार जब आप यह करना सीख रहे हैं), तो आप पहले चेक करना चाहेंगे।
स्नो के रन-टू-टेस्ट का परीक्षण करने के लिए, मैं फंक्शन इनपुट्स में "टेल" नामक एक पैरामीटर जोड़ूंगा, और फ़ंक्शन में कुछ इस तरह से डालूंगा:
#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
1-पूंछ वाला संस्करण मूल रूप से यह देखने के लिए जांचता है कि गुणांक सकारात्मक है, और फिर आधे में पी-मूल्य में कटौती करता है।
स्नो के उत्कृष्ट उदाहरण के अलावा, मेरा मानना है कि आप मौजूदा डेटासेट से फिर से सैंपलिंग करके एक पावर सिमुलेशन भी कर सकते हैं, जिसका प्रभाव आपके पास है। काफी बूटस्ट्रैप नहीं है, क्योंकि आप एक ही n , लेकिन एक ही विचार का नमूना-प्रतिस्थापन नहीं कर रहे हैं ।
इसलिए यहाँ एक उदाहरण है: मैंने थोड़ा आत्म-प्रयोग किया, जो एक सकारात्मक बिंदु-अनुमान में बदल गया, लेकिन क्योंकि यह बहुत कम था, क्रमिक लॉजिस्टिक प्रतिगमन में लगभग सांख्यिकीय रूप से महत्वपूर्ण नहीं था। उस बिंदु-अनुमान के साथ, मुझे कितने बड़े एन की आवश्यकता होगी? विभिन्न संभावित n के लिए , मैंने कई बार एक डेटा जनरेट किया और क्रमिक लॉजिस्टिक रिग्रेशन चलाया और देखा कि पी- पॉवेल कितना छोटा था:
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% थी। बहुत उत्साहजनक नहीं।
(यदि मेरा अनुकार दृष्टिकोण गलत है, तो कृपया मुझे कोई बताएं। मैं नैदानिक परीक्षणों की योजना बनाने के लिए पावर सिमुलेशन पर चर्चा करने वाले कुछ मेडिकल पेपर बंद कर रहा हूं, लेकिन मैं अपने सटीक कार्यान्वयन के बारे में निश्चित नहीं हूं।)
पहले सिमुलेशन का उल्लेख (हिम द्वारा सुझाया गया; /stats//a/22410/231675 ):
मुझे अभी भी यकीन नहीं है कि सिमुलेशन को अधिक (विशेष रूप से, तीन) स्वतंत्र चर के साथ कैसे दिखना चाहिए। मैं समझता हूं कि मुझे उन सभी को eta1 पीस में शामिल करना चाहिए, जैसे कि eta1 <- Beta0 + Beta1 * X1 + Beta2 * x2 + beta3 * x3 '' (जैसा कि ऊपर बताया गया है)। लेकिन मुझे नहीं पता कि फ़ंक्शन में बाकी मापदंडों को कैसे समायोजित किया जाए। किसी ने मुझे इस के साथ मदद कर सकता है?