이 과정에 대한 가능성은 무엇입니까?


10

환자는 병원에 입원합니다. 체류 기간은 다음 두 가지에 달려 있습니다. 부상의 심각성 및 병원에 입원하기 위해 보험이 지불 할 금액. 일부 환자는 보험이 체류 비용 지불을 중단하기로 결정하면 조기 퇴원합니다.

다음을 가정하십시오.

1) 체류 기간은 매개 변수를 사용하여 포아송 분포입니다 (지금은 가정하고 실제 가정 일 수도 있고 아닐 수도 있습니다) .λ

2) 다양한 보험 플랜으로 7, 14 일 및 21 일 숙박이 보장됩니다. 많은 환자가 7,14 일 또는 21 일 체류 후 퇴원합니다 (보험이 소진되어 퇴원해야 함).

이 프로세스에서 데이터를 얻으려면 다음과 같이 보일 수 있습니다.

여기에 이미지 설명을 입력하십시오

보시다시피 7, 14 및 21 일 표시에 급상승이 있습니다. 이들은 보험이 종료되면 떠나는 환자입니다.

분명히 데이터는 혼합물로 모델링 될 수 있습니다. 이 분포에 대한 가능성을 기록하는 데 어려움을 겪고 있습니다. 부풀림없는 포아송과 같지만 인플레이션은 7, 14, 21입니다.

이 데이터에 대한 가능성은 무엇입니까? 가능성의 배후에있는 사고 과정은 무엇입니까?


시작하려면 7, 14 일 및 21 일의 강제 휴가 시간 확률을 알아야합니다.
BruceET

1
나에게 이것은 포아송과 3, 14, 21에서 오른쪽으로 잘린 포아송 분포가 섞인 것처럼 들린다. 적어 두는 것은 또 다른 단계입니다.
Carsten

@BruceET이 모델에 대해 베이지안 추론을 할 것이므로 가장 일반적인 경우에 적어 보겠습니다.
Demetri Pananos

답변:


9

이 경우 생존 분석 모자를 쓰면 해결 방법이 존재한다고 생각합니다. 이 모델에는 검열 대상이 없지만 (전통적인 의미에서) 생존 분석을 사용하여 대상의 위험에 대해 이야기 할 수 있습니다.

i) 누적 위험, ii) 위험, iii) 로그 우도의 순서로 세 가지를 모델링해야합니다.

i) 단계 i)를 단계적으로 수행합니다. 푸 아송 랜덤 변수 의 누적 위험도 는 무엇입니까 ? 불연속 분포의 경우이를 정의하는 두 가지 방법 ¹이 있지만 정의를 사용합니다 . 따라서 의 누적 위험 은H()H()=로그에스()영형나는(λ)

H()=로그(1(,λ))=로그(,λ)

여기서 는 각각 상부 정규화 된 감마 함수입니다.,

이제 우리는 보험 소진의 "위험"을 추가하고 싶습니다. 누적 위험에 대한 좋은 점은 부가 적이라는 것입니다. 따라서 7, 14, 21시에 "위험"을 추가하면됩니다.

H'()=로그(,λ)+1(>7)+1(>14)+1(>21)

경험적으로, 환자는 배경 "포아송"위험에 노출 된 다음 7, 14 및 21에 점별 위험이 따릅니다. (이는 누적 위험 이므로 이러한 점별 위험을 누적 하므로 .) 및 가 무엇인지 모르지만 나중에 보험 부족 가능성에 연결합니다.>,

실제로, 우리 21이 상한 임을 알고 그 이후에 모든 환자가 제거되므로 를 무한대로 설정할 수 있습니다.

H'()=로그(,λ)+1(>7)+1(>14)+1(>21)

ii) 다음으로 누적 위험을 사용하여 위험을 얻습니다 . . 이에 대한 공식은 다음과 같습니다.h()

h()=1특급(H()H(+1))

누적 위험을 막고 단순화 :

h'()=1(+1,λ)(,λ)특급(1(=7)1(=14)1(=21))

iii) 마지막으로, 위험과 누적 위험이 있으면 생존 모델에 대한 로그 우도를 작성하는 것이 (검열없이) 매우 쉽습니다.

(λ,,|)=나는=1(로그h(나는)H(나는))

그리고 거기 있습니다!

우리의 포인트 별 위험 계수와 보험 기간의 확률을 연결하는 관계가 있습니다 : .a=log(1pa),b=log(1papb)log(1pa),pc=1(pa+pb)


증거는 푸딩에 있습니다. 라이프 라인의 커스텀 모델 시맨틱을 사용하여 시뮬레이션과 추론을 해봅 시다 .

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
"""


¹ 여기 1.2 단원을 참조 하십시오

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.