การวิเคราะห์กำลังไฟสำหรับการถดถอยโลจิสติกอันดับ


12

ฉันกำลังมองหาโปรแกรม (ใน R หรือ SAS หรือสแตนด์อะโลนถ้าฟรีหรือต้นทุนต่ำ) ที่จะทำการวิเคราะห์พลังงานสำหรับการถดถอยโลจิสติกอันดับ

คำตอบ:


27

ฉันชอบที่จะทำการวิเคราะห์พลังงานเกินกว่าพื้นฐานโดยการจำลอง ด้วยแพ็คเกจสำเร็จรูปฉันไม่เคยแน่ใจเลยว่าจะมีการตั้งสมมติฐานอะไร

การจำลองพลังงานค่อนข้างตรงไปตรงมา (และราคาไม่แพง) โดยใช้อาร์

  1. ตัดสินใจว่าคุณคิดว่าข้อมูลของคุณควรเป็นอย่างไรและคุณจะวิเคราะห์อย่างไร
  2. เขียนฟังก์ชั่นหรือชุดของนิพจน์ที่จะจำลองข้อมูลสำหรับความสัมพันธ์และขนาดตัวอย่างที่กำหนดและทำการวิเคราะห์ (ฟังก์ชั่นเป็นที่นิยมในการที่คุณสามารถทำให้ขนาดตัวอย่างและพารามิเตอร์เป็นอาร์กิวเมนต์เพื่อให้ง่ายต่อการลองค่าที่แตกต่างกัน) ฟังก์ชั่นหรือรหัสควรคืนค่า p-value หรือสถิติการทดสอบอื่น ๆ
  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
NNN

2
@gung: ความคิดเห็นของคุณสมเหตุสมผลแล้วคุณจะเพิ่มรหัสของคุณเพื่อให้ผู้คนใน R น้อยลงได้รับประโยชน์จากมันด้วยหรือไม่ ขอบคุณ

1
ฉันกำลังดูสิ่งนี้อีกครั้งและฉันมีคำถามสองสามข้อ: 1) ทำไม x ชุดใน 1:10? 2) คุณจะพูดคุยกับตัวแปรอิสระมากกว่า 1 ตัวอย่างไร
Peter Flom - Reinstate Monica

1
@ PeterFlom, x ต้องเป็นอะไรซักอย่างดังนั้นฉันเลือก (โดยพลการ) เพื่อให้มันมีค่าเหมือนกันระหว่าง 0 และ 10 มันอาจจะเป็นธรรมดาแกมมา ฯลฯ ที่ดีที่สุดคือการเลือกสิ่งที่คล้ายกับที่เราคาดหวังของจริง ตัวแปร x ที่ดูเหมือน หากต้องการใช้มากกว่า 1 ตัวแปรทำนายที่สร้างพวกเขาเป็นอิสระ (หรือจากหลายตัวแปรปกติเชื่อม ฯลฯ ) แล้วก็รวมถึงพวกเขาทั้งหมดในชิ้น eta1 eta1 <- beta0 + beta1*x1 + beta2*x2 + beta3*x3เช่น
เกร็กสโนว์

1
replicatemeanα=0.05

3

ฉันจะเพิ่มอีกอย่างหนึ่งในคำตอบของ Snow (และนี่ใช้กับการวิเคราะห์พลังงานผ่านการจำลอง) - ให้ความสนใจว่าคุณกำลังมองหาการทดสอบแบบเทลด์ 1 หรือ 2 โปรแกรมยอดนิยมเช่น G * Power ค่าเริ่มต้นสำหรับการทดสอบแบบ 1 ด้านและหากคุณพยายามดูว่าแบบจำลองของคุณตรงกับพวกเขาหรือไม่ (เป็นความคิดที่ดีเสมอเมื่อคุณเรียนรู้วิธีการทำเช่นนี้)

เพื่อให้ 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

รุ่น 1 ด้านจะตรวจสอบโดยทั่วไปเพื่อดูว่าสัมประสิทธิ์เป็นค่าบวกแล้วจึงลดค่า p ลงครึ่งหนึ่ง


2

นอกเหนือจากตัวอย่างที่ยอดเยี่ยมของ Snow แล้วฉันเชื่อว่าคุณสามารถทำการจำลองการใช้พลังงานได้ด้วยการ resampling จากชุดข้อมูลที่มีอยู่ซึ่งมีผลกระทบกับคุณ ไม่ใช่บูตสแตรปเนื่องจากคุณไม่ได้สุ่มตัวอย่างพร้อมเปลี่ยนn ตัวเดียวกันแต่เป็นแนวคิดเดียวกัน

นี่คือตัวอย่าง: ฉันทำการทดสอบตัวเองเล็กน้อยซึ่งเปลี่ยนเป็นจุดบวก แต่เพราะน้อยไม่ได้มีนัยสำคัญทางสถิติในการถดถอยโลจิสติกอันดับ ด้วยการประมาณค่าจุดฉันจะต้องการa n จำนวนเท่าใด สำหรับความเป็นไปได้ต่างๆnผมหลายครั้งสร้างชุดข้อมูลและวิ่งถดถอยโลจิสติลำดับและเห็นว่าขนาดเล็กพี -value คือ:

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 ):

ฉันยังไม่แน่ใจว่าการจำลองควรมีลักษณะอย่างไรกับตัวแปรอิสระ (โดยเฉพาะสาม) มากขึ้น ฉันเข้าใจว่าฉันควรรวมไว้ในชิ้นส่วน eta1 เช่น eta1 <- beta0 + beta1 * x1 + beta2 * x2 + beta3 * x3 '' (ดังที่ได้กล่าวไว้ข้างต้น) แต่ฉันไม่ทราบวิธีการปรับพารามิเตอร์ที่เหลือในฟังก์ชั่น มีคนช่วยฉันด้วยสิ่งนี้ได้ไหม


1
ฉันคิดว่าคุณจะได้รับการตอบสนองที่ดีขึ้นถ้าคุณถามคำถามใหม่พร้อมลิงค์กลับไปที่คำถามนี้
mdewey
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.