Menilai kekuatan tes normalitas (dalam R)

9

Saya ingin menilai keakuratan tes normalitas pada ukuran sampel yang berbeda dalam R (Saya menyadari bahwa tes normalitas dapat menyesatkan ). Sebagai contoh, untuk melihat tes Shapiro-Wilk, saya sedang melakukan simulasi berikut (dan juga merencanakan hasilnya) dan berharap bahwa ketika ukuran sampel meningkatkan kemungkinan menolak nol menurun:

n <- 1000
pvalue_mat <- matrix(NA, ncol = 1, nrow = n)

for(i in 10:n){
    x1 <- rnorm(i, mean = 0, sd = 1)
    pvalue_mat[i,] <- shapiro.test(x1)$p.value
}   

plot(pvalue_mat)

Pikiranku adalah bahwa ketika ukuran sampel tumbuh harus ada tingkat penolakan yang lebih rendah, namun tampaknya cukup seragam. Saya pikir saya salah paham tentang ini - semua dan semua pikiran diterima.

pengguna94759
sumber
2
Anda mungkin ingin melihat di: stats.stackexchange.com/questions/2492/…
nico

Jawaban:

7

Anda mensimulasikan di bawah hipotesis nol (distribusi normal), oleh karena itu tingkat penolakan akan cenderung ke tingkat signifikansi seperti yang diharapkan. Untuk menilai daya, Anda perlu mensimulasikan di bawah distribusi tidak normal. Ada kemungkinan / skenario tak terbatas (mis. Distribusi gamma dengan kemiringan yang meningkat, distribusi-t dengan penurunan df, dll.) Untuk dipilih, tergantung pada ruang lingkup studi Anda.

Michael M.
sumber
Terima kasih atas tanggapannya. Ketika saya mensimulasikan distribusi non-normal, saya mengamati pola cembung sehubungan dengan asal - yaitu ketika ukuran sampel semakin besar untuk distribusi non-normal, probabilitas menolak nol normal meningkat. Namun, saya tidak mengerti mengapa itu bukan kebalikannya ketika menggambar dari distribusi normal: mengapa probabilitas penolakan nol menurun karena ukuran sampel semakin besar? Terima kasih
user94759
3
Karena probabilitas melakukan kesalahan tipe-1 tersebut menurut definisi sama dengan tingkat signifikansi, yang konstan. Atau dengan kata lain, nilai p didistribusikan secara seragam di bawah nol. Btw, disarankan untuk melakukan banyak simulasi per pengaturan, termasuk pilihan n, bukan hanya satu seperti pada kode Anda.
Michael M
7

Memahami analisis kekuatan dari uji hipotesis statistik dapat ditingkatkan dengan melakukan beberapa dan melihat hasilnya dengan cermat.


Dengan desain, tes ukuran yang dimaksudkan untuk menolak hipotesis nol dengan kesempatan minimal ketika nol adalah benar (diharapkan yang tingkat positif palsu ). αα Ketika kita memiliki kemampuan (atau kemewahan) untuk memilih di antara prosedur-prosedur alternatif dengan properti ini, kita akan lebih menyukai prosedur yang (a) mendekati tingkat false positive nominal dan (b) memiliki peluang yang relatif lebih tinggi untuk menolak hipotesis nol ketika itu adalah tidak benar.

Kriteria kedua mengharuskan kita untuk menentukan dengan cara apa dan seberapa besar kegagalan itu tidak benar. Dalam kasus buku teks, ini mudah, karena alternatifnya terbatas dalam cakupan dan ditentukan dengan jelas. Dengan tes distribusi seperti Shapiro-Wilk, alternatifnya jauh lebih kabur: mereka "tidak normal." Ketika memilih di antara tes distribusi, maka, analis cenderung harus melakukan studi kekuatan satu kali mereka sendiri untuk menilai seberapa baik tes bekerja terhadap hipotesis alternatif yang lebih spesifik yang menjadi perhatian dalam masalah yang dihadapi.

Sebuah contoh yang dimotivasi oleh jawaban Michael Mayer berpendapat bahwa distribusi alternatif mungkin memiliki kualitas yang mirip dengan distribusi keluarga Siswa. Keluarga ini, yang diparameterisasi dengan angka (serta menurut lokasi dan skala) termasuk dalam batas besar distribusi Normal.ν1ν

