Persiapan:
Seperti dibahas dalam manual G * Power , ada beberapa jenis analisis daya, tergantung pada apa yang ingin Anda selesaikan. (Yaitu, , ukuran efek , , dan power ada dalam hubungannya satu sama lain; dengan menentukan tiga dari mereka akan membiarkan Anda menyelesaikan untuk yang keempat.) E S αNESα
- dalam deskripsi Anda, Anda ingin tahu sesuai untuk menangkap tingkat respons yang Anda tentukan dengan , dan daya = 80%. Ini adalah kekuatan a-priori . α = .05Nα = .05
- kita dapat mulai dengan kekuatan post-hoc (tentukan daya yang diberikan , tingkat respons, & alpha) karena ini secara konsep lebih sederhana, dan kemudian naikN
Selain postingan @ GregSnow yang luar biasa , panduan hebat lainnya untuk analisis daya berbasis simulasi pada CV dapat ditemukan di sini: Menghitung kekuatan statistik . Untuk merangkum ide-ide dasar:
- mencari tahu efek yang Anda ingin dapat dideteksi
- menghasilkan data N dari dunia yang mungkin
- jalankan analisis yang ingin Anda lakukan atas data palsu itu
- simpan apakah hasilnya 'signifikan' sesuai dengan alpha yang Anda pilih
- ulangi banyak ( ) kali & gunakan% 'signifikan' sebagai perkiraan daya (post-hoc) diNBN
- untuk menentukan kekuatan a-priori, cari kemungkinan untuk menemukan nilai yang menghasilkan kekuatan yang Anda inginkan N
Apakah Anda akan menemukan signifikansi pada iterasi tertentu dapat dipahami sebagai hasil dari percobaan Bernoulli dengan probabilitas (di mana adalah kekuatan). Proporsi yang ditemukan di atas iterasi memungkinkan kita untuk memperkirakan sebenarnya . Untuk mendapatkan perkiraan yang lebih baik, kita dapat meningkatkan , meskipun ini juga akan membuat simulasi lebih lama. p B p BhalhalBhalB
Dalam R, cara utama untuk menghasilkan data biner dengan probabilitas keberhasilan yang diberikan adalah ? Rbinom
- Misalnya untuk mendapatkan jumlah keberhasilan dari 10 percobaan Bernoulli dengan probabilitas p, kodenya adalah
rbinom(n=10, size=1, prob=p)
, (Anda mungkin ingin menugaskan hasilnya ke variabel untuk penyimpanan)
- Anda juga dapat menghasilkan data seperti itu dengan kurang elegan dengan menggunakan ? runif , misalnya,
ifelse(runif(1)<=p, 1, 0)
- jika Anda yakin hasilnya dimediasi oleh variabel Gaussian laten, Anda dapat menghasilkan variabel laten sebagai fungsi kovariat Anda dengan ? rnorm , dan kemudian mengubahnya menjadi probabilitas dengan
pnorm()
dan menggunakannya dalam rbinom()
kode Anda .
Anda menyatakan bahwa Anda akan "memasukkan istilah polinomial Var1 * Var1) untuk memperhitungkan setiap kelengkungan". Ada kebingungan di sini; istilah polinom dapat membantu kita menjelaskan kelengkungan, tetapi ini adalah istilah interaksi - itu tidak akan membantu kita dengan cara ini. Meskipun demikian, tingkat respons Anda mengharuskan kami untuk memasukkan istilah kuadrat dan istilah interaksi dalam model kami. Khususnya, model Anda perlu menyertakan: , , dan , di luar ketentuan dasar. v a r 1 ∗ v a r 2 v a r 1 2 ∗ v a r 2v a r 12v a r 1 ∗ v a r 2v a r 12∗ v a r 2
- Meskipun ditulis dalam konteks pertanyaan yang berbeda, jawaban saya di sini: Perbedaan antara model logit dan probit memiliki banyak informasi dasar tentang jenis model ini.
Seperti halnya ada berbagai jenis Tipe I tingkat kesalahan ketika ada beberapa hipotesis (misalnya, tingkat kesalahan per-kontras , tingkat kesalahan familywise , & tingkat kesalahan per-keluarga ), sehingga ada berbagai jenis kekuasaan (misalnya, untuk sebuah efek yang ditentukan sebelumnya , untuk efek apa pun , & untuk semua efek ). Anda juga dapat mencari kekuatan untuk mendeteksi kombinasi efek tertentu, atau untuk kekuatan uji simultan model secara keseluruhan. Dugaan saya dari deskripsi kode SAS Anda adalah bahwa ia mencari yang terakhir. Namun, dari uraian situasi Anda, saya mengasumsikan Anda ingin mendeteksi efek interaksi seminimal mungkin.
- * referensi: Maxwell, SE (2004). Kegigihan studi yang kurang kuat dalam penelitian psikologis: penyebab, konsekuensi, dan perbaikan. Metode Psikologis , 9 , 2 , hlm. 147-163.
- efek Anda cukup kecil (jangan dikacaukan dengan tingkat respons yang rendah), jadi kami akan kesulitan mencapai kekuatan yang baik.
- Perhatikan bahwa, meskipun semua ini terdengar sangat mirip, mereka sangat tidak sama (misalnya, sangat mungkin untuk mendapatkan model yang signifikan tanpa efek yang signifikan - dibahas di sini: Bagaimana regresi menjadi signifikan namun semua prediktor tidak signifikan?, atau efek signifikan tetapi di mana model tidak signifikan - dibahas di sini: Signifikansi koefisien dalam regresi linier: t-test signifikan vs F-statistik tidak signifikan ), yang akan diilustrasikan di bawah ini.
Untuk cara berbeda dalam memikirkan masalah yang berkaitan dengan kekuasaan, lihat jawaban saya di sini: Cara melaporkan ketepatan umum dalam memperkirakan korelasi dalam konteks justifikasi ukuran sampel.
Kekuatan post-hoc sederhana untuk regresi logistik di R:
Katakanlah tingkat respons yang Anda ajukan mewakili situasi sebenarnya di dunia, dan Anda telah mengirim 10.000 surat. Apa kekuatan untuk mendeteksi efek-efek itu? (Perhatikan bahwa saya terkenal karena menulis kode "komikal tidak efisien", yang berikut ini dimaksudkan untuk mudah diikuti daripada dioptimalkan untuk efisiensi; pada kenyataannya, ini sangat lambat.)
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
Jadi kita melihat bahwa 10.000 huruf tidak benar-benar mencapai daya 80% (dalam bentuk apa pun) untuk mendeteksi tingkat respons ini. (Saya tidak cukup yakin tentang apa yang dilakukan kode SAS untuk dapat menjelaskan perbedaan mencolok antara pendekatan ini, tetapi kode ini secara konseptual mudah - jika lambat - dan saya telah meluangkan waktu untuk memeriksanya, dan saya pikir ini hasilnya masuk akal.)
Kekuatan a-priori berbasis simulasi untuk regresi logistik:
Dari sini idenya adalah hanya untuk mencari kemungkinan sampai kita menemukan nilai yang menghasilkan tingkat yang diinginkan dari jenis daya yang Anda minati. Setiap strategi pencarian yang dapat Anda kodekan untuk bekerja dengan ini akan baik-baik saja (dalam teori). Mengingat 's yang akan diperlukan untuk menangkap efek kecil seperti itu, ada baiknya memikirkan bagaimana melakukan ini dengan lebih efisien. Pendekatan khas saya hanyalah kekuatan kasar, yaitu untuk menilai setiap yang mungkin saya pertimbangkan. (Namun perhatikan, bahwa saya biasanya hanya mempertimbangkan kisaran kecil, dan saya biasanya bekerja dengan sangat kecil - setidaknya dibandingkan dengan ini.) N N NNNNN
Alih-alih, strategi saya di sini adalah mengurung kemungkinan untuk mengetahui kisaran daya yang akan terjadi. Jadi, saya mengambil dari 500.000 dan menjalankan kembali kode (memulai benih yang sama, nb ini membutuhkan waktu satu setengah jam untuk menjalankan). Inilah hasilnya: 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
Kita dapat melihat dari sini bahwa besarnya efek Anda sangat bervariasi, dan dengan demikian kemampuan Anda untuk mendeteksinya bervariasi. Misalnya, efek sangat sulit dideteksi, hanya signifikan 6% dari waktu bahkan dengan setengah juta huruf. Di sisi lain, model secara keseluruhan selalu jauh lebih baik daripada model nol. Kemungkinan lain tersusun di antara keduanya. Meskipun sebagian besar 'data' dibuang pada setiap iterasi, sedikit eksplorasi masih mungkin dilakukan. Sebagai contoh, kita dapat menggunakan matriks untuk menilai korelasi antara probabilitas variabel yang berbeda menjadi signifikan. v a r 12significant
Saya harus mencatat sebagai kesimpulan, bahwa karena kompleksitas dan besar yang diperlukan dalam situasi Anda, ini tidak sesederhana seperti yang saya duga / klaim dalam komentar awal saya. Namun, Anda tentu bisa mendapatkan ide untuk bagaimana hal ini dapat dilakukan secara umum, dan masalah yang terlibat dalam analisis kekuatan, dari apa yang saya taruh di sini. HTH. N