1

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

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

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

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

不知道的是:如何将协变量与预测变量“耦合”,这样当我使用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.
4

2 回答 2

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)是包含在所有模型中的额外协变量,而covariate1covariate2covariate3是在连续模型中添加的那些(与predictor1、predictor2、predictor3 “配对” )。

于 2015-07-20T08:47:50.547 回答
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.

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

于 2015-07-09T15:24:44.080 回答