在SAS中如何使用PROC执行嵌套Cox回归模型的嵌套检验?
在SAS中比较嵌套Cox回归模型的方法
SAS中的PROC PHREG完全支持嵌套Cox回归模型的检验,你之前的代码失败是因为同一个PROC PHREG块中多个MODEL语句会覆盖上下文,TEST语句只会关联最后一个MODEL,而你的简化模型不含x3/x4,导致检验无效。
以下是两种正确的实现方法:
方法一:直接检验变量联合效应(等价于嵌套模型比较)
如果你的目标是检验“去掉x3/x4后的简化模型是否与全模型无差异”,本质就是检验这两个变量的联合显著性。只需拟合全模型,并用TEST语句执行检验(推荐指定似然比检验,比默认的Wald检验更适合嵌套模型):
proc phreg data=mydata; model time*event(0) = x1 x2 x3 x4; /* 拟合全模型 */ /* 检验x3和x4的联合效应,/ lr 指定似然比检验(默认是Wald检验) */ test x3 x4 / lr; run;
输出结果中会给出似然比统计量、自由度和P值,若P值小于显著性水平(如0.05),则拒绝原假设,说明全模型更优。
方法二:分别拟合模型后计算似然比检验
如果你需要手动对比两个模型的拟合统计量,可以分别拟合全模型和简化模型,提取-2 Log L值后计算似然比统计量:
步骤1:拟合两个模型并保存拟合统计量
/* 拟合全模型,保存-2对数似然值 */ proc phreg data=mydata; model time*event(0) = x1 x2 x3 x4; ods output FitStatistics=full_model_fit; run; /* 拟合简化模型,保存-2对数似然值 */ proc phreg data=mydata; model time*event(0) = x1 x2; ods output FitStatistics=reduced_model_fit; run;
步骤2:计算似然比检验结果
data lr_test_result; /* 合并两个模型的-2 Log L统计量 */ merge full_model_fit(where=(Label='-2 Log L') rename=(Value=full_2ll)) reduced_model_fit(where=(Label='-2 Log L') rename=(Value=reduced_2ll)); /* 似然比统计量 = 简化模型-2LL - 全模型-2LL */ lr_statistic = reduced_2ll - full_2ll; /* 自由度 = 全模型比简化模型多的变量数(这里是2个:x3、x4) */ df = 2; /* 计算P值(卡方分布) */ p_value = 1 - probchi(lr_statistic, df); label lr_statistic='似然比统计量' df='自由度' p_value='P值'; run; /* 输出检验结果 */ proc print data=lr_test_result noobs; run;
关键说明
- 嵌套模型比较优先使用似然比检验,它比Wald检验更可靠,尤其是当样本量不大或系数估计值较大时。
- 若使用
TEST语句未加/ lr选项,默认输出Wald检验结果,虽然也能用于联合检验,但适用性不如似然比检验。
内容的提问来源于stack exchange,提问作者J.Z.
相关产品推荐
相关产品推荐