Dalam situasi apa pun - apakah mengevaluasi ukuran tes aktual atau kekuatannya - kita harus menghasilkan sampel independen dari distribusi yang ditentukan, menjalankan tes pada setiap sampel, dan menemukan tingkat di mana ia menolak hipotesis nol. Namun, ada lebih banyak informasi yang tersedia di setiap hasil tes: nilai-P-nya. Dengan mempertahankan set nilai-P yang dihasilkan selama simulasi seperti itu, kita nanti dapat menilai tingkat di mana tes akan menolak nol untuk setiap nilai mungkin kita pedulikan. Inti dari analisis daya, kemudian, adalah subrutin yang menghasilkan distribusi nilai-P ini (baik dengan simulasi, seperti yang baru saja dijelaskan, atau - kadang-kadang - dengan rumus teoretis). Berikut adalah contoh kode . Argumennya termasukαR

  • rdist, nama fungsi untuk menghasilkan sampel acak dari beberapa distribusi

  • n, ukuran sampel untuk permintaan rdist

  • n.iter, jumlah sampel tersebut untuk mendapatkan

  • ..., setiap parameter opsional untuk diteruskan ke rdist(seperti derajat kebebasan ).ν

Parameter yang tersisa mengontrol tampilan hasil; mereka dimasukkan terutama sebagai kenyamanan untuk menghasilkan angka-angka dalam jawaban ini.

sim <- function(rdist, n, n.iter, prefix="",
                breaks=seq(0, 1, length.out=20), alpha=0.05,
                plot=TRUE, ...) {

  # The simulated P-values.
  # NB: The optional arguments "..." are passed to `rdist` to specify
  #     its parameters (if any).
  x <- apply(matrix(rdist(n*n.iter, ...), ncol=n.iter), 2, 
             function(y) shapiro.test(y)$p.value)

  # The histogram of P-values, if requested.
  if (plot) {
    power <- mean(x <= alpha)
    round.n <- 1+ceiling(log(1 + n.iter * power * (1-power), base=10) / 2)
    hist(x[x <= max(breaks)], xlab=paste("P value (n=", n, ")", sep=""), 
         breaks=breaks, 
         main=paste(prefix, "(power=", format(power, digits=round.n), ")", sep=""))
    # Specially color the "significant" part of the histogram
    hist(x[x <= alpha], breaks=breaks, col="#e0404080", add=TRUE)
  }

  # Return the array of P-values for any further processing.
  return(x)
}

Anda dapat melihat perhitungan sebenarnya hanya membutuhkan satu baris; sisa kode memplot histogram. Sebagai ilustrasi, mari kita gunakan untuk menghitung tingkat positif palsu yang diharapkan. "Tarif" dalam bentuk jamak karena sifat-sifat suatu tes biasanya bervariasi dengan ukuran sampel. Karena sudah diketahui bahwa tes distribusi memiliki daya tinggi terhadap alternatif kecil secara kualitatif ketika ukuran sampel besar, penelitian ini berfokus pada serangkaian ukuran sampel kecil di mana tes semacam itu sering diterapkan dalam praktik: biasanya sekitar hingga Untuk menghemat perhitungan waktu, saya hanya melaporkan nilai dari hingga5100.n520.

n.iter <- 10^5                 # Number of samples to generate
n.spec <- c(5, 10, 20)         # Sample sizes to study
par(mfrow=c(1,length(n.spec))) # Organize subsequent plots into a tableau
system.time(
  invisible(sapply(n.spec, function(n) sim(rnorm, n, n.iter, prefix="DF = Inf ")))
)

Setelah menentukan parameter, kode ini juga hanya satu baris. Ini menghasilkan output berikut:

Histogram untuk null

Ini adalah penampilan yang diharapkan: histogram menunjukkan distribusi nilai-P yang hampir seragam di seluruh rentang dari hingga . Dengan ukuran nominal yang ditetapkan pada laporan simulasi antara dan dari nilai-P sebenarnya kurang dari ambang itu: ini adalah hasil yang disorot dengan warna merah. Kedekatan frekuensi ini dengan nilai nominal membuktikan bahwa tes Shapiro-Wilk memang berkinerja seperti yang diiklankan.01α=0.05,.04810.0499

(Tampaknya ada kecenderungan ke arah frekuensi tinggi dari nilai-P di dekat Ini adalah masalah kecil, karena di hampir semua aplikasi satu-satunya nilai P yang dilihat adalah atau kurang.)10.2

Mari kita beralih sekarang untuk menilai kekuatan. Rentang nilai penuh dari untuk distribusi t Student dapat dipelajari dengan cukup dengan menilai beberapa contoh dari sekitar ke bawah ke . Bagaimana saya tahu itu? Saya melakukan beberapa pendahuluan menggunakan jumlah iterasi yang sangat kecil (dari hingga ), yang tidak membutuhkan waktu sama sekali. Kode sekarang memerlukan loop ganda (dan dalam situasi yang lebih kompleks kita sering membutuhkan loop tiga atau empat kali lipat untuk mengakomodasi semua aspek yang kita perlu bervariasi): satu untuk mempelajari bagaimana kekuatan bervariasi dengan ukuran sampel dan yang lain untuk mempelajari bagaimana bervariasi dengan derajat kebebasan. Namun, sekali lagi, semuanya dilakukan hanya dalam satu baris kode (yang ketiga dan terakhir):νν=100ν=11001000

