Các bí ẩn được giải quyết (chỉnh sửa 3)
- μ tương ứng với
ln(scale)
(!)
- σ tương ứng với hình (
s
)
loc
là không cần thiết cho việc thiết lập bất kỳ σ và L
Tôi nghĩ rằng đó là một vấn đề nghiêm trọng mà điều này không được ghi chép rõ ràng. Tôi đoán nhiều người đã rơi cho điều này khi làm các xét nghiệm đơn giản với sự phân bố lognormal trong SciPy.
Tại sao lại như vậy?
Mô-đun thống kê xử lý loc
và scale
tương tự cho tất cả các bản phân phối (điều này không được viết rõ ràng, nhưng có thể suy ra khi đọc giữa các dòng). Nghi ngờ của tôi là loc
được trừ từ x
và kết quả được chia cho scale
(và kết quả được coi là mới x
). Tôi đã thử nghiệm cho điều đó, và điều này hóa ra là như vậy.
Điều này có ý nghĩa gì đối với phân phối chuẩn? Trong định nghĩa kinh điển của phân phối lognormal thuật ngữ ln(x)
xuất hiện. Rõ ràng, cùng một thuật ngữ xuất hiện trong việc thực hiện của SciPy. Với cân nhắc ở trên, đây là cách loc
và scale
kết thúc trong logarit:
ln((x-loc)/scale)
Bằng cách tính toán logarit chung, đây là giống như
ln(x-loc) - ln(scale)
Trong định nghĩa kinh điển của phân phối lognormal thuật ngữ đơn giản là ln(x) - μ
. So sánh cách tiếp cận của SciPy và cách tiếp cận kinh điển sau đó cung cấp thông tin chi tiết quan trọng: ln(scale)
đại diện cho μ. Tuy nhiên, loc
không có sự tương ứng trong định nghĩa kinh điển và còn tốt hơn ở 0. Bên dưới, tôi đã lập luận rằng hình dạng (s
) là σ.
Proof
>>> import math
>>> from scipy.stats import lognorm
>>> mu = 2
>>> sigma = 2
>>> l = lognorm(s=sigma, loc=0, scale=math.exp(mu))
>>> print("mean: %.5f stddev: %.5f" % (l.mean(), l.std()))
mean: 54.59815 stddev: 399.71719
tôi sử dụng WolframAlpha như một tài liệu tham khảo. Nó cung cấp các giá trị được xác định về mặt phân tích cho độ lệch trung bình và chuẩn của phân phối chuẩn.
http://www.wolframalpha.com/input/?i=log-normal+distribution%2C+mean%3D2%2C+sd%3D2
Các giá trị phù hợp.
WolframAlpha cũng như SciPy đưa ra độ lệch trung bình và tiêu chuẩn bằng cách đánh giá các điều khoản phân tích phân tích. Hãy thực hiện một bài kiểm tra thực nghiệm, bằng cách lấy nhiều mẫu từ phân phối scipy, và tính toán trung bình của chúng và độ lệch chuẩn "bằng tay" (từ toàn bộ các mẫu):
>>> import numpy as np
>>> samples = l.rvs(size=2*10**7)
>>> print("mean: %.5f stddev: %.5f" % (np.mean(samples), np.std(samples)))
mean: 54.52148 stddev: 380.14457
này vẫn chưa hoàn toàn hội tụ, nhưng tôi nghĩ rằng đó là bằng chứng đủ để các mẫu tương ứng với cùng một phân phối mà WolframAlpha giả định, cho μ = 2 và σ = 2.
Và một chỉnh sửa nhỏ: có vẻ như việc sử dụng đúng đắn của một công cụ tìm kiếm sẽ giúp, chúng tôi không là người đầu tiên bị mắc kẹt của thành viên này:
https://stats.stackexchange.com/questions/33036/fitting-log-normal-distribution-in-r-vs-scipy http://nbviewer.ipython.org/url/xweb.geos.ed.ac.uk/~jsteven5/blog/lognormal_distributions.ipynb scipy, lognormal distribution - parameters
chỉnh sửa khác: bây giờ rằng tôi biết nó cư xử như thế nào, tôi nhận ra rằng hành vi theo nguyên tắc là tài liệu. Trong the "notes" section chúng ta có thể đọc:
với tham số hình dạng sigma và tham số exp quy mô (mu)
Nó chỉ thực sự không rõ ràng (cả hai chúng tôi không thể đánh giá đúng tầm quan trọng của câu nhỏ này) . Tôi đoán lý do chúng tôi không thể hiểu ý nghĩa của câu này là biểu thức phân tích được hiển thị trong phần ghi chú không không bao gồm loc
và scale
. Tôi đoán đây là giá trị báo cáo lỗi/cải thiện tài liệu.
Original câu trả lời:
Thật vậy, tham số hình dạng chủ đề cũng không phải là các tài liệu khi nhìn vào trang tài liệu cho một phân phối cụ thể. Tôi khuyên bạn nên có một cái nhìn tại các tài liệu hướng dẫn số liệu thống kê chính - có một phần trên các thông số hình dạng:
http://docs.scipy.org/doc/scipy/reference/tutorial/stats.html#shape-parameters
Có vẻ như không nên có một tài sản lognorm.shapes
, nói cho bạn về những gì các tham số s
nghĩa, cụ thể.
Edit: Chỉ có một tham số, quả thật vậy:
>>> lognorm.shapes
's'
Khi so sánh với định nghĩa chung về phân phối lognormal (từ Wikipedia):
và công thức được đưa ra bởi tài liệu scipy:
lognorm.pdf(x, s) = 1/(s*x*sqrt(2*pi)) * exp(-1/2*(log(x)/s)**2)
nó trở thành rõ ràng rằng s
là đúng σ (sigma
).
Tuy nhiên, từ tài liệu không rõ ràng cách tham số loc
có liên quan đến μ (mu
).
Nó có thể là như trong ln(x-loc)
, mà sẽ không tương ứng với L trong công thức chung, hoặc nó có thể là ln(x)-loc
, mà sẽ đảm bảo sự tương ứng giữa loc
và μ. Hãy thử nó! :)
Chỉnh sửa 2
Tôi đã thực hiện so sánh giữa những gì WolframAlpha (WA) và scipy nói. WA khá rõ ràng về việc nó sử dụng μ và σ như thường được hiểu (như được định nghĩa trong bài viết Wikipedia liên kết).
>>> l = lognorm(s=2, loc=0)
>>> print("mean: %.5f stddev: %.5f" % (l.mean(), l.std()))
mean: 7.38906 stddev: 54.09584
Điều này khớp với WA's output.
Hiện tại, đối với loc
không bằng 0, không khớp. Ví dụ:
>>> l = lognorm(s=2, loc=1)
>>> print("mean: %.5f stddev: %.5f" % (l.mean(), l.std()))
mean: 8.38906 stddev: 54.09584
WA gives một trung bình 20,08 và một độ lệch chuẩn của 147. Ở đó bạn có nó, loc
không không tương ứng với L trong định nghĩa cổ điển của phân phối lognormal.