我试图对我的数据集中的一些变量进行非常简单的线性回归分析,并发现R和SAS为其模型拟合输出了非常不同的值。我试图退步
spending ~ tenure (in months)
在SAS中,我的代码看起来像
proc reg data=model_data;
model spending = tenure;
output out=&outfile r=resid stdi=stdi_metric;
title 'SAS model';
run; quit;
在R中,我使用以下代码:
modelobject <- lm(spending ~ tenure, data = df)
predictions <- predict(modelobject, interval = "prediction", se.fit = TRUE, level = 1 - alpha)
然而,我看到的是R中的残差(因此拟合系数和截距项)与SAS。我不是把它们包括在这里,因为它是机密数据,但足以说它们不匹配。但是,当我将SAS代码更改为
时,它们会匹配proc reg data=model_data;
model spending = tenure;
output out=&outfile r=resid stdp=stdp_metric; * <-- this is the only change!
title 'SAS model';
run; quit;
我在这里得到相同的残差和系数。为什么会这样?根据我的理解, stdp 和 stdi 是与置信度和预测间隔相关的标准误差(请参阅这些lecture notes)。但是,在置信区间和预测区间之间切换不应该在理论上改变您的模型拟合(在R中尤其如此,因为您将modelobject
传递到{{1} {{1}功能)。
那么,当predict()
指标切换为stdi
时,为什么SAS残差会发生变化?此外,在一个项目的更广泛的背景下,我正在尝试将旧的SAS宏转换为R-这个问题。我如何复制适合R的相同模型(使用SAS stdp
使用{{ 1}})?
我还咨询了SAS manuals on definitions of these metrics and PROC REG,但在PROC REG
更改为stdi
时无法找到有关模型拟合实施更改的原因。
答案 0 :(得分:1)
STDI
是个人预测值的标准误差,而STDP
是平均预测值的标准误差。
因此,为了解决此问题,您需要在se.fit=F
函数中使用predict()
,您应该获得与使用STDI
选项的SAS代码完全相同的结果(目前在您的R代码中se.fit = TRUE所以它使用预测均值的标准误差,同时预测结果,相当于SAS中的STDP
选项)。希望这有帮助!
如果它解决了您的问题,请不要忘记告诉我们:)
答案 1 :(得分:0)