协变量循环:使 SPSS 根据线性回归中的预测变量选择协变量

Loops for covariates: making SPSS choose covariates according to predictor in linear regression

在我的数据集中,我有几个自变量(这里命名为"predictor1"、"predictor2"等)和几个因变量(outcomeA", "outcomeB" 等)。此外,我有几个协变量("covariate1"、"covariate2" 等)。

我想做线性回归分析,其中我

我知道如何构建一个循环,使用 predictor1 预测所有结果,然后使用 predictor2 预测所有结果,等等. 我也知道如何添加将用于所有模型的协变量,而不管所讨论的预测变量如何,但这没有用。

不知道 的是:我如何 "couple" 与预测变量进行协变量,以便当我使用 predictor1 预测结果时,我也会调整 covariate1?然后,当我使用 predictor2 预测结果时,我将针对 covariate2 等进行调整

下面是我执行此操作的语法,以便所有模型 包含相同的协变量。我如何更改此设置,以便 SPSS 不会对所有模型使用所有这些协变量,而是根据自变量选择它们?我可以为循环将经过的自变量构建两个列表(例如“!indepvars1”和“!indepvars2”)或类似的东西,或者我能做什么?

显然,我没有编程方面的经验,而且我无法独自完成它。也许答案是显而易见的。

PRESERVE. 
SET TVARS NAMES. 
oms select tables
/destination format = sav 
               numbered = "Table_Number" 
               outfile = '\ATKK\visit1_TEMP1.sav'
/if commands = ['regression'] 
               subtypes = ['Coefficients']
/tag = "reg".

*////////////////////.
DEFINE !regtest100 (indepvars=!charend ('/') /depvars=!CMDEND)
   !DO !depvar !IN (!depvars)
   !DO !indepvar !IN (!indepvars)
        regression 
 /STATISTICS COEFF OUTS CI(95) R ANOVA
           /dependent = !depvar
           /method = enter !indepvar covariate1 covariate2 covariate3.  
   !DOEND
   !DOEND
!ENDDEFINE.
*///////////////////

    !regtest100
     indepvars= predictor1 predictor2 predictor3.
   / depvars=   outcomeA outcomeB outcomeC.
    EXECUTE.

您可以通过多种方式实现这一目标,具体取决于您期望输入的方式。

下面是一种方法,其中回归变量和协变量变量都作为宏参数的参数提供。变量在它们的位置上配对在一起。 (您会期望在 indepvars 宏参数和 covars 参数中输入的变量数量相等。我会建立一个明确的检查以确保彻底)。

我在宏体中添加了注释来解释一些逻辑,希望对您有所帮助。

*////////////////////.
define !RunJob1 (depvars=!charend ('/')  /indepvars=!charend ('/') /covars=!charend ('/'))

!do !dv !in (!depvars)
  !let !cv=!covars /* make copy of original list of variables */
  !do !iv !in (!indepvars)
      !let !cvhead=!head(!cv) /* retrieve first variable in list */
      !let !cv=!tail(!cv)     /* retrieve all but first variable in list */
      title !dv !iv !cvhead   /* print results as test */ .
  !doend
!doend

!enddefine.
*////////////////////.

!RunJob1 depvars=dv1 dv2 dv3 /indepvars=Apple Bananna Carrot /covars=A1 B2 C3.

或者,如果您的输入变量有一个特定的格式,其中有一个预定义的前缀存根,后跟数字后缀,那么您可以稍微不同地处理这个问题,这也会更容易编码。这里还有另一个例子也证明了这一点:

*////////////////////.
define !RunJob2 (depvars=!charend ('/'))

!do !dv !in (!depvars)
  !let !cv=!covars
  !do !i = 1 !to 3
      title !dv !concat("iv", !i) !concat("cv",!i) .
  !doend
!doend

!enddefine.
*////////////////////.

!RunJob2 depvars=dv1 dv2 dv3.

显然这里做了很多假设。您必须评估您的数据,看看什么最适合您的需求(如果有的话,或者其他可能更合适)

由于没有编程经验,我还是花了一些时间才将 Jignesh Sutar 在这里给出的重要建议付诸实践。这是最终的 SPSS 语法,以防它能帮助其他真正需要 script for dummies 类型示例的人。

*////////////////////.
DEFINE 
    !regtest101 (depvars=!charend ('/')  /indepvars=!charend ('/') /covars=!charend ('/'))
    !DO !depvar !IN (!depvars)
    !let !cv=!covars 
    !DO !indepvar !IN (!indepvars)
    !let !cvhead=!head(!cv) 
    !let !cv=!tail(!cv)     
regression   
    /STATISTICS COEFF OUTS CI(95) R ANOVA
    /dependent = !depvar
    /method = enter !indepvar !cvhead extracovariateA extracovariateB. 
    !doend
!doend

!enddefine.
*////////////////////.

!regtest101
    depvars= outcomeA outcomeB outcomeC
    /indepvars= predictor1 predictor2 predictor3 
    /covars= covariate1 covariate2 covariate3.
EXECUTE.

两个额外的协变量(extracovariateA、extracovariateB)是包含在所有模型中的额外协变量,而covariate1covariate2covariate3 是在连续模型中添加的("paired up" with predictor1, predictor2, predictor3).