Khả năng cho quá trình này là gì?


10

Một bệnh nhân được đưa vào bệnh viện. Thời gian lưu trú của họ phụ thuộc vào 2 điều: Mức độ nghiêm trọng của chấn thương và mức bảo hiểm của họ sẵn sàng trả bao nhiêu để giữ họ trong bệnh viện. Một số bệnh nhân sẽ rời khỏi sớm nếu bảo hiểm của họ quyết định ngừng thanh toán cho kỳ nghỉ của họ.

Giả sử như sau:

1) Thời gian lưu trú được phân phối poisson (chỉ cần giả sử điều này cho đến bây giờ, nó có thể hoặc không phải là một giả định thực tế) với tham số .λ

2) Các gói bảo hiểm khác nhau bao gồm thời gian lưu trú 7, 14 và 21 ngày. Nhiều bệnh nhân sẽ rời đi sau 7,14, hoặc 21 ngày ở lại (vì hết bảo hiểm và họ phải rời đi).

Nếu tôi có được dữ liệu từ quá trình này, nó có thể trông như sau:

nhập mô tả hình ảnh ở đây

Như bạn có thể thấy, có những đột biến ở mốc 7, 14 và 21 ngày. Đây là những bệnh nhân rời đi khi bảo hiểm của họ kết thúc.

Rõ ràng, dữ liệu có thể được mô hình hóa như một hỗn hợp. Tôi đang có một thời gian khó khăn để viết ra khả năng phân phối này. Nó giống như một poisson không thổi phồng, nhưng lạm phát ở mức 7, 14 và 21.

Khả năng cho dữ liệu này là gì? Quá trình suy nghĩ đằng sau khả năng là gì?


Để bắt đầu, bạn cần biết xác suất của thời gian nghỉ bắt buộc 7, 14 và 21 ngày.
BruceET

1
Đối với tôi, âm thanh này giống như một hỗn hợp của một phân phối Poisson và ba phân phối phải (tại 7, 14 và 21). Viết chúng xuống là một bước khác hoàn toàn.
Carsten

@BruceET Tôi sẽ thực hiện suy luận Bayes về mô hình này, vì vậy tôi muốn viết nó xuống trong trường hợp chung nhất.
Demetri Pananos

Câu trả lời:


9

Trong trường hợp này, tôi tin rằng một con đường dẫn đến một giải pháp tồn tại nếu chúng ta đội chiếc mũ phân tích sinh tồn. Lưu ý rằng mặc dù mô hình này không có đối tượng kiểm duyệt (theo nghĩa truyền thống), chúng ta vẫn có thể sử dụng phân tích sinh tồn và nói về mối nguy hiểm của các đối tượng.

Chúng ta cần mô hình hóa ba điều theo thứ tự này: i) nguy cơ tích lũy, ii) nguy cơ, iii) khả năng đăng nhập.

i) Chúng tôi sẽ thực hiện phần i) theo các bước. Nguy cơ tích lũy, của biến ngẫu nhiên Poisson là gì? Đối với phân phối rời rạc, có hai cách để xác định nó¹, nhưng chúng tôi sẽ sử dụng định nghĩa . Vì vậy, nguy cơ tích lũy cho làH(t)H(t)=logS(t)TPoi(λ)

HT(t)=log(1Q(t,λ))=logP(t,λ)

Trong đó là hàm gamma chính quy trên, dưới tương ứng.Q,P

Bây giờ chúng tôi muốn thêm "mối nguy" của bảo hiểm sắp hết. Điều hay ho về các mối nguy tích lũy là chúng là phụ gia, vì vậy chúng ta chỉ cần thêm "rủi ro" vào các thời điểm 7, 14, 21:

HT(t)=logP(t,λ)+a1(t>7)+b1(t>14)+c1(t>21)

>a,bc

c

HT(t)=logP(t,λ)+a1(t>7)+b1(t>14)+1(t>21)

h(t)

h(t)=1exp(H(t)H(t+1))

Cắm vào mối nguy tích lũy của chúng tôi và đơn giản hóa:

hT(t)=1P(t+1,λ)P(t,λ)exp(a1(t=7)b1(t=14)1(t=21))

iii) Cuối cùng, viết khả năng ghi nhật ký cho các mô hình sống sót (không kiểm duyệt) là cực kỳ dễ dàng một khi chúng ta có nguy cơ và rủi ro tích lũy:

ll(λ,a,b|t)=i=1N(logh(ti)H(ti))

Và nó đây rồi!

a=log(1pa),b=log(1papb)log(1pa),pc=1(pa+pb)


Bằng chứng là trong pudding. Chúng ta hãy làm một số mô phỏng và suy luận sử dụng dây an toàn ngữ nghĩa mô hình tùy chỉnh.

from lifelines.fitters import ParametericUnivariateFitter
from autograd_gamma import gammaincln, gammainc
from autograd import numpy as np

MAX = 1e10

class InsuranceDischargeModel(ParametericUnivariateFitter):
    """
    parameters are related by
    a = -log(1 - p_a)
    b = -log(1 - p_a - p_b) - log(1 - p_a)
    p_c = 1 - (p_a + p_b)
    """
    _fitted_parameter_names = ["lbd", "a", "b"]
    _bounds = [(0, None), (0, None), (0, None)]

    def _hazard(self, params, t):
        # from (1.64c) in http://geb.uni-giessen.de/geb/volltexte/2014/10793/pdf/RinneHorst_hazardrate_2014.pdf
        return 1 - np.exp(self._cumulative_hazard(params, t) - self._cumulative_hazard(params, t+1))

    def _cumulative_hazard(self, params, t):
        lbd, a, b = params
        return -gammaincln(t, lbd) + a * (t > 7) + b * (t > 14) + MAX * (t > 21)


def gen_data():
    p_a, p_b = 0.4, 0.2
    p = [p_a, p_b, 1 - p_a - p_b]
    lambda_ = 18
    death_without_insurance = np.random.poisson(lambda_)
    insurance_covers_until = np.random.choice([7, 14, 21], p=p)
    if death_without_insurance < insurance_covers_until:
        return death_without_insurance
    else:
        return insurance_covers_until


durations = np.array([gen_data() for _ in range(40000)])
model = InsuranceDischargeModel()
model.fit(durations)
model.print_summary(5)
"""
<lifelines.InsuranceDischargeModel: fitted with 40000 observations, 0 censored>
number of subjects = 40000
  number of events = 40000
    log-likelihood = -78845.10392
        hypothesis = lbd != 1, a != 1, b != 1

---
        coef  se(coef)  lower 0.95  upper 0.95      p  -log2(p)
lbd 18.05026   0.03353    17.98455    18.11598 <5e-06       inf
a    0.50993   0.00409     0.50191     0.51794 <5e-06       inf
b    0.40777   0.00557     0.39686     0.41868 <5e-06       inf
"""

Xem Phần 1.2 tại đây

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.