Kết hợp phân phối log-normal trong R so với SciPy


10

Tôi đã trang bị một mô hình logic bất thường bằng R với một bộ dữ liệu. Các tham số kết quả là:

meanlog = 4.2991610 
sdlog = 0.5511349

Tôi muốn chuyển mô hình này sang Scipy, điều mà tôi chưa từng sử dụng trước đây. Sử dụng Scipy, tôi có thể có được hình dạng và tỷ lệ 1 và 3.1626716539437488e + 90 - những con số rất khác nhau. Tôi cũng đã thử sử dụng exp của meanlog và sdlog nhưng tiếp tục nhận được biểu đồ kỳ quái.

Tôi đã đọc mọi tài liệu tôi có thể trên scipy và vẫn còn bối rối về ý nghĩa của các tham số hình dạng và tỷ lệ trong trường hợp này. Nó sẽ chỉ có ý nghĩa để mã chức năng bản thân mình? Điều đó có vẻ dễ bị lỗi, vì tôi là người mới.

SCIPY Lognatural (BLUE) so với R Lognatural (RED): Scipy Lognatural (BLUE) so với R Lognatural (RED)

Bất kỳ suy nghĩ về hướng nào để có được? Nhân tiện, dữ liệu rất phù hợp với mô hình R, vì vậy nếu nó trông giống như một cái gì đó khác trong Python, hãy thoải mái chia sẻ.

Cảm ơn bạn!

Cập nhật:

Tôi đang chạy Scipy 0.11

Đây là một tập hợp con của dữ liệu. Mẫu thực tế là 38k +, với giá trị trung bình là 81,53627:

Tập hợp con:

x
[60, 170, 137, 138, 81, 140, 78, 46, 1, 168, 138, 148, 145, 35, 82, 126, 66, 147, 88, 106, 80, 54, 83, 13, 102, 54, 134, 34]
numpy.mean (x)
99.071428571428569

Cách khác:

Tôi đang làm việc trên một chức năng để chụp pdf:

def lognoral(x, mu, sigma):
    a = 1 / (x * sigma * numpy.sqrt(2 * numpy.pi) )
    b = - (numpy.log(x) - mu) ^ 2 / (2 * sigma ^ 2)
    p = a * numpy.exp(b)
    return p

Tuy nhiên, điều này cho tôi những con số như sau (tôi đã thử một vài trường hợp tôi nhận được ý nghĩa của sdlog và meanlog lẫn lộn):

>>> lognormal(54,4.2991610, 0.5511349)
0.6994656085799437
 >>> lognormal(54,numpy.exp(4.2991610), 0.5511349)
0.9846125119455129
>>> lognormal(54,numpy.exp(4.2991610), numpy.exp(0.5511349))
0.9302407837304372

Có suy nghĩ gì không?

Cập nhật:

chạy lại với đề xuất "UPQuark's":

hình dạng, loc, scale (1.0, 50.03445923295007, 19.074457156766517)

Hình dạng của biểu đồ rất giống nhau, tuy nhiên, với đỉnh xảy ra vào khoảng 21.


Câu hỏi và câu trả lời này có thể giúp: stackoverflow.com/questions/8747761/ từ
jbowman

Cảm ơn bạn, tôi đã tìm thấy điều đó và học được "sự phù hợp" với logic bất thường. Tuy nhiên, câu hỏi của tôi là tại sao tôi lại nhận được các bản phân phối khác nhau như vậy?
Lillian Milagros Carrasquillo

Bạn đang sử dụng SciPy 0.9? Ngoài ra, bạn có thể đăng dữ liệu của bạn, hoặc một tập hợp con của nó?
jbowman

Đã cập nhật! Đó là Scipy 0.11. Vì vậy, những lỗi tôi đã đọc không nên có liên quan;)
Lillian Milagros Carrasquillo

Câu trả lời:


11

Tôi đã chiến đấu theo cách của mình thông qua mã nguồn, để đi đến sự giải thích sau đây về thói quen logic bất thường.

xlocscaleLognormal(σ)

trong đó là tham số "hình dạng". σ

Sự tương đương giữa các tham số scipy và tham số R như sau:

loc - Không tương đương, điều này bị trừ khỏi dữ liệu của bạn để 0 trở thành mức tối thiểu của phạm vi dữ liệu.

scale - , trong đó là giá trị trung bình của nhật ký của phương sai. (Khi phù hợp, thông thường bạn sẽ sử dụng giá trị trung bình mẫu của nhật ký dữ liệu.) Lexpμμ

hình dạng - độ lệch chuẩn của nhật ký của phương sai.

Tôi đã gọi lognorm.pdf(x, 0.55, 0, numpy.exp(4.29))nơi các đối số lần lượt là (x, hình dạng, loc, scale) và tạo ra các giá trị sau:

x pdf

10 0,000106

20 0,002275

30 0,006552

40 0,009979

50 0.114557

60 0.113479

70 0,103327

80 0,008941

90 0,007494

100 0,006155

có vẻ phù hợp khá tốt với đường cong R của bạn.


Cảm ơn bạn, @JBowman, đó chính xác là lời giải thích tôi cần và đầu ra chính xác là bản phân phối của tôi.
Lillian Milagros Carrasquillo

8

