python中的对数正态生存分析

问题描述 投票:0回答:1

我需要使用python进行对数正态参数模型的生存分析。

我有需要应用它的数据。

我在这里工作https://github.com/MustafaOguz/Survival_Analysis/blob/master/4_Parametric_Models.ipynb

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm
from lifelines import KaplanMeierFitter
from sklearn.model_selection import train_test_split
from statsmodels.base.model import GenericLikelihoodModel

df = pd.read_csv('survival.csv')

train, test = train_test_split(df[['T', 'E']], test_size=0.2)

kmf = KaplanMeierFitter()

kmf.fit(df['T'], event_observed=df['E'], label="All groups")


eventvar = df['E']
start_params_var = [0,0]

def _ll_lognormal(y,X,scale,gamma):
    ll = eventvar * (
    np.log(
    norm.pdf(((np.log(y) - scale) * gamma))/
    (y * (1/gamma) * (1 - norm.cdf((np.log(y) - scale) * gamma))))
    ) + np.log(1 - norm.cdf((np.log(y) - scale) * gamma))
    return ll

class Lognormal(GenericLikelihoodModel):
    def _init_(self,endog,exog,**kwds):
        super(Lognormal, self).__init__(endog,exog,**kwds)
    def nloglikeobs(self,params):
        scale = params[0]
        gamma = params[1]
        ll = _ll_lognormal(self.endog,self.exog,scale,gamma)
        return -ll
    def fit(self, start_params = None, maxiter = 10000,maxfun = 5000,**kwds):
        if len(self.exog_names) == len(self.exog[1]):
            self.exog_names.append('gamma')
        if start_params == None:
            start_params = start_params_var
        return super(Lognormal, self).fit(start_params = start_params, maxiter = maxiter, maxfun = maxfun,**kwds)


lognormal_data = np.repeat(1,len(df['T']))
mod_lognormal = Lognormal(df['T'],lognormal_data)
res_lognorm = mod_lognormal.fit()
print(res_lognorm.summary())

#Plot the lognormal prediction against the empirical survival curve
plt.figure()
ax = plt.subplot(1,1,1)
t = np.linspace(0,150,151)
plt.plot(t,mod_lognormal.predict_survival_lognormal(res_lognorm.params, t))
plt.plot(t,mod_lognormal.predict_survival_lognormal_cis(res_lognorm.params, res_lognorm.cov_params(), t)[[1]],'r--',linewidth = 1.0)
plt.plot(t,mod_lognormal.predict_survival_lognormal_cis(res_lognorm.params, res_lognorm.cov_params(), t)[[2]],'r--',linewidth = 1.0)
kmf.plot(ax = ax)
plt.title('Lognormal')
plt.xlabel('Years since start of group')
plt.ylabel('Probability of ending')
plt.savefig('Lognormal.png',dpi = 300)

然后迷失在qazxsw poi,qazxsw poi,qazxsw poi方法来自哪里。

谢谢你的期待

python scipy predict survival-analysis
1个回答
0
投票

更一般地说,predict_survival_lognormal实现了对数正态参数模型:

predict_survival_lognormal_cis
© www.soinside.com 2019 - 2024. All rights reserved.