协变量循环:使 SPSS 根据线性回归中的预测变量选择协变量
Loops for covariates: making SPSS choose covariates according to predictor in linear regression
在我的数据集中,我有几个自变量(这里命名为"predictor1"、"predictor2"等)和几个因变量(outcomeA", "outcomeB" 等)。此外,我有几个协变量("covariate1"、"covariate2" 等)。
我想做线性回归分析,其中我
- 首先使用 predictor1 预测所有结果,同时针对 covariate1 进行调整。
- 然后使用 predictor2 预测所有结果,同时针对 covariate2.
进行调整
- 然后使用 predictor3 预测所有结果,同时针对 covariate3 进行调整。
等等
我知道如何构建一个循环,使用 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)是包含在所有模型中的额外协变量,而covariate1、covariate2 和 covariate3 是在连续模型中添加的("paired up" with predictor1, predictor2, predictor3).
在我的数据集中,我有几个自变量(这里命名为"predictor1"、"predictor2"等)和几个因变量(outcomeA", "outcomeB" 等)。此外,我有几个协变量("covariate1"、"covariate2" 等)。
我想做线性回归分析,其中我
- 首先使用 predictor1 预测所有结果,同时针对 covariate1 进行调整。
- 然后使用 predictor2 预测所有结果,同时针对 covariate2. 进行调整
- 然后使用 predictor3 预测所有结果,同时针对 covariate3 进行调整。 等等
我知道如何构建一个循环,使用 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)是包含在所有模型中的额外协变量,而covariate1、covariate2 和 covariate3 是在连续模型中添加的("paired up" with predictor1, predictor2, predictor3).