我正在尝试对我的数据集中的一些变量进行非常简单的线性回归分析,并发现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中的 residuals (因此 fitted coefficient 和 intercept terms )与SAS中的非常不同 . 我没有把它们包括在这里,因为它匹配.1442464匹配 . 但是,当我将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
传递到 predict()
函数中) .
那么,当 stdi
指标切换为 stdp
时,为什么SAS残差会发生变化?此外,这个问题正在一个项目的更广泛的背景下被问到我试图将旧的SAS宏转换为R-如何复制适合R的相同模型(使用 PROC REG
使用 PROC REG
)?
我还咨询了SAS manuals on definitions of these metrics and PROC REG,当 stdi
更改为 stdp
时,无法找到有关模型拟合实现更改的原因 .
2 回答
STDI
是 individual predicted 值的标准错误,而STDP
是 mean predicted 值的标准错误 .因此,为了解决此问题,您需要在
predict()
函数中使用se.fit=F
,您应该得到与使用STDI
选项的SAS代码完全相似的结果(当前在您的R代码中se.fit = TRUE因此它使用标准预测的误差意味着预测结果,相当于SAS中的STDP
选项 . 希望这可以帮助!如果它解决了你的问题,别忘了告诉我们:)
找出问题对我来说是什么 . 实际上你必须在回归输出窗口中向下滚动,因为最新的结果是在窗口的下方 . 我学到了很好的经验法则 - 我总是检查是否有额外的输出,如果你正在查看最新的结果 . 这与我的宏参数中的语法错误导致我同时适应两个y目标这一事实相结合,导致了我的错误: