【问题标题】:How can I produce this R plot with Sas如何用 Sas 制作这个 R 图
【发布时间】:2013-11-30 10:10:53
【问题描述】:

同时,我也在努力解决这个问题,我的解决方案如下。如果您知道更好的方法,请告诉我

我想在 SAS 中生成以下回归图:

圆点是实验结果,蓝点是雄性,红点是雌性。黑线是通过所有点的简单回归拟合。虚线是使用包含预测变量性别的回归模型(无交互项)制成的,例如 Y=alpha + beta_1.X_1i + beta_2.X_2i 和 beta_2i 是性别的虚拟变量。红色虚线为女性回归模型,蓝色虚线为男性回归模型。

这是我现在用来获取回归参数的 SAS 代码,它已经给了我与 R 中相同的结果:

PROC REG DATA= datasalary;
MODEL Salary=Yearsemployed gender / CLB R DW DWPROB;
OUTPUT out=pred p=Yhat RSTUDENT=Residuals L95M=Low U95M=High ;;
RUN;

任何想法如何在 Sas 中制作情节? 提前致谢! 卡斯帕

解决方案,比较麻烦,所以也许有更简单的方法

我通过将回归系数输出到全局参数,然后在 SGPlot 过程中使用该全局参数来做到这一点。

PROC REG DATA= datasalary outest=est_model2;
MODEL Salary=Yearsemployed gender / CLB R DW DWPROB;
OUTPUT out=pred p=Yhat RSTUDENT=Residuals L95M=Low U95M=High;
RUN;

%LET model2_alpha = 0;
%LET model2_beta1 = 0;
%LET model2_beta2 = 0;

Data _null_;
Set est_model2;
 call symput("model2_alpha",Intercept);
 call symput("model2_beta1",Yearsemployed);
 call symput("model2_beta2",Gender);
 call symput("model_2_intercept_males", Intercept + Gender);
Run;
%put &model2_alpha;
%put &model2_beta1;
%put &model2_beta2;
%put &model_2_intercept_males;

PROC SGPlot Data = datasalary;
    Scatter X=Yearsemployed Y=Salary / Group = Gender;
    Lineparm x=0 y=&model1_alpha slope=&model1_beta1 / LINEATTRS=(Color= "Black");
    Lineparm x=0 y=&model2_alpha slope=&model2_beta1 / LINEATTRS=(Color= "Maroon" Pattern= MediumDash);
    Lineparm x=0 y=&model_2_intercept_males  slope=&model2_beta1 / LINEATTRS=(Color= "VIB   " Pattern= MediumDash);
    XAXIS LABEL = 'Salary' VALUES = (0 TO 30 BY 5);
    YAXIS LABEL = 'Years experience' VALUES = (0 TO 35 BY 5);
    TITLE 'Linear regression with two predictors and no interaction terms';
 Run;

【问题讨论】:

  • 你可以在 SGPlot 中使用 REG 语句,但我认为它不能处理虚拟变量或一般的多元回归。您正在做的事情可能是实现您正在寻找的最佳方式。您可以使用PROC SGPLOT 语句中的NOAUTOLEGEND 选项来删除图例。
  • 我同意,很多代码,但解决方案没有太多可优化性。

标签: r sas


【解决方案1】:

@DomPazz 和@Astro 是正确的,您要执行的操作不会直接来自 SGPLOT,也不会直接来自 PROC REG。虽然 PROC REG 确实具有一些绘图功能,但它不能在同一个图表上绘制多个模型(至少从 v9.4 开始)。您的解决方法是合理的,但您可以添加一些内容以使绘图更类似于 R 中的绘图,特别是轴语句中的 grid 选项。

proc reg data = datasalary outest = est_model2;
    model salary = yearsemployed gender / clb r dw dwprob;
    output out=pred p=yhat rstudent=residuals l95m=low u95m=high;
run;
quit;

data _null_;
    set est_model2;
    call symputx('model2_beta0', intercept);
    call symputx('model2_beta1', yearsemployed);
    call symputx('model2_beta2', gender);
    call symputx('model2_intercept_males', intercept+gender);
run;

title 'Linear regression with two predictors and no interaction terms';

proc sgplot data = datasalary noautolegend;
    reg x = yearsemployed y = salary /
        group = gender
        lineattrs = (color=black pattern=solid);
    lineparm x = 0 y = &model2_beta0 slope = &model2_beta1 /
        lineattrs = (color=red pattern=mediumdash);
    lineparm x = 0 y = &model2_intercept_males slope = &model2_beta1 /
        lineattrs = (color=blue pattern=mediumdash);
    xaxis label = 'Salary' values = (0 to 30 by 5)
        grid gridattrs = (color=gray pattern=shortdash);
    yaxis label = 'Years Experience' values = (0 to 35 by 5)
        grid gridattrs = (color=gray pattern=shortdash);
run;

title;

这里我假设你代码中的 model1 是指一个简单的线性回归模型,它只包含截距和yearsemployed。在这种情况下,您可以使用 REG 语句来获取该模型的散点图和回归线。请注意,SGPLOT 中的 REG 语句仅支持简单的线性回归模型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-18
    • 1970-01-01
    • 2022-01-25
    • 2021-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多