Python으로 생존 시간 분석 ~ Nelson-Aalen에 의한 위험 비율 추정 ~

생존 분석의 Python 패키지lifelines를 사용하여 Nelson-Aalen에 의한 위험 비율을 추정합니다. 본 기사는 다음 기사의 일본어 번역이 됩니다.

  • Estimating univariate models - LIFELINES

  • Estimating the survival function using Kaplan-Meier

  • Estimating hazard rates using Nelson-Aalen 【본 기사의 대상】
  • Estimating cumulative hazards using parametric models
  • Other types of censoring


  • 다음 기사의 연속입니다.
  • Python에서 생존 시간 분석 ~ Kaplan-Meier에 의한 생존 함수 추정 ~ - Qiita

  • Nelson-Aalen에 의한 위험 비율 추정



    생존 함수는 생존 데이터 세트를 요약하고 시각화하는 좋은 방법이지만 유일한 방법은 아닙니다. 모집단의 해저드 함수 $h(t)$에 관심이 있을 때, 불행히도 KM 추정량으로 변환할 수 없다. 그러나 아래에 표시된 누적 위험 함수에 대한 비 파라 메트릭 추정량이 있습니다.

    $$H(t)=\int_{0}^{t}\lambda(z)dz$$

    누적 위험 함수에 대한 다음 추정량을 Nelson-Aalen 추정량이라고 한다.

    $$\hat{H}(t)=\sum_{t_i\leq t}\frac{d_i}{n_i}$$

    여기서 $d_i$는 시점 $t_i$에 있어서의 사망수, $n_i$는 사망의 가능성이 있는 것의 수이다. lifelines에서이 추정은 NelsonAalenFitter로 사용할 수 있습니다. 계속해서 정권 데이터 세트를 이용한다(※ 위의 일 참조)

    In
    T = data["duration"]
    E = data["observed"]
    
    from lifelines import NelsonAalenFitter
    naf = NelsonAalenFitter()
    
    naf.fit(T,event_observed=E)
    

    모델이 적합 한 후 NelsonAalenFitter는 cumulative_hazard_ 속성을 DataFrame으로 가지고 있습니다.

    In
    print(naf.cumulative_hazard_.head())
    naf.plot()
    



    누적 위험 함수는 생존 함수만큼 명확한 논의를 제공하지 않지만, 위험 함수는 생존 시간 분석의 고급 기술의 기본입니다. 누적 위험 함수 $ H (t) $를 추정 한 것을 상기하면,이 곡선의 변화량이 위험 함수의 추정량임을 알 수있다.

    In
    naf.fit(T[dem], event_observed=E[dem], label="Democratic Regimes")
    ax = naf.plot(loc=slice(0, 20))
    
    naf.fit(T[~dem], event_observed=E[~dem], label="Non-democratic Regimes")
    naf.plot(ax=ax, loc=slice(0, 20))
    
    plt.title("Cumulative hazard function of different global regimes");
    



    변화량에 주목하면 민주정권·비민주정권 모두 일정한 위험을 가지고 있지만, 민주정권이 더 큰 위험정수를 가지고 있다고 할 수 있다.

    위험 함수의 평활화



    누적 위험 함수의 해석은 어렵지만, 대부분의 생존 분석은 누적 위험 함수에서 수행되며 권장됩니다.

    누적 위험 함수 대신 더 해석하기 쉬운 위험 함수를 도출 할 수 있지만주의 사항이 있습니다. 도출에는 커널 평활기가 관련되어 있으며, 평활화의 양을 제어하는 ​​대역폭 (bandwidth) 파라미터를 지정할 필요가 있다. 이 기능은 smoothed_hazard_()smoothed_hazard_confidence_intervals_() 메소드에 포함된다.

    추정치와 신뢰 구간을 플롯하기 위한 plot_hazard() 함수도 준비되어 있다.

    In
    bandwidth = 3.
    
    naf.fit(T[dem], event_observed=E[dem], label="Democratic Regimes")
    ax = naf.plot_hazard(bandwidth=bandwidth)
    
    naf.fit(T[~dem], event_observed=E[~dem], label="Non-democratic Regimes")
    naf.plot_hazard(ax=ax, bandwidth=bandwidth)
    
    plt.title("Hazard function of different global regimes | bandwidth=%.1f" % bandwidth);
    plt.ylim(0, 0.4)
    plt.xlim(0, 25);
    



    어느 그룹은 더 큰 위험을 가지고 있는지 더 분명해지고 비민주 정부는 일정한 위험을 가지고있는 것처럼 보입니다.

    대역폭을 선택하는 명확한 방법은 없으며, 다른 대역폭은 다른 추론 결과를 이끌어 내므로 선택에는 세심한주의가 필요합니다.

    In
    bandwidth = 8.0
    
    naf.fit(T[dem], event_observed=E[dem], label="Democratic Regimes")
    ax = naf.plot_hazard(bandwidth=bandwidth)
    
    naf.fit(T[~dem], event_observed=E[~dem], label="Non-democratic Regimes")
    naf.plot_hazard(ax=ax, bandwidth=bandwidth)
    
    plt.title("Hazard function of different global regimes | bandwidth=%.1f" % bandwidth);
    



    참고


  • Estimating univariate models - LIFELINES
  • 생존 분석에 대해 – 비파라메트릭 - AI LAB
  • 좋은 웹페이지 즐겨찾기