Menghitung persentil dari distribusi normal

9

Lihat halaman Wikipedia ini:

http://en.wikipedia.org/wiki/Binomial_proportion_confidence_interval#Agresti-Coull_Interval

Untuk mendapatkan Interval Agresti-Coull, kita perlu menghitung persentil dari distribusi normal, yang disebut . Bagaimana cara menghitung persentil itu? Apakah ada fungsi siap pakai yang melakukan ini di Wolfram Mathematica dan / atau Python / NumPy / SciPy?z

Ram Rachum
sumber
1
Ungkapan integral dalam "normal cdf yang saya dapat dari Wiki" sayangnya dimatikan oleh faktor . Tidak ada rumus pasti yang diketahui untuk cdf normal atau kebalikannya menggunakan sejumlah terbatas istilah yang melibatkan fungsi standar (exp,log,sincosdll) tetapi cdf normal dan kebalikannya telah banyak dipelajari dan perkiraan rumus untuk keduanya diprogram dalam banyak kalkulator, spreadsheet, belum lagi paket statistik. Saya tidak terbiasa dengan R tetapi saya akan terkejut jika tidak memiliki apa yang Anda cari sudah dibangun. 1/πexp,catatan,dosacos
Dilip Sarwate
@DilipSarwate, sudah diperbaiki! Saya melakukan ini dengan menggunakan transformasi terbalik, juga "tidak diizinkan" untuk menggunakan terlalu banyak built in. Ini demi belajar kurasa.
user1061210
1
@Dilip: Tidak hanya tidak ada formula pasti yang diketahui, lebih baik lagi, diketahui bahwa formula seperti itu tidak ada!
kardinal
1
Metode Box-Muller menghasilkan sampel dari distribusi gabungan variabel independen normal standar normal. Jadi histogram dari nilai yang dihasilkan akan menyerupai distribusi normal standar. Tetapi metode Box-Muller bukanlah metode untuk menghitung nilai kecuali secara kebetulan seperti dalam "Saya menghasilkan 10 4 sampel normal standar yang 8401 memiliki nilai 1 atau kurang, dan begitu juga Φ ( 1 ) 0,8401 , dan Φ - 1 ( 0,8401 ) 1 .Φ(x)10484011Φ(1)0,8401Φ-1(0,8401)1
Dilip Sarwate
1
Saya baru saja memilih sebagai contoh jenis angka yang Anda harapkan. Φ ( 1 ) = 0,8413 ... dan jadi jika Anda menghasilkan 10 4 sampel dari distribusi normal standar, Anda harus berharap dekat dengan 8413 dari 10000 sampel memiliki nilai 1 . Anda menerapkan metode Box-Muller dengan benar, tetapi tidak memahami hasil yang Anda dapatkan dan tidak mengaitkannya dengan cdf dll.8401Φ(1)=0,8413...1048413100001
Dilip Sarwate

Jawaban:

3

Untuk Mathematica $VersionNumber > 5 dapat Anda gunakan

Quantile[NormalDistribution[μ, σ], 100 q]

untuk qpersentil ke-1.

Jika tidak, Anda harus memuat paket Statistik yang sesuai terlebih dahulu.

JM bukan ahli statistik
sumber
(Saya punya versi 7.) Saya tidak punya masalah memuat paket Statistik. Tapi apa fungsi di sana disebut? Karena saya mendapat kesan bahwa Quantilebaris ini akan melakukan perhitungan secara manual daripada menggunakan rumus.
Ram Rachum
Evaluasi dengan parameter simbolik (yaitu melakukan nilai-nilai tidak menetapkan untuk mu, sigma, dan q); Anda harus mendapatkan ekspresi yang melibatkan fungsi kesalahan terbalik.
JM bukan ahli statistik
16

Halaman John Cook, Distribusi dalam Scipy , adalah referensi yang bagus untuk jenis barang ini:

In [15]: import scipy.stats

In [16]: scipy.stats.norm.ppf(0.975)
Out[16]: 1.959963984540054
ars
sumber
4

Ya, Anda tidak bertanya tentang R, tetapi di R Anda melakukannya menggunakan qnorm

(Ini sebenarnya kuantil, bukan persentil, atau jadi saya percaya)

> qnorm(.5)
[1] 0
> qnorm(.95)
[1] 1.644854
Tal Galili
sumber
1
Kuantil vs. persentil (ini hanya masalah terminologi), j.mp/dsYz9z .
chl
1
Saat kami berada di, dalam CI Wald yang disesuaikan (misalnya Agresti-Coull) tersedia dalam PropCIspaket. Metode Wilson adalah default dalam Hmisc::binconf(seperti yang disarankan oleh Agresti dan Coull).
chl
3

Dalam Python, Anda dapat menggunakan modul stats dari paket scipy (lihat cdf(), seperti dalam contoh berikut ).

(Tampaknya paket transendantal juga termasuk distribusi kumulatif yang biasa).

chl
sumber
0

Anda dapat menggunakan fungsi erf terbalik , yang tersedia di MatLab dan Mathematica, misalnya.

Untuk CDF normal, mulai dari

y=Φ(x)=12[1+erf(x2)]

Kita mendapatkan

x=2 erf-1(2y-1)

Untuk CDF log-normal, mulai dari

y=Fx(x;μ,σ)=12erfc(-catatanx-μσ2)

Kita mendapatkan

-catatan(x)=μ+σ2 erfc-1(2y)
Jean-Victor Côté
sumber
2
bukankah ini lebih merupakan komentar daripada jawaban?
Makro
Ide saya adalah bahwa jika Anda memiliki invers untuk fungsi erf dan erfc, maka masalahnya selesai. MatLab, misalnya, memiliki fungsi yang sudah terprogram.
Jean-Victor Côté
@ Jean-VictorCôté Tolong, kembangkan ide-ide Anda dalam balasan Anda. Kalau tidak, itu hanya terlihat seperti komentar seperti yang disarankan di atas.
chl
catatan(x)x