Với độ lệch trung bình và chuẩn xác định normal distribution, bạn sẽ tính toán xác suất sau bằng tinh khiết-Python như thế nào (không có gói Numpy/Scipy hoặc các gói khác không có trong thư viện chuẩn))?Tính toán xác suất của biến ngẫu nhiên trong phân phối bằng Python
- Xác suất của biến ngẫu nhiên r trong đó r < x hoặc r < = x.
- Xác suất của biến ngẫu nhiên r trong đó r> x hoặc r> = x.
- Xác suất của biến ngẫu nhiên r trong đó x> r> y.
Tôi đã tìm thấy một số thư viện, như Pgnumerics, cung cấp các chức năng để tính toán những điều này, nhưng toán học cơ bản không rõ ràng với tôi.
Chỉnh sửa: Để hiển thị đây không phải là bài tập về nhà, được đăng bên dưới là mã làm việc của tôi cho Python < = 2.6, mặc dù tôi không chắc liệu nó có xử lý các điều kiện biên một cách chính xác hay không.
from math import *
import unittest
def erfcc(x):
"""
Complementary error function.
"""
z = abs(x)
t = 1./(1. + 0.5*z)
r = t * exp(-z*z-1.26551223+t*(1.00002368+t*(.37409196+
t*(.09678418+t*(-.18628806+t*(.27886807+
t*(-1.13520398+t*(1.48851587+t*(-.82215223+
t*.17087277)))))))))
if (x >= 0.):
return r
else:
return 2. - r
def normcdf(x, mu, sigma):
t = x-mu;
y = 0.5*erfcc(-t/(sigma*sqrt(2.0)));
if y>1.0:
y = 1.0;
return y
def normpdf(x, mu, sigma):
u = (x-mu)/abs(sigma)
y = (1/(sqrt(2*pi)*abs(sigma)))*exp(-u*u/2)
return y
def normdist(x, mu, sigma, f):
if f:
y = normcdf(x,mu,sigma)
else:
y = normpdf(x,mu,sigma)
return y
def normrange(x1, x2, mu, sigma, f=True):
"""
Calculates probability of random variable falling between two points.
"""
p1 = normdist(x1, mu, sigma, f)
p2 = normdist(x2, mu, sigma, f)
return abs(p1-p2)
Đó là những gì hàm phân phối tích lũy cho phân phối cung cấp cho bạn. Bài viết bạn liên kết để cung cấp cho điều này cho các bản phân phối bình thường –