COX回归特征筛选

任务:利用cox筛选出P值小于0.05的特征

数据的格式第一列为标签,第二列为时间,第三列及后为特征

这里我们先举一个例子:

import pandas as pd
from lifelines import CoxPHFitter

# 创建示例数据集
data = pd.DataFrame({
    'age': [25, 35, 45, 55, 65],
    'pressure': [5, 4, 2, 1, 1],  # 男性和女性的数量
    'white': [7, 4, 6, 4, 3],  # 吸烟和不吸烟的数量
    'time': [5, 10, 15, 20, 25],  # 时间至事件发生或观察截止的时间
    'event': [1, 0, 1, 0, 1]  # 1表示事件发生,0表示事件未发生
})

# 创建 Cox 比例风险模型
cph = CoxPHFitter()

# 拟合模型
cph.fit(data, duration_col='time', event_col='event')

# 获取结果
cph.print_summary()

 这里我们和SPSS中进行一下对比:

 结果是不一样的,我也不知道为什么,等我再使用R语言试试。

 那么就进入今天的任务

先检查一下多重共线性

import pandas as pd

# 加载数据集
data = pd.read_excel(r"C:\Users\Administrator\Desktop\COX_data.xlsx")

# 计算特征之间的相关系数
correlation_matrix = data.corr()

# 打印相关系数矩阵
print("特征之间的相关系数矩阵:")
print(correlation_matrix)

# 选择性排除高度相关的特征
# 假设阈值为0.7,如果相关系数绝对值大于等于0.7,则认为特征高度相关
highly_correlated_features = set()
threshold = 0.7
for i in range(len(correlation_matrix.columns)):
    for j in range(i):
        if abs(correlation_matrix.iloc[i, j]) >= threshold:
            colname = correlation_matrix.columns[i]
            highly_correlated_features.add(colname)

# 打印高度相关的特征
print("\n高度相关的特征:")
print(highly_correlated_features)

 删除掉共线性的特征

# 移除高度相关的特征
data = data.drop(columns=highly_correlated_features)

# 创建并拟合 Cox 回归模型
coxph = CoxPHFitter()
coxph.fit(data, duration_col='time', event_col='label')

# 计算 p 值
p_values = coxph._compute_p_values()
p_values_df = pd.DataFrame(p_values, index=data.columns[2:], columns=['p'])
# 筛选出 p 值小于 0.05 的特征
significant_features = p_values_df[p_values_df['p'] > 0.05]  # 注意修改这里的筛选条件

# 打印筛选结果
print("\nP 值小于 0.05 的特征:")
print(significant_features)

设置一个路径,保存数据

# 获取符合条件的特征名
significant_feature_names = significant_features.index.tolist()

# 保存符合条件的特征数据到新的 CSV 文件
significant_features_data = data[['time', 'label'] + significant_feature_names]
significant_features_data.to_csv(r"C:\Users\Administrator\Desktop\significant_features_data.csv", index=False)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值