このプロセスの可能性はどれくらいですか?


10

患者は入院する。彼らの滞在期間は次の2つの要素に依存します。彼らの怪我の重症度、および彼らが病院に留まるために彼らの保険がいくら支払ってもよいかです。一部の患者は、保険が滞在費の支払いを停止することを決定した場合、時期尚早に退職します。

以下を想定します。

1)滞在の長さは、パラメーターλポアソン分布されます(現時点ではこれを想定していますが、現実的な想定である場合とそうでない場合があります)。

2)7、14、および21日間の滞在をカバーするさまざまな保険プラン。多くの患者は、7、14、または21日間の滞在後に退院します(保険が切れたため退院する必要があるため)。

このプロセスからデータを取得すると、次のようになります。

ここに画像の説明を入力してください

ご覧のとおり、7、14、および21日目でスパイクがあります。これらは、保険が終了したときに退院する患者です。

明らかに、データは混合としてモデル化できます。この分布の可能性を書き留めるのに苦労しています。これはゼロ膨張ポアソンのようなものですが、膨張は7、14、21です。

このデータの可能性はどれくらいですか?可能性の背後にある思考プロセスは何ですか?


開始するには、7、14、および21日間の強制退去時間の確率を知る必要があります。
BruceET

1
私にとってこれは、ポアソン分布と3つの右切り捨て(7、14、21)ポアソン分布の混合のように聞こえます。それらを書き留めることは、まったく別のステップです。
Carsten

@BruceETこのモデルでベイジアン推論を行うので、最も一般的なケースでそれを書き留めておきます。
Demetri Pananos

回答:


9

この場合、生存分析の帽子をかければ解決への道が存在すると私は信じています。このモデルには(従来の意味で)打ち切られた主題はありませんが、生存分析を使用して、被験者の危険性について話すことができます。

3つのものをこの順序でモデル化する必要があります。i)累積ハザード、ii)ハザード、iii)対数尤度。

H(t)H(t)=logS(t)TPoi(λ)

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

Q,P

次に、保険切れの「危険」を追加します。累積ハザードのいいところは、それらが相加的であることです。したがって、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))

累積ハザードを接続し、簡素化する:

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

iii)最後に、ハザードと累積ハザードがあれば、生存モデルの対数尤度(打ち切りなし)を書くのは非常に簡単です。

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

そして、それがあります!

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


hereここ 1.2を参照

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.