รอบคัดเลือกโซน:
ตามที่กล่าวไว้ในคู่มือพลังงาน G *มีการวิเคราะห์พลังงานหลายประเภทขึ้นอยู่กับสิ่งที่คุณต้องการแก้ไข (นั่นคือขนาดของเอฟเฟ็กต์ ,และพลังงานที่มีอยู่สัมพันธ์กัน; การระบุสามตัวใด ๆ จะช่วยให้คุณแก้ปัญหาได้ครั้งที่สี่) E S αNESα
- ในคำอธิบายของคุณคุณต้องการทราบที่เหมาะสมเพื่อจับภาพอัตราการตอบกลับที่คุณระบุด้วยและ power = 80% นี่คือพลังพิเศษ α = .05Nα=.05
- เราสามารถเริ่มต้นด้วยพลังงาน post-hoc (กำหนดพลังงานที่กำหนด , อัตราการตอบสนอง & อัลฟา) เนื่องจากนี่คือแนวคิดที่ง่ายขึ้นแล้วเลื่อนขึ้นN
นอกเหนือไปจาก @ GregSnow ของโพสต์ที่ยอดเยี่ยมอีกคำแนะนำที่ดีมากที่จะได้อำนาจจำลองที่ใช้วิเคราะห์ใน CV สามารถพบได้ที่นี่: การคำนวณพลังงานทางสถิติ เพื่อสรุปแนวคิดพื้นฐาน:
- ค้นหาเอฟเฟกต์ที่คุณต้องการตรวจจับ
- สร้างข้อมูล N จากโลกที่เป็นไปได้
- เรียกใช้การวิเคราะห์ที่คุณตั้งใจจะดำเนินการมากกว่าข้อมูลมารยาทเหล่านั้น
- เก็บว่าผลลัพธ์นั้นมีนัยสำคัญหรือไม่ตามอัลฟาที่คุณเลือก
- ทำซ้ำหลายครั้ง( ) ครั้งและใช้% 'สำคัญ' เป็นค่าประมาณของพลังงาน (โพสต์เฉพาะกิจ) ที่NBN
- เพื่อหาค่ากำลังไฟฟ้าเบื้องต้นให้ค้นหาเป็นไปได้เพื่อหาค่าที่ให้กำลังงานที่คุณต้องการ N
ไม่ว่าคุณจะพบความสำคัญในการทำซ้ำโดยเฉพาะอย่างยิ่งสามารถเข้าใจได้เป็นผลของการทดลอง Bernoulli ด้วยความน่าจะเป็น (โดยที่คือพลัง) สัดส่วนที่พบในการวนซ้ำทำให้เราสามารถประมาณค่าจริงได้ เพื่อให้ได้ค่าประมาณที่ดีกว่าเราสามารถเพิ่มถึงแม้ว่าสิ่งนี้จะทำให้การจำลองใช้เวลานานขึ้น p B p BppBpB
ใน R วิธีหลักในการสร้างข้อมูลไบนารี่ที่มีความน่าจะเป็นของ 'ความสำเร็จ' คือ? rbinom
- เช่นเพื่อรับจำนวนความสำเร็จจากการทดลอง 10 Bernoulli ด้วยความน่าจะเป็น p รหัสจะเป็น
rbinom(n=10, size=1, prob=p)
(คุณอาจต้องการกำหนดผลลัพธ์ให้กับตัวแปรสำหรับการจัดเก็บ)
- คุณยังสามารถสร้างข้อมูลดังกล่าวได้อย่างสวยงามน้อยลงโดยใช้? runifเช่น
ifelse(runif(1)<=p, 1, 0)
- หากคุณเชื่อว่าผลลัพธ์นั้นเป็นสื่อกลางโดยตัวแปร Gaussian ที่ซ่อนเร้นคุณสามารถสร้างตัวแปรแฝงเป็นฟังก์ชันของ covariates ของคุณด้วย? rnormแล้วแปลงเป็นความน่าจะเป็นด้วย
pnorm()
และใช้สิ่งเหล่านั้นในrbinom()
รหัส ของคุณ
คุณระบุว่าคุณจะ "รวมคำพหุนามช่วง Var1 * Var1) เพื่ออธิบายความโค้งใด ๆ " มีความสับสนอยู่ที่นี่; คำพหุนามสามารถช่วยเราคิดเรื่องความโค้ง แต่นี่เป็นคำที่ใช้พูดกัน - มันจะไม่ช่วยเราด้วยวิธีนี้ อย่างไรก็ตามอัตราการตอบกลับของคุณกำหนดให้เราต้องรวมทั้งคำที่ยกกำลังสองและคำที่ใช้โต้ตอบในโมเดลของเรา โมเดลของคุณจะต้องมี: ,และเกินข้อกำหนดพื้นฐาน v a r 1 ∗ v a r 2 v a r 1 2 ∗ v a r 2var12var1∗var2var12∗var2
- แม้ว่าเขียนในบริบทของคำถามที่แตกต่างกันคำตอบของฉันที่นี่: ความแตกต่างระหว่างรุ่น logit และ probitมีข้อมูลพื้นฐานมากมายเกี่ยวกับแบบจำลองประเภทนี้
เช่นเดียวกับที่มีชนิดที่แตกต่างกันของความคลาดเคลื่อนประเภทที่เมื่อมีหลายสมมติฐาน (เช่นอัตราความผิดพลาดต่อความคมชัด , อัตราความผิดพลาด familywiseและอัตราความผิดพลาดต่อครอบครัว ) ดังนั้นจะมีชนิดที่แตกต่างกันของการใช้พลังงาน * (เช่นเอฟเฟกต์ที่ระบุไว้ล่วงหน้าเดียวสำหรับเอฟเฟกต์ใด ๆ & สำหรับเอฟเฟกต์ทั้งหมด ) นอกจากนี้คุณยังสามารถค้นหาพลังในการตรวจจับการรวมกันของเอฟเฟกต์เฉพาะหรือสำหรับการทดสอบพลังพร้อมกันของแบบจำลองทั้งหมด ฉันเดาจากคำอธิบายรหัส SAS ของคุณว่ามันกำลังมองหาหลัง อย่างไรก็ตามจากคำอธิบายของคุณเกี่ยวกับสถานการณ์ของคุณฉันถือว่าคุณต้องการตรวจจับเอฟเฟกต์อย่างน้อยที่สุด
สำหรับวิธีอื่นในการคิดเกี่ยวกับปัญหาที่เกี่ยวข้องกับพลังงานดูคำตอบของฉันที่นี่: วิธีการรายงานความแม่นยำทั่วไปในการประมาณค่าสหสัมพันธ์ภายในบริบทของการปรับขนาดตัวอย่างให้เหมาะสม
พลังโพสต์เฉพาะกิจง่าย ๆ สำหรับการถดถอยโลจิสติกใน R:
สมมติว่าอัตราการตอบสนองของคุณแสดงถึงสถานการณ์จริงในโลกและคุณได้ส่งจดหมาย 10,000 ฉบับแล้ว พลังในการตรวจจับผลกระทบเหล่านั้นคืออะไร? (โปรดทราบว่าฉันมีชื่อเสียงในการเขียนโค้ด "ไม่มีประสิทธิภาพตลก ๆ " ต่อไปนี้มีวัตถุประสงค์เพื่อให้ง่ายต่อการติดตามแทนที่จะปรับให้เหมาะสำหรับประสิทธิภาพในความเป็นจริงมันค่อนข้างช้า)
set.seed(1)
repetitions = 1000
N = 10000
n = N/8
var1 = c( .03, .03, .03, .03, .06, .06, .09, .09)
var2 = c( 0, 0, 0, 1, 0, 1, 0, 1)
rates = c(0.0025, 0.0025, 0.0025, 0.00395, 0.003, 0.0042, 0.0035, 0.002)
var1 = rep(var1, times=n)
var2 = rep(var2, times=n)
var12 = var1**2
var1x2 = var1 *var2
var12x2 = var12*var2
significant = matrix(nrow=repetitions, ncol=7)
startT = proc.time()[3]
for(i in 1:repetitions){
responses = rbinom(n=N, size=1, prob=rates)
model = glm(responses~var1+var2+var12+var1x2+var12x2,
family=binomial(link="logit"))
significant[i,1:5] = (summary(model)$coefficients[2:6,4]<.05)
significant[i,6] = sum(significant[i,1:5])
modelDev = model$null.deviance-model$deviance
significant[i,7] = (1-pchisq(modelDev, 5))<.05
}
endT = proc.time()[3]
endT-startT
sum(significant[,1])/repetitions # pre-specified effect power for var1
[1] 0.042
sum(significant[,2])/repetitions # pre-specified effect power for var2
[1] 0.017
sum(significant[,3])/repetitions # pre-specified effect power for var12
[1] 0.035
sum(significant[,4])/repetitions # pre-specified effect power for var1X2
[1] 0.019
sum(significant[,5])/repetitions # pre-specified effect power for var12X2
[1] 0.022
sum(significant[,7])/repetitions # power for likelihood ratio test of model
[1] 0.168
sum(significant[,6]==5)/repetitions # all effects power
[1] 0.001
sum(significant[,6]>0)/repetitions # any effect power
[1] 0.065
sum(significant[,4]&significant[,5])/repetitions # power for interaction terms
[1] 0.017
ดังนั้นเราจึงเห็นว่า 10,000 ตัวอักษรไม่ได้รับพลังงาน 80% (ทุกประเภท) เพื่อตรวจจับอัตราการตอบสนองเหล่านี้ (ฉันไม่แน่ใจเพียงพอเกี่ยวกับสิ่งที่รหัส SAS กำลังทำเพื่ออธิบายความแตกต่างโดยสิ้นเชิงระหว่างวิธีการเหล่านี้ แต่รหัสนี้เป็นแนวคิดที่ตรงไปตรงมา - ถ้าช้า - และฉันใช้เวลาในการตรวจสอบและฉันคิดว่าสิ่งเหล่านี้ ผลลัพธ์มีความสมเหตุสมผล)
การจำลองกำลัง a-Priori สำหรับการถดถอยโลจิสติก:
จากที่นี่ความคิดนั้นเป็นเพียงการค้นหาเป็นไปได้จนกว่าเราจะพบค่าที่ให้ระดับของพลังงานที่คุณต้องการสนใจกลยุทธ์การค้นหาใด ๆ ที่คุณสามารถใช้รหัสเพื่อทำงานกับสิ่งนี้จะดี (ใน ทฤษฎี). เมื่อพิจารณาจากที่จะต้องจับเอฟเฟกต์เล็ก ๆ เหล่านี้มันก็คุ้มค่าที่จะคิดว่าจะทำสิ่งนี้ได้อย่างมีประสิทธิภาพมากขึ้น วิธีการทั่วไปของฉันคือแรงเดรัจฉานเพียงอย่างเดียวคือการประเมินแต่ละที่ฉันอาจพิจารณาอย่างสมเหตุสมผล (หมายเหตุอย่างไรก็ตามโดยทั่วไปแล้วฉันจะพิจารณาเฉพาะช่วงเล็ก ๆ เท่านั้นและโดยทั่วไปฉันทำงานกับน้อยมาก- อย่างน้อยเมื่อเทียบกับสิ่งนี้) N N N NNNNN
แต่กลยุทธ์ของฉันในที่นี้คือเพื่อยึดเป็นไปได้เพื่อให้ได้ความรู้สึกของพลังที่หลากหลาย ดังนั้นฉันเลือกของ 500,000 และเรียกใช้โค้ดอีกครั้ง (เริ่มต้นเมล็ดเดียวกัน nb ซึ่งใช้เวลาหนึ่งชั่วโมงครึ่งในการรัน) นี่คือผลลัพธ์: NNN
sum(significant[,1])/repetitions # pre-specified effect power for var1
[1] 0.115
sum(significant[,2])/repetitions # pre-specified effect power for var2
[1] 0.091
sum(significant[,3])/repetitions # pre-specified effect power for var12
[1] 0.059
sum(significant[,4])/repetitions # pre-specified effect power for var1X2
[1] 0.606
sum(significant[,5])/repetitions # pre-specified effect power for var12X2
[1] 0.913
sum(significant[,7])/repetitions # power for likelihood ratio test of model
[1] 1
sum(significant[,6]==5)/repetitions # all effects power
[1] 0.005
sum(significant[,6]>0)/repetitions # any effect power
[1] 0.96
sum(significant[,4]&significant[,5])/repetitions # power for interaction terms
[1] 0.606
เราสามารถเห็นได้จากสิ่งนี้ว่าขนาดของเอฟเฟกต์ของคุณนั้นแตกต่างกันไปอย่างมาก ตัวอย่างเช่นผลกระทบของนั้นยากต่อการตรวจจับโดยเฉพาะอย่างยิ่งมีความหมายเพียง 6% ของเวลาแม้จะมีตัวอักษรครึ่งล้านก็ตาม ในทางกลับกันโมเดลโดยรวมนั้นดีกว่าโมเดลโมฆะอย่างมีนัยสำคัญเสมอ ความเป็นไปได้อื่น ๆ นั้นอยู่ระหว่าง แม้ว่าส่วนใหญ่ของ 'ข้อมูล' จะถูกโยนทิ้งไปในแต่ละรอบการทำซ้ำ แต่การสำรวจที่ดีก็ยังคงเป็นไปได้ ตัวอย่างเช่นเราสามารถใช้เมทริกซ์เพื่อประเมินความสัมพันธ์ระหว่างความน่าจะเป็นของตัวแปรต่าง ๆ ที่มีนัยสำคัญ var12significant
ฉันควรทราบโดยสรุปว่าเนื่องจากความซับซ้อนและขนาดใหญ่ที่เกี่ยวข้องในสถานการณ์ของคุณจึงไม่ง่ายอย่างที่ฉันสงสัย / อ้างสิทธิ์ในความคิดเห็นเริ่มต้นของฉัน อย่างไรก็ตามคุณสามารถได้รับแนวคิดเกี่ยวกับวิธีการนี้โดยทั่วไปและประเด็นที่เกี่ยวข้องกับการวิเคราะห์พลังงานจากสิ่งที่ฉันได้วางไว้ที่นี่ HTH N