W tym przypadku uważam, że istnieje ścieżka do rozwiązania, jeśli założymy nasz kapelusz analizy przeżycia. Zauważ, że nawet jeśli w tym modelu nie ma ocenzurowanych podmiotów (w tradycyjnym znaczeniu), nadal możemy korzystać z analizy przeżycia i mówić o zagrożeniach ze strony podmiotów.
Musimy modelować trzy rzeczy w tej kolejności: i) skumulowane zagrożenie, ii) zagrożenie, iii) prawdopodobieństwo dziennika.
i) Zrobimy część i) etapami. Jakie jest skumulowane zagrożenie zmiennej losowej Poissona? W przypadku dystrybucji dyskretnej istnieją dwa sposoby jej zdefiniowania¹, ale użyjemy definicji . Tak więc skumulowane zagrożenie dla wynosiH.( t )H.( t ) = - logS.( t )T.∼ P.o i ( λ )
H.T.( t ) = - log( 1 - Q ( t , λ ) ) =-logP.( t , λ )
gdzie jest odpowiednio górną, dolną regularyzowaną funkcją gamma.Q , P
Teraz chcemy dodać „zagrożenia” związane z brakującym ubezpieczeniem. Zaletą kumulatywnych zagrożeń jest to, że są one addytywne, dlatego musimy po prostu dodać „ryzyko” w czasach 7, 14, 21:
H.T.′( t ) = - logP.( t , λ ) +a⋅1( t > 7 )+ b ⋅1( t > 14 )+ c ⋅1( t > 21 )
Heurystycznie pacjent jest narażony na podstawowe ryzyko „Poissona”, a następnie ryzyko punktowe w punktach 7, 14 i 21. (Ponieważ jest to ryzyko skumulowane , kumulujemy to ryzyko punktowe, stąd ). nie wiemy, co to są i , ale później połączymy je z prawdopodobieństwem braku ubezpieczenia.>a , bdo
W rzeczywistości, ponieważ wiemy, że 21 jest górną granicą, a następnie wszyscy pacjenci są usuwani, możemy ustawić na nieskończoność.do
H.T.′( t ) = - logP.( t , λ ) +a⋅1( t > 7 )+ b ⋅1( t > 14 )+ ∞ ⋅1( t > 21 )
ii) Następnie wykorzystujemy skumulowane zagrożenie, aby uzyskać zagrożenie, . Wzór na to jest następujący:h ( t )
h ( t ) = 1 - exp( H( t ) - H( t + 1 ) )
Podłączenie naszego skumulowanego zagrożenia i uproszczenie:
hT.′( t ) = 1 -P.( t + 1 , λ )P.( t , λ )exp( - a ⋅1( t = 7 )- b ⋅1( t = 14 )- ∞ ⋅1( t = 21 ))
iii) Wreszcie, napisanie prawdopodobieństwa dziennika dla modeli przeżycia (bez cenzury) jest bardzo łatwe, gdy mamy zagrożenie i ryzyko skumulowane:
l l ( λ , a , b|t ) =∑i = 1N.( logh (tja) - H(tja) )
I oto jest!
Istnieją zależności, które łączą nasze punktowe współczynniki ryzyka i prawdopodobieństwa długości ubezpieczenia: .a = - log( 1 -pza) , b = - log( 1 -pza-pb) - log( 1 -pza) ,pdo= 1 - (pza+pb)
Dowód jest w budyniu. Zróbmy kilka symulacji i wnioskowania przy użyciu semantyki niestandardowego modelu linii życia .
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
"""
¹ patrz sekcja 1.2 tutaj