You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用SAS Proc GLM生成缺失因变量预测失败问题咨询

解决SAS Proc GLM中因变量缺失观测的预测值生成问题

我明白你遇到的问题了——明明所有预测变量都没有缺失,但Proc GLM的output语句就是没生成因变量缺失观测的预测值。这其实是Proc GLM的默认行为导致的:

默认情况下,Proc GLM会自动剔除任何因变量(dv)存在缺失值的观测,不管你的预测变量是否完整。这些被剔除的观测不会参与模型拟合,自然也不会出现在output生成的testx数据集中。

下面给你两种可靠的解决方法,都能帮你得到所有观测(包括dv缺失的)的预测值:

方法1:使用Proc GLM + Proc Score

先拟合模型并保存模型信息,再用Proc Score对全量观测生成预测值:

/* 第一步:拟合模型并保存模型参数到数据集 */
proc glm data=test outmodel=glmmodel;
    class a;
    model dv = a b c / solution;
run;
quit;

/* 第二步:对原始数据集的所有观测生成预测值 */
proc score data=test score=glmmodel out=testx predicted=pred;
    var b c; /* 这里填写所有连续型预测变量,分类变量a会由模型自动处理 */
run;

执行完这段代码后,testx就会包含test中的所有观测,包括dv缺失的那些,对应的pred列就是预测结果。

方法2:使用Proc GLM + Proc PLM(推荐,SAS 9.2及以上版本支持)

Proc PLM是SAS专门用于模型后续应用的过程,操作更直观:

/* 第一步:拟合模型并保存到itemstore */
proc glm data=test;
    class a;
    model dv = a b c / solution;
    store glmmodel; /* 将模型保存为itemstore格式 */
run;
quit;

/* 第二步:调用保存的模型,对全量观测生成预测值 */
proc plm restore=glmmodel;
    score data=test out=testx predicted=pred;
run;

这个方法的优势是itemstore会保存更完整的模型信息,后续如果需要做其他分析(比如预测区间、残差分析)也更方便。

为什么原来的代码不行?

再强调一下:你的原始代码中,proc glm在拟合阶段就把dv缺失的观测过滤掉了,output语句只能输出那些参与了模型拟合的观测,所以自然看不到dv缺失行的预测值。而上面的两种方法都是先基于有效观测拟合模型,再把模型应用到所有观测上,完美解决了这个问题。

内容的提问来源于stack exchange,提问作者DJohnson

火山引擎 最新活动