我是SPSS的新手,我有点陷入困境。我有大约200个变量,我想循环遍历它们,寻找相关系数大于0.7的变量。我知道我可以使用CORRELATIONS来获得系数矩阵,但是它会很大并且难以查看。基本上,在伪代码中,我想要做的是:
for (i = W1_1 to W1_200) {
for (j = i to W1_200) {
if CORRELATIONS(i,j)>0.7 {
print i, j, CORRELATIONS(i,j)
}
}
}
我不能为我的生活在SPSS中解决如何做这些事情。救命啊!
答案 0 :(得分:0)
SPSS在CORRELATIONS
命令上有一个辅助函数来导出相关矩阵。从那里,您可以操纵数据以提供符合您标准的关联对。首先,让我们做一些假数据来说明。
*Making fake data.
set seed 5.
input program.
loop i = 1 to 100.
end case.
end loop.
end file.
end input program.
dataset name test.
compute #base = RV.NORMAL(0,1).
vector X(20).
loop #i = 1 to 20.
compute X(#i) = #base*(#i/20) + RV.NORMAL(0,1).
end loop.
exe.
现在,我们可以运行CORRELATIONS
命令并将表导出到新数据集(我在此处命名为Corrs
)。
DATASET DECLARE Corrs.
CORRELATIONS
/VARIABLES=X1 to X20
/MATRIX=OUT('Corrs').
不幸的是,SPSS返回完整的矩阵(以及样本大小的其他信息)。我们只能选择我们感兴趣的行(ROWTYPE_
列中包含“CORR”的行),然后使用DO REPEAT
将矩阵的上半部分或下半部分设置为系统缺失值。 / p>
DATASET ACTIVATE Corrs.
SELECT IF ROWTYPE_ = "CORR".
*Now only making lower half of matrix.
COMPUTE #iter = 0.
DO REPEAT X = X1 TO X20.
COMPUTE #iter = #iter + 1.
IF #iter > ($casenum-1) X = $SYSMIS.
END REPEAT.
我将它们设置为系统缺失值,因为下一部分我将使用VARSTOCASES
重塑数据。这默认情况下会丢失缺失值,因此我们不会最终拥有冗余关联对。
VARSTOCASES
/MAKE Corr FROM X1 TO X20
/INDEX X2 (Corr)
/DROP ROWTYPE_.
RENAME VARIABLES (VARNAME_ = X1).
现在您拥有相关对列表,只需选择符合条件的相关性即可。
SELECT IF ABS(Corr) >= .5.
可以很容易地将相关对的制作成为MACRO函数以返回对列表。下面是该功能,重新创建此处使用的确切步骤。
DEFINE !CorrPairs (!POSITIONAL !CMDEND)
DATASET DECLARE Corrs.
CORRELATIONS
/VARIABLES=!1
/MATRIX=OUT('Corrs').
DATASET ACTIVATE Corrs.
SELECT IF ROWTYPE_ = "CORR".
COMPUTE #iter = 0.
DO REPEAT X = !1.
COMPUTE #iter = #iter + 1.
IF #iter > ($casenum-1) X = $SYSMIS.
END REPEAT.
VARSTOCASES
/MAKE Corr FROM !1
/INDEX X2 (Corr)
/DROP ROWTYPE_.
RENAME VARIABLES (VARNAME_ = X1).
!ENDDEFINE.
宏只是获取变量列表(在活动数据集中)以获取相关性,并返回名为Corrs
的第二个数据集,其中包含相关对和X1和X2列中定义的变量名称。然后在定义上述宏之后,可以通过以下简单地重新创建上述步骤。
!CorrPairs X1 to X20.
SELECT IF ABS(Corr) >= .5.
EXECUTE.
答案 1 :(得分:0)
我的建议是使用OMS将输出中的相关值提取到数据文件中。使用宏仅运行所需的相关性:
DATASET DECLARE Correlations.
OMS /SELECT TABLES /IF COMMANDS=['Correlations'] SUBTYPES=['Correlations']
/DESTINATION FORMAT=SAV NUMBERED=TableNumber_ OUTFILE='Correlations' VIEWER=YES.
define runCorrs ()
!do !i1=1 !to 200
!do !i2=!i1 !to 200
!if (!i2<>!i1) !then
corr !concat("W_",!i1) with !concat("W_",!i2).
!ifend
!doend !doend
!enddefine.
runCorrs.
OMSEND.
datas act Correlations.
select if var2="Pearson Correlation".
VARSTOCASES /make crlVal from W_2 to W_200/index=withvar(crlVal)
/drop TableNumber_ Command_ Subtype_ Label_ Var2.
现在你有一个很好的列表,列出了可以使用的所有相关性:
select if crlVal>0.7.
exe.