Phân phối logic trong SciPy phù hợp với khung chung cho tất cả các phân phối trong SciPy. Tất cả đều có từ khóa tỷ lệ và vị trí (mặc định là 0 và 1 nếu không được cung cấp rõ ràng). Điều này cho phép tất cả các bản phân phối được thay đổi và thu nhỏ từ đặc tả được chuẩn hóa của chúng với ý nghĩa rõ ràng đối với các số liệu thống kê của bản phân phối. Các bản phân phối thường có một hoặc nhiều tham số "hình dạng" (mặc dù một số, như phân phối bình thường, không cần bất kỳ tham số bổ sung nào).

Mặc dù cách tiếp cận chung này thống nhất độc đáo tất cả các bản phân phối, nhưng đối với logic bất thường, nó có thể tạo ra một số nhầm lẫn do cách các gói khác xác định các tham số. Tuy nhiên, rất đơn giản để khớp với bất kỳ phân phối lognatural nào nếu bạn meanlog (giá trị trung bình của phân phối cơ bản) và sdlog (độ lệch chuẩn của phân phối cơ bản).

Trước tiên, hãy đảm bảo bạn đặt tham số vị trí thành 0. Sau đó, đặt tham số hình dạng thành giá trị của sdlog. Cuối cùng, thiết lập tham số tỷ lệ thành math.bao (meanlog). Do đó, rv = scipy.stats.lognorm (0.5511349, scale = math.bao (4.2991610)) sẽ tạo ra một đối tượng phân phối có pdf khớp chính xác với đường cong tạo R của bạn. Như x = numpy.linspace (0,180,1000); lô (x, rv.pdf (x)) sẽ xác minh.

Về cơ bản, phân phối lognatural SciPy là một khái quát của phân phối lognatural tiêu chuẩn khớp chính xác với tiêu chuẩn khi đặt tham số vị trí thành 0.

Khi khớp dữ liệu với phương thức .fit, bạn cũng có thể sử dụng các từ khóa, .., .., floc và fshape để giữ cố định bất kỳ tham số hình dạng, vị trí và / hoặc tỷ lệ nào và chỉ phù hợp với các biến khác. Đối với phân phối lognatural, điều này rất hữu ích vì thông thường bạn biết tham số vị trí nên được sửa thành 0. Do đó, scipy.stats.lognorm.fit (tập dữ liệu, floc = 0) sẽ luôn trả về tham số vị trí là 0 và chỉ thay đổi khác thông số hình dạng và tỷ lệ.


3

Scipy lognatural fit trả về hình dạng, vị trí và tỷ lệ. Tôi chỉ chạy như sau trên một mảng dữ liệu giá mẫu:

shape, loc, scale = st.lognorm.fit(d_in["price"])

Điều này mang lại cho tôi các ước tính hợp lý 1.0, 0.09, 0.86 và khi bạn vẽ nó, bạn nên tính đến cả ba tham số.

Tham số hình dạng là độ lệch chuẩn của phân phối chuẩn bên dưới và thang đo là số mũ của giá trị trung bình của giá trị bình thường.

Hi vọng điêu nay co ich.


Cảm ơn vì nhắn lại! Khi tôi có các giá trị này (loc, scale, hình dạng), tôi cố gắng tìm pdf (x) cho mỗi x mà tôi quan tâm (ở đây là các giá trị từ 0 đến 180, độc quyền). scipy.stats.lognorm.pdf (i, loc, scale, hình dạng) Tuy nhiên, vẽ sơ đồ này tôi có được cốt truyện ở trên.
Lillian Milagros Carrasquillo

OK Tôi thấy bạn chỉ đề cập đến hình dạng và tỷ lệ, đó là lý do tại sao tôi đã đề cập có ba tham số được trả về theo mặc định từ fit (). Bạn cũng nói rằng bạn bối rối về ý nghĩa của các tham số hình dạng và tỷ lệ, và tôi đã cố gắng giải quyết điều đó. Tôi chưa bao giờ có các giá trị vô lý phù hợp trả về logic như trong trường hợp của bạn, tham số vị trí là gì?
upquark

Chỉ cần cập nhật câu hỏi để trả lời rằng. Cảm ơn đã suy nghĩ về điều này.
Lillian Milagros Carrasquillo

Gọi scipy.stats.lognorm.pdf (x, hình dạng, loc, scale) thay vì scipy.stats.lognorm.pdf (i, loc, scale, hình dạng).
upquark

Cảm ơn, upquark, tôi đã làm điều đó với kết quả tương tự. Toàn bộ hình dạng của biểu đồ tiếp tục rất khác so với kết quả dự kiến ​​mang lại cho R. Thực tế trông giống như một phân phối hoàn toàn khác so với kết quả trong R.
Lillian Milagros Carrasquillo

1

Có vẻ như phân phối trong Scipy cho lognatural không giống như trong R, hoặc nói chung, không giống như phân phối mà tôi quen thuộc. John D Cook đã chạm vào điều này: http://www.johndcook.com/blog/2010/02/03/statistic-distribution-in-scipy/ http://www.johndcook.com/distribution_scipy.html

Tuy nhiên, tôi không tìm thấy bất cứ kết luận nào về cách sử dụng hàm mật độ logic bất thường trong Python. Nếu bất cứ ai muốn thêm vào điều này, xin vui lòng.

Giải pháp của tôi cho đến nay là sử dụng pdf lognatural được đánh giá ở mức 0 đến 180 (độc quyền) và được sử dụng làm từ điển trong tập lệnh python.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.