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

时间:2015-07-09 12:35:26

标签: multiple-regression spss

在我的数据集中,我有几个自变量(这里名为" predictor1"," predictor2" 等)和几个因变量(&# 34; 结果A","结果B "等)。此外,我有几个协变量(" covariate1"," covariate2" 等)。

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

  • 首先使用 predictor1 预测所有结果,同时调整 covariate1
  • 然后使用 predictor2 预测所有结果,同时调整 covariate2
  • 然后使用 predictor3 预测所有结果,同时调整 covariate3 。 等

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

不知道是这样的:我如何"情侣"与预测变量协变,因此当我使用 predictor1 预测结果时,我还会调整 covariate1 ?然后,当我使用 predictor2 预测结果时,我会调整 covariate2 等。

下面是我执行此操作的语法,以便所有模型包含相同的协变量。如何更改此值以便SPSS不会对所有模型使用所有这些协变量,而是根据自变量选择它们?我可以为循环将经历的独立变量构建两个列表(例如"!indepvars1"和#34;!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.

2 个答案:

答案 0 :(得分:1)

根据您对输入的预期,您可以通过多种方式实现此目标。

下面是一种方法,其中回归变量和协变量变量都作为宏参数的参数提供。变量在它们的位置上配对。 (您可能希望在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.

显然,这里有很多假设。您必须评估您的数据,以查看最适合您需求的数据(如果有的话或其他更合适的话)

答案 1 :(得分:1)

由于没有编程经验,我还需要一段时间才能将Jignesh Sutar提供的好建议付诸实践。这是最终的SPSS语法,以防它帮助其他真正需要脚本的傻瓜式例子。

*////////////////////.
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 )是包含在所有模型中的其他协变量,而 covariate1 covariate2 和< em> covariate3 是在连续模型中添加的(与预测变量1,预测变量2,预测变量3 配对)。