df.spec <- c(64, 16, 4, 2, 1)
par(mfrow=c(length(n.spec), length(df.spec)))
for (n in n.spec) 
  for (df in df.spec)
    tmp <- sim(rt, n, n.iter, prefix=paste("DF =", df, ""), df=df)

Histogram untuk alternatifnya

Sebuah studi kecil tentang tablo ini memberikan intuisi yang baik tentang kekuasaan. Saya ingin menarik perhatian pada aspek yang paling menonjol dan berguna:

  • Ketika derajat kebebasan berkurang dari di sebelah kiri ke di sebelah kanan, semakin banyak nilai-P kecil, yang menunjukkan bahwa kekuatan untuk membedakan distribusi ini dari distribusi Normal meningkat. (Kekuatan dihitung dalam setiap judul plot: itu sama dengan proporsi area histogram yang berwarna merah.)ν=64ν=1

  • Ketika ukuran sampel meningkat dari di baris atas ke di bagian bawah, daya juga meningkat.n=5n=20

  • Perhatikan bagaimana distribusi alternatif lebih berbeda dari distribusi nol dan ukuran sampel meningkat, nilai-P mulai mengumpulkan ke kiri, tetapi masih ada "ekor" dari mereka yang merentang hingga . Ini adalah karakteristik dari studi kekuatan. Ini menunjukkan bahwa pengujian adalah pertaruhan : bahkan ketika hipotesis nol dilanggar secara mencolok dan bahkan ketika ukuran sampel kami cukup besar, pengujian formal kami mungkin gagal menghasilkan hasil yang signifikan.1

  • Bahkan dalam kasus ekstrim di kanan bawah, di mana sampel diambil dari distribusi t Student dengan derajat kebebasan (distribusi Cauchy), kekuatannya tidak : ada peluang bahwa sampel varian iid Cauchy tidak akan dianggap berbeda secara signifikan dari Normal pada level (yaitu, dengan kepercayaan ).201110086.57=13%205%95%

  • Kita dapat menilai kekuatan pada nilai kita pilih dengan mewarnai lebih banyak atau lebih sedikit bilah pada histogram ini. Misalnya, untuk mengevaluasi kekuatan pada , warna di dua batang kiri pada setiap histogram dan perkirakan luasnya sebagai bagian dari total.αα=0.10

    (Ini tidak akan bekerja terlalu baik untuk nilai lebih kecil dari dengan angka ini. Dalam praktiknya, orang akan membatasi histogram ke nilai-P hanya dalam rentang yang akan digunakan, mungkin dari hingga , dan perlihatkan pada mereka dengan cukup detail untuk memungkinkan penilaian visual daya turun ke atau bahkan (Itulah pilihan untuk.) Pasca-pemrosesan hasil simulasi dapat memberikan lebih banyak detail.)α0.05020%α=0.01α=0.005breakssim


Sangat lucu bahwa begitu banyak yang dapat diperoleh dari apa, pada dasarnya, berjumlah tiga baris kode: satu untuk mensimulasikan sampel iid dari distribusi tertentu, satu untuk menerapkannya ke array distribusi nol, dan yang ketiga untuk menerapkannya ke berbagai distribusi alternatif. Ini adalah tiga langkah yang masuk ke dalam analisis kekuatan: sisanya hanya meringkas dan menafsirkan hasilnya.

whuber
sumber
1

(Lebih dari komentar, mungkin bukan jawaban lengkap)

[I] akan berharap bahwa ketika ukuran sampel meningkatkan kemungkinan menolak nol menurun

Mengesampingkan pertimbangan tes bias (yang tidak biasa dalam kondisi baik, sehingga layak disebutkan), ada tiga situasi yang berkaitan dengan tingkat penolakan yang mungkin ingin dipertimbangkan:

1) tingkat penolakan ketika mensimulasikan dari nol (seperti yang tampaknya Anda lakukan dalam pertanyaan Anda)

Di sini, tingkat penolakan harus berada di atau dekat level signifikansi, jadi, tidak, jika Anda memegang level signifikansi konstan, laju penolakan tidak berkurang ketika n meningkat, tetapi tetap pada / dekat .α

2) tingkat penolakan ketika simulasi dari beberapa alternatif

Di sini, tingkat penolakan harus meningkat ketika n meningkat.

3) tingkat penolakan untuk beberapa pengumpulan data nyata

Secara praktis, nol tidak pernah benar-benar benar, dan data nyata akan memiliki beberapa campuran jumlah yang tidak normal (yang diukur dengan statistik uji). Jika tingkat non-normalitas tidak terkait dengan ukuran sampel, tingkat penolakan akan meningkat seiring n bertambah.

Jadi sebenarnya, dalam situasi ini kita tidak akan melihat penurunan tingkat penolakan dengan ukuran sampel.

Glen_b -Reinstate Monica
sumber