Saya melihat sampel kurtosis dari variabel acak yang cukup miring, dan hasilnya tampak tidak konsisten. Untuk sekadar menggambarkan masalahnya, saya melihat contoh kurtosis RV normal log. Dalam R (yang perlahan saya pelajari):
library(moments);
samp_size = 2048;
n_trial = 4096;
kvals <- rep(NA,1,n_trial); #preallocate
for (iii in 1:n_trial) {
kvals[iii] <- kurtosis(exp(rnorm(samp_size)));
}
print(summary(kvals));
Ringkasan yang saya dapatkan adalah
Min. 1st Qu. Median Mean 3rd Qu. Max.
11.87 28.66 39.32 59.17 61.70 1302.00
Menurut Wikipedia , kurtosis untuk RV log-normal ini harus sekitar 114. Jelas sampel kurtosis bias.
Melakukan penelitian saya menemukan bahwa sampel kurtosis bias untuk ukuran sampel kecil. Saya menggunakan estimator 'G2' yang disediakan oleh e1071
paket di CRAN, dan mendapatkan hasil yang sangat mirip untuk ukuran sampel ini.
Pertanyaannya : manakah dari karakter berikut yang mencirikan apa yang terjadi:
- Kesalahan standar dari kurtosis sampel sangat besar untuk RV ini (meskipun perkiraan umum gelombang tangan dari kesalahan standar adalah sesuai urutan). ). Atau, saya menggunakan terlalu sedikit sampel (2048) dalam penelitian ini.
- Implementasi kurtosis sampel ini menderita dari masalah numerik yang dapat diperbaiki dengan metode Terriberry misalnya (dalam banyak cara yang sama bahwa metode Welford memberikan hasil yang lebih baik daripada metode naif untuk varians sampel).
- Saya salah menghitung kurtosis populasi. (Aduh)
- Kurtosis sampel pada dasarnya bias dan Anda tidak pernah dapat memperbaikinya untuk ukuran sampel sekecil itu.
r
unbiased-estimator
kurtosis
shabbychef
sumber
sumber
;
di ujung pernyataan Anda. Anda memang melakukan pra-alokasi, tetapi tidak perlu mengisinyaNA
,kvals <- numeric(length = n_trial)
sudah cukup. Denganrep
, Anda hanya perlu argumen 1 dan 3 dari panggilan Anda (misrep(NA, 10)
.). Dalam pengaturanfor
loop,1:n_trial
bisa berbahaya jika pemrograman; lebih baikseq_along(kvals)
atauseq_len(n_trial)
dalam hal ini. Akhirnya, jika Anda tidak perlu memaksakan pencetakan, jatuhkanprint()
putaransummary()
- Anda hanya akan membutuhkannya jika Anda tidak bekerja secara interaktif dengan R. HTH.print
. Argumen untukrep
itu tentu saja salah.Jawaban:
Ada koreksi bias . Itu tidak besar. Saya percaya varians pengambilan sampel dari kurtosis sebanding dengan momen sentral kedelapan (!), Yang bisa sangat besar untuk distribusi lognormal. Anda akan membutuhkan jutaan percobaan (atau lebih banyak) dalam simulasi untuk mendeteksi bias kecuali CV kecil. (Plot histogram kval untuk melihat seberapa condongnya mereka.)
Kurtosis yang benar memang sekitar 113.9364.
Sejauh gaya R berjalan, akan lebih mudah untuk merangkum simulasi dalam suatu fungsi sehingga Anda dapat dengan mudah memodifikasi ukuran sampel atau jumlah percobaan.
sumber
e1071
memberikan koreksi bias 'standar'; lihat cran.r-project.org/web/packages/e1071/e1071.pdf . Menggunakan estimator ini sebagai ganti g2, yang diimplementasikan olehmoments
paket, memiliki efek yang kecil, seperti yang saya catat di Q. Ketergantungan pada momen kedelapan memang menyiratkan ukuran sampel terlalu kecil di sini.[Just on the R Style - @whuber telah menjawab Kurtsosis Q]
Ini agak terlalu rumit untuk dimasukkan dalam komentar. Untuk loop sederhana seperti yang Anda gunakan, kami dapat menggabungkan saran @ whuber untuk mengenkapsulasi simulasi dalam suatu fungsi dengan
replicate()
fungsi tersebut.replicate()
mengurus alokasi dan menjalankan loop untuk Anda. Contoh diberikan di bawah ini:Kami menggunakannya seperti ini:
Perhatikan bahwa saya menggunakan
rlnorm()
fungsi untuk menghasilkan variabel acak log-normal. Ini sama denganexp(rnorm())
di loop Anda tetapi menggunakan alat yang benar, dan kami mengizinkan fungsi kami meneruskan parameter yang ditentukan pengguna dari distribusi log-normal.sumber
set.seed
, yang akan membantu dalam contoh-contoh seperti ini. Apakah ada alasan substansial untuk mengenkapsulasi dalam suatu fungsi ( mis . Penerjemah R akan melakukan pre-kompilasi fungsi, sehingga ada beberapa peningkatan), atau bergaya ( misalnya fungsi enkapsulasi, seperti brokoli, baik untuk Anda), atau di suatu tempat di antaranya ( misalnya ada, katakanlah, banyak operator di R yang bekerja pada fungsi, jadi kita harus terbiasa dengan pemrograman fungsional)?source('foo.r')