Bu durumda, hayatta kalma analizi şapkamızı takarsak, bir çözüm yolunun var olduğuna inanıyorum. Bu modelin sansürlenmiş özneleri olmasa da (geleneksel anlamda), hayatta kalma analizini kullanmaya ve öznelerin tehlikeleri hakkında konuşabileceğimize dikkat edin.
Bu sırayla üç şeyi modellememiz gerekir: i) kümülatif tehlike, ii) tehlike, iii) kütük olasılığı.
i) Bölüm i) 'yi adım adım yapacağız. Poisson rasgele değişkeninin birikme tehlikesi nedir ? Ayrık bir dağıtım için, onu tanımlamanın iki yolu vardır¹, ancak tanımını kullanacağız . Kümülatif tehlike Yani olduğu'H( t )'H( t ) = - günlükS( t )T∼ Po i ( λ )
'HT( t ) = - günlük( 1 - Q ( t , λ ) ) =-logP( t , λ )
burada sırasıyla üst, alt düzenli gama fonksiyonudur.Q , P
Şimdi sigortanın bittiği "tehlikeleri" eklemek istiyoruz. Kümülatif tehlikeler hakkında güzel olan şey, katkı maddesi olmasıdır, bu yüzden 7, 14, 21 saatlerinde "riskler" eklememiz yeterlidir:
'HT'( t ) = - günlükP( t , λ ) +a⋅1( t > 7 )+ b ⋅1( t > 14 )+ c ⋅1( t > 21 )
Sezgisel olarak, bir hasta bir arka plan "Poisson" riskine ve ardından 7, 14 ve 21'de noktasal risklere maruz kalır. (Bu, birikimli bir tehlike olduğu için, bu nokta-bazlı riskleri biriktiririz, dolayısıyla .) ve ne olduğunu bilmiyoruz , ancak daha sonra bunları sigorta bitirme olasılıklarımıza bağlayacağız.>a , bc
Aslında 21'in üst sınır olduğunu bildiğimiz ve bundan sonra tüm hastalar çıkarıldığı için sonsuz olarak ayarlayabiliriz .c
'HT'( t ) = - günlükP( t , λ ) +a⋅1( t > 7 )+ b ⋅1( t > 14 )+ ∞ ⋅1( t > 21 )
ii) Daha sonra tehlikeyi elde etmek için birikimli tehlikeyi kullanırız, . Bunun formülü:h ( t )
h ( t ) = 1 - tecrübe( H( t ) - H( t + 1 ) )
Kümülatif tehlikemizin takılması ve basitleştirilmesi:
hT'( t ) = 1 -P( t + 1 , λ )P( t , λ )tecrübe( - a ⋅1( t = 7 )- b ⋅1( t = 14 )- ∞ ⋅1( t = 21 ))
iii) Son olarak, tehlike ve kümülatif tehlike olduğunda hayatta kalma modelleri (sansürsüz) için günlük olasılığını yazmak çok kolaydır:
l l ( λ , a , b|t ) =Σi = 1N-( logh (tben) - H(tben) )
Ve işte burada!
Noktasal tehlike katsayılarımızı ve sigorta uzunluklarının olasılıklarını birleştiren ilişkiler vardır: .a = - günlük( 1 -pbir) , b = - günlük( 1 -pbir-pb) - günlük( 1 -pbir) ,pc= 1 - (pbir+pb)
Kanıt, puding içerisindedir. Yaşam çizgilerinin özel model semantiğini kullanarak bazı simülasyonlar ve çıkarımlar yapalım .
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
"""
Bölüm 1.2 ¹ burada