You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SAS PROC MIXED模型替换因变量后最小二乘均值差异一致的原因咨询

SAS PROC MIXED模型替换因变量后最小二乘均值差异一致的原因咨询

嗨,我来帮你拆解这个问题——其实这两种模型设定下最小二乘(LS)均值差异完全一致,是有明确的统计逻辑的,咱们从模型本质和代码验证两方面说清楚:

一、模型层面的核心原因

首先咱们明确变量关系:你定义的chg应该是aval - base(从基线的变化值),那咱们把两个模型展开来看:

  1. 第一个模型(因变量为aval):

    model aval = base arm avisitn arm*avisitn /s ;
    

    本质是拟合:
    $$aval = \beta_0 + \beta_1 \times base + \beta_2 \times arm + \beta_3 \times avisitn + \beta_4 \times arm \times avisitn + b_{subject} + \varepsilon$$
    其中$b_{subject}$是随机效应,$\varepsilon$是残差。

  2. 第二个模型(因变量为chg):

    model chg = base arm avisitn arm*avisitn /s;
    

    代入chg = aval - base后,等价于拟合:
    $$aval = \gamma_0 + (1+\gamma_1) \times base + \gamma_2 \times arm + \gamma_3 \times avisitn + \gamma_4 \times arm \times avisitn + c_{subject} + \varepsilon'$$

你关注的是arm在特定avisitn下的LS均值差异,比如当avisitn=k时,两组arm的差异是:

  • 第一个模型:$\beta_2 + \beta_4 \times k$
  • 第二个模型:$\gamma_2 + \gamma_4 \times k$

而统计上,这两个差异是完全相等的——因为base作为协变量,它的系数($\beta_1$和$\gamma_1$)只会影响模型的截距和base的效应,不会改变arm主效应和arm*avisitn交互效应的估计值。换句话说,arm组间的相对差异,在这两个线性转换的模型里是完全一致的。

再直白点说:LS均值是调整到协变量(这里是base)均值后的估计值,aval的LS均值 = chg的LS均值 + base的均值,所以两组arm的差异会抵消掉base均值的部分,最终结果完全相同。

二、代码层面的验证建议

你可以通过输出LS均值并对比,直观看到这个规律,修改后的代码如下:

1. 第一个模型(输出LS均值)

proc mixed data=inds;
    class subject arm(ref='C') ;
    model aval =base arm avisitn arm*avisitn /s ;
    random subject ;
    repeated /  subject=subject ;
    lsmeans arm / diff cl at avisitn=0;
    lsmeans arm / diff cl at avisitn=1;
    lsmeans arm / diff cl at avisitn=2;
    ods output diffs=diff lsmeans=ls_aval; /* 新增输出LS均值 */
run;

2. 第二个模型(输出LS均值)

proc mixed data=inds;
    class subject arm(ref='C') ;
    model chg =base arm avisitn arm*avisitn /s;
    random subject ;
    repeated / subject=subject ;
    /*   lsmeans arm / pdiff cl at avisitn=0;*/
    lsmeans arm / pdiff cl at avisitn=1;
    lsmeans arm / pdiff cl at avisitn=2;
    ods output diffs=diff1 lsmeans=ls_chg; /* 新增输出LS均值 */
run;

3. 验证LS均值的关系

先计算base的均值,再对比两个模型的LS均值:

/* 计算base的均值 */
proc means data=inds noprint;
    var base;
    output out=base_stats mean=mean_base;
run;

/* 合并并验证 */
data ls_compare;
    set ls_aval rename=(lsmean=lsmean_aval)
        ls_chg rename=(lsmean=lsmean_chg);
    by arm avisitn;
    set base_stats;
    /* 计算chg的LS均值加上base均值,应该等于aval的LS均值 */
    lsmean_chg_plus_base = lsmean_chg + mean_base;
run;

/* 打印对比结果 */
proc print data=ls_compare;
    var arm avisitn lsmean_aval lsmean_chg_plus_base;
    title "对比aval和chg的LS均值(chg+base均值)";
run;

运行后你会发现:lsmean_aval和lsmean_chg_plus_base几乎完全相等(浮点误差忽略),而它们的组间差异自然也完全一致。

这样解释应该能帮你彻底理解啦,本质就是线性转换加上协变量调整的一致性导致的结果~

备注:内容来源于stack exchange,提问作者XixiHaha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 08:49:07