Làm cách nào để tính toán nghịch đảo của hàm phân phối tích lũy (CDF) của phân bố chuẩn trong Python?Làm thế nào để tính toán nghịch đảo của hàm phân phối tích lũy chuẩn trong python?
Tôi nên sử dụng thư viện nào? Có thể scipy?
Làm cách nào để tính toán nghịch đảo của hàm phân phối tích lũy (CDF) của phân bố chuẩn trong Python?Làm thế nào để tính toán nghịch đảo của hàm phân phối tích lũy chuẩn trong python?
Tôi nên sử dụng thư viện nào? Có thể scipy?
NORMSINV (được đề cập trong nhận xét) là nghịch đảo của CDF của phân bố chuẩn chuẩn. Sử dụng scipy
, bạn có thể tính toán điều này bằng phương pháp ppf
của đối tượng scipy.stats.norm
. Từ viết tắt ppf
là viết tắt của percent point function, là một tên khác cho số quantile function.
In [20]: from scipy.stats import norm
In [21]: norm.ppf(0.95)
Out[21]: 1.6448536269514722
Kiểm tra xem nó là nghịch đảo của CDF:
In [34]: norm.cdf(norm.ppf(0.95))
Out[34]: 0.94999999999999996
Theo mặc định, norm.ppf
sử dụng trung bình = 0 và stddev = 1, đó là "tiêu chuẩn" phân phối chuẩn. Bạn có thể sử dụng độ lệch chuẩn và trung bình khác bằng cách chỉ định đối số loc
và scale
tương ứng.
In [35]: norm.ppf(0.95, loc=10, scale=2)
Out[35]: 13.289707253902945
Nếu bạn nhìn vào các mã nguồn cho scipy.stats.norm
, bạn sẽ thấy rằng phương pháp ppf
rốt cuộc gọi scipy.special.ndtri
. Vì vậy, để tính toán nghịch đảo của CDF của phân phối chuẩn chuẩn, bạn có thể sử dụng chức năng trực tiếp:
In [43]: from scipy.special import ndtri
In [44]: ndtri(0.95)
Out[44]: 1.6448536269514722
Tôi luôn nghĩ rằng "chức năng điểm phần trăm" (ppf) là một tên khủng khiếp. Hầu hết mọi người trong số liệu thống kê chỉ sử dụng "hàm số lượng tử". –
# given random variable X (house price) with population muy = 60, sigma = 40
import scipy as sc
import scipy.stats as sct
sc.version.full_version # 0.15.1
#a. Find P(X<50)
sct.norm.cdf(x=50,loc=60,scale=40) # 0.4012936743170763
#b. Find P(X>=50)
sct.norm.sf(x=50,loc=60,scale=40) # 0.5987063256829237
#c. Find P(60<=X<=80)
sct.norm.cdf(x=80,loc=60,scale=40) - sct.norm.cdf(x=60,loc=60,scale=40)
#d. how much top most 5% expensive house cost at least? or find x where P(X>=x) = 0.05
sct.norm.isf(q=0.05,loc=60,scale=40)
#e. how much top most 5% cheapest house cost at least? or find x where P(X<=x) = 0.05
sct.norm.ppf(q=0.05,loc=60,scale=40)
PS: Bạn có thể giả định 'loc' là 'mean' và 'scale' là 'độ lệch chuẩn' – Suresh2692
Bạn có nghĩa là sự phân bố Gaussian nghịch đảo (http://en.wikipedia.org/wiki/ Inverse_Gaussian_distribution), hoặc nghịch đảo của hàm phân phối tích lũy của phân bố chuẩn (http://en.wikipedia.org/wiki/Normal_distribution), hay cái gì khác? –
@WarrenWeckesser thứ hai: nghịch đảo của hàm phân phối tích lũy của phân phối chuẩn – Yueyoum
@WarrenWeckesser i có nghĩa là phiên bản python của hàm "normsinv" trong excel. – Yueyoum