Commit eeec45d9 authored by Weng's avatar Weng
Browse files

Upload New File

parent d83e2391
%% Cell type:markdown id:3d88c025 tags:
# Test Survival Tree
%% Cell type:markdown id:b687e1e3 tags:
Diese Datei dient nur dem Test der Änderungen zur Berücksichtigung der links abgeschnittenen Daten. Wir testen an einem ganz einfachen Baum mit nur zwei Blättern, das wir für den Baum gerade den korrekten Nelson-Aalen-Schätzer für die Teilbestände erhalten.
%% Cell type:code id:7a4fe6a2 tags:
``` python
#Benötigte Bibliotheken
import pandas as pd
import numpy as np
from random import randint
from sksurv.tree import SurvivalTreeTruncated
from sksurv.datasets.base import _get_x_y_survival_truncated
from export import print_tree
import eli5
from eli5.sklearn import PermutationImportance
from lifelines import NelsonAalenFitter
from lifelines import KaplanMeierFitter
import matplotlib.pyplot as plt
```
%% Cell type:code id:2542472b tags:
``` python
#Einlesen der Daten
path="KleinerBUBestand_Test.csv"
data = pd.read_csv(path)
del data['Unnamed: 0']
```
%% Cell type:markdown id:4930d70e tags:
Erst rechnen wir den Nelson-Aalen-Fitter per Hand nach.
%% Cell type:code id:36e202eb tags:
``` python
#Nelson-Aalen-Fitter nachrechnen
naf= NelsonAalenFitter(nelson_aalen_smoothing=False)
naf.fit(data['Austrittsalter'], data['Ereignis'],entry=data['Eintrittsalter'])
s=naf.cumulative_hazard_.to_numpy().reshape(43)
t1=np.diff(s)
#Nachrechnen
m=np.copy(t1)
#i=1
for i in range(0,len(t1)):
data_d=data[(data['Eintrittsalter']<=19+i) & (data['Austrittsalter']>=20+i)]
data_n=data_d[(data_d['Austrittsalter']==20+i) & (data_d['Ereignis']==1)]# m[i]=len(data_n)/len(data_d)
m[i]=len(data_n)/len(data_d)
#Differenz
m-t1
```
%% Output
array([ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
-4.33680869e-19, -4.33680869e-19, 6.50521303e-19, 0.00000000e+00,
2.16840434e-19, -1.51788304e-18, -8.67361738e-19, 8.67361738e-19,
8.67361738e-19, -1.73472348e-18, -2.16840434e-19, 4.33680869e-19,
1.30104261e-18, -1.51788304e-18, -3.03576608e-18, -4.33680869e-19,
2.16840434e-18, 8.67361738e-19, -2.16840434e-18, -3.03576608e-18,
2.16840434e-18, -8.67361738e-19, -2.60208521e-18, -1.73472348e-18,
4.33680869e-18, 2.60208521e-18, 4.33680869e-18, -5.20417043e-18,
-5.20417043e-18, 0.00000000e+00, -1.73472348e-18, -4.33680869e-18,
-1.73472348e-18, 6.93889390e-18, 6.93889390e-18, 3.46944695e-18,
1.21430643e-17, 0.00000000e+00])
%% Cell type:markdown id:20b82ab3 tags:
Nun wird ein Baum erzeugt. Der Baum hat nur zwei Blätter: Berufsklasse==1 und Berufsklasse!=1.
%% Cell type:code id:ce3c1681 tags:
``` python
#links-abgeschnitten und rechts-zensiert
X, y=_get_x_y_survival_truncated(data, "Ereignis","Eintrittsalter", "Austrittsalter", 1)
estimator = SurvivalTreeTruncated(max_depth=1).fit(X,y)
print_tree(estimator)
```
%% Output
The binary tree structure has 3 nodes and has the following tree structure:
node=0 is a split node: go to node 1 if X[:, 1] <= 1.5 else to node 2.
node=1 is a leaf node.
node=2 is a leaf node.
%% Cell type:code id:da098a65 tags:
``` python
subset1=data[data['Berufsklasse']==1]
subset2=data[data['Berufsklasse']!=1]
X1, y1=_get_x_y_survival_truncated(subset1, "Ereignis","Eintrittsalter", "Austrittsalter", 1)
X2, y2=_get_x_y_survival_truncated(subset2, "Ereignis","Eintrittsalter", "Austrittsalter", 1)
naf1= NelsonAalenFitter(nelson_aalen_smoothing=False)
naf2= NelsonAalenFitter(nelson_aalen_smoothing=False)
naf1.fit(subset1['Austrittsalter'], subset1['Ereignis'],entry=subset1['Eintrittsalter'])
naf2.fit(subset2['Austrittsalter'], subset2['Ereignis'],entry=subset2['Eintrittsalter'])
s1=naf1.cumulative_hazard_.to_numpy().reshape(43)
t1=np.diff(s1)
s2=naf2.cumulative_hazard_.to_numpy().reshape(43)
t2=np.diff(s2)
```
%% Cell type:code id:a01f7d78 tags:
``` python
plt.plot(np.arange(20,60), t1[0:40],'b',label='T1')
plt.plot(np.arange(20,60), t2[0:40],'r',label='T2')
plt.legend()
plt.title("Inzidenzwahrscheinlichkeiten im Vergleich")
plt.show()
```
%% Output
%% Cell type:code id:d3f31582 tags:
``` python
table1= estimator.predict_cumulative_hazard_function(X1,return_array=True)
curve1=table1.mean(axis=0)
curve1=np.concatenate([np.array([curve1[0]]),np.diff(curve1)[0:40]])
table2= estimator.predict_cumulative_hazard_function(X2,return_array=True)
curve2=table2.mean(axis=0)
curve2=np.concatenate([np.array([curve2[0]]),np.diff(curve2)[0:40]])
plt.plot(np.arange(20,60), curve1[0:40],'b',label='BK1')
plt.plot(np.arange(20,60), curve2[0:40],'r',label='BKne1')
plt.legend()
plt.title("Inzidenzwahrscheinlichkeiten im Vergleich")
plt.show()
```
%% Output
%% Cell type:markdown id:403fd216 tags:
Tatsächlich erhalten wir die beiden Blätter genau die Inzidenzwahrscheinlichkeiten, die sich aus den Nelson-Aalen-Schätzer der beiden Teilbestände ergeben.
%% Cell type:code id:61771516 tags:
``` python
plt.plot(np.arange(20,60), curve1[0:40],'b',label='BK1')
plt.plot(np.arange(20,60), t1[0:40],'r',label='T1')
#plt.plot(np.arange(20,60), curve2[0:40],'r',label='BKne1')
plt.legend()
plt.title("Inzidenzwahrscheinlichkeiten im Vergleich")
plt.show()
```
%% Output
%% Cell type:code id:3028ed40 tags:
``` python
plt.plot(np.arange(20,60), curve1[0:40],'b',label='BK1ne1')
plt.plot(np.arange(20,60), t1[0:40],'r',label='T2')
#plt.plot(np.arange(20,60), curve2[0:40],'r',label='BKne1')
plt.legend()
plt.title("Inzidenzwahrscheinlichkeiten im Vergleich")
plt.show()
```
%% Output
%% Cell type:code id:63147875 tags:
``` python
```
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment