2014-01-08 1 views
2

SPSS를 처음 사용하는데 문제가 생겼습니다. 나는 약 200 개의 변수를 가지고 있으며, 0.7 이상의 상관 계수를 가진 변수를 찾는 쌍을 반복하고 싶습니다. 상관 관계를 사용하여 계수의 행렬을 구할 수는 있지만 엄청나게 보일 것입니다. 기본적으로, 의사로, 제가하고 싶은 것은 : 나는 내 인생 SPSS이 중 하나를 수행하는 방법을 작동하지 않을 수 있습니다에 대한SPSS의 루핑 및 if 문

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) 
     } 
    } 
} 

. 도움!

답변

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을 사용하여 행렬의 상반부 또는 하반부를 시스템 누락 값으로 설정할 수 있습니다. 다음 부분은 내가 VARSTOCASES를 사용하여 데이터를 바꿀 때문에

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 
/MAKE Corr FROM X1 TO X20 
/INDEX X2 (Corr) 
/DROP ROWTYPE_. 
RENAME VARIABLES (VARNAME_ = X1). 

이제 상관 관계 쌍 목록이 표시되며 기준에 맞는 상관 관계를 선택할 수 있습니다.

SELECT IF ABS(Corr) >= .5. 

상관 관계 쌍을 만들어 매크로 목록을 쉽게 반환 할 수 있습니다. 아래는이 기능을 사용하는 정확한 단계를 다시 작성한 것입니다.

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. 

매크로는 상관 잡아 (활성 세트에서) 변수의리스트를 취하고, 상관 쌍 및 X1 및 X2 열 정의 변수 이름 Corrs라는 두번째 집합을 리턴한다. 위의 매크로를 정의한 후 위의 단계를 아래에서 간단히 다시 만들 수 있습니다.

!CorrPairs X1 to X20. 
SELECT IF ABS(Corr) >= .5. 
EXECUTE. 
0

내 제안은 OMS를 사용하여 상관 관계 값을 출력에서 ​​데이터 파일로 추출하는 것입니다.

select if crlVal>0.7. 
exe. 
:

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. 

은 이제 작업 할 모든 상관 관계의 좋은 목록을 가지고 : 단지 당신이 필요로하는 상관 관계를 실행하는 매크로를 사용하여