Python으로 생존 시간 분석 ~ Nelson-Aalen에 의한 위험 비율 추정 ~
lifelines
를 사용하여 Nelson-Aalen에 의한 위험 비율을 추정합니다. 본 기사는 다음 기사의 일본어 번역이 됩니다.Estimating univariate models - LIFELINES
Estimating the survival function using Kaplan-Meier
Estimating hazard rates using Nelson-Aalen 【본 기사의 대상】
다음 기사의 연속입니다.
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
로 사용할 수 있습니다. 계속해서 정권 데이터 세트를 이용한다(※ 위의 일 참조)
InT = data["duration"]
E = data["observed"]
from lifelines import NelsonAalenFitter
naf = NelsonAalenFitter()
naf.fit(T,event_observed=E)
모델이 적합 한 후 NelsonAalenFitter는 cumulative_hazard_
속성을 DataFrame으로 가지고 있습니다.
Inprint(naf.cumulative_hazard_.head())
naf.plot()
누적 위험 함수는 생존 함수만큼 명확한 논의를 제공하지 않지만, 위험 함수는 생존 시간 분석의 고급 기술의 기본입니다. 누적 위험 함수 $ H (t) $를 추정 한 것을 상기하면,이 곡선의 변화량이 위험 함수의 추정량임을 알 수있다.
Innaf.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()
함수도 준비되어 있다.
Inbandwidth = 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);
어느 그룹은 더 큰 위험을 가지고 있는지 더 분명해지고 비민주 정부는 일정한 위험을 가지고있는 것처럼 보입니다.
대역폭을 선택하는 명확한 방법은 없으며, 다른 대역폭은 다른 추론 결과를 이끌어 내므로 선택에는 세심한주의가 필요합니다.
Inbandwidth = 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);
참고
T = data["duration"]
E = data["observed"]
from lifelines import NelsonAalenFitter
naf = NelsonAalenFitter()
naf.fit(T,event_observed=E)
print(naf.cumulative_hazard_.head())
naf.plot()
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 = 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);
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);
Reference
이 문제에 관하여(Python으로 생존 시간 분석 ~ Nelson-Aalen에 의한 위험 비율 추정 ~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/roki18d/items/9da6649905319cc23241텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)