PSPP 강의 7편 — 데이터 관리와 매크로

이 편에서는 분석 자체보다 그 앞뒤에 필요한 것들을 다룬다. 일부 케이스만 고르기, 가중치 걸기, 집단별로 나눠 돌리기, 집계값을 각 케이스에 붙이기, 파일 병합, 그리고 반복 작업을 줄이는 매크로다. 덤으로 단변량 GLM, K-평균 군집, ROC 곡선도 확인한다. PSPP에만 있는 함정이 하나 나온다.

데이터

data/training_survey.sav. 이 편의 신택스는 활성 데이터를 바꾸지만 저장하지 않으니 파일은 그대로다.

메뉴로 하기

Data 메뉴에 Select Cases, Weight Cases, Split File, Aggregate, Sort Cases가 있다. SPSS와 같은 자리다.

Select Cases 대화상자는 무작위 표본, 케이스 범위, 필터 변수 사용을 지원한다. 고르지 않은 케이스를 걸러만 둘지 지울지도 여기서 정한다. SPSS에 있는 “조건식을 만족하는 케이스” 항목은 이 대화상자에 없다. 조건으로 고르려면 아래 신택스의 SELECT IF를 쓰거나, Transform > Compute로 0/1 변수를 만들어 필터 변수로 넣는다.

PSPPIRE Select Cases 대화상자

신택스로 하기

syntax/14_data_mgmt_extra_procs.sps에서 데이터 관리 부분이다.

* TEMPORARY + SELECT IF — 다음 절차 하나에만 실험군 선택.
TEMPORARY.
SELECT IF (group = 2).
DESCRIPTIVES VARIABLES=gain /STATISTICS=MEAN STDDEV.

* FILTER — 재수강 의향자만 (끌 때까지 유지).
FILTER BY reenroll.
FREQUENCIES VARIABLES=dept /STATISTICS=NONE.
FILTER OFF.

* WEIGHT — 여성 1.5배 가중.
COMPUTE w = 1 + (gender = 2) * 0.5.
WEIGHT BY w.
FREQUENCIES VARIABLES=gender /STATISTICS=NONE.
WEIGHT OFF.

* SPLIT FILE — 집단별 분리 출력.
SORT CASES BY group.
SPLIT FILE BY group.
DESCRIPTIVES VARIABLES=pre_score post_score /STATISTICS=MEAN STDDEV.
SPLIT FILE OFF.

* AGGREGATE(ADDVARIABLES) — 부서별 평균 연봉을 각 케이스에 붙임.
SORT CASES BY dept.
AGGREGATE /OUTFILE=* MODE=ADDVARIABLES
  /BREAK=dept
  /dept_salary_mean=MEAN(salary) /dept_n=N.

* AGGREGATE(파일) + MATCH FILES — 조회 테이블 병합.
AGGREGATE /OUTFILE='data/tmp_dept_agg.sav'
  /BREAK=dept
  /dept_gain_mean=MEAN(gain).
SORT CASES BY dept.
MATCH FILES /FILE=* /TABLE='data/tmp_dept_agg.sav' /BY dept.

INSERT FILE='다른파일.sps'로 외부 신택스를 끼워 넣는 것도 된다. 이 파일은 실제로 보조 신택스 하나를 INSERT로 불러 파생 변수를 만든다.

출력 읽기

SELECT IF 뒤의 기술통계는 N=106(실험군)이고 평균 8.27이다. FILTER 뒤의 부서 빈도는 합계 87(재수강 의향자)이다. 가중치를 걸면 성별 빈도가 남성 99.00, 여성 151.50이 된다.

SPLIT FILE은 집단마다 “Split Values” 표를 앞세우고 결과를 따로 낸다.

   Split Values
+---------+------+
|Variable | Value|
+---------+------+
|실험 집단|대조군|
+---------+------+

AGGREGATE로 붙인 부서별 평균 연봉은 3406.63(영업)에서 3944.36(개발) 사이 세 값이고, 부서별 케이스 수는 42, 75, 83이다.

AGGREGATE 함정 — 정렬부터

이건 실제로 당했다. 부서별 평균을 각 케이스에 붙이는 흔한 코드를 정렬 없이 돌렸다.

AGGREGATE /OUTFILE=* MODE=ADDVARIABLES
  /BREAK=dept
  /dept_n=N.

SPSS 32는 정렬 없이 돌려도 42 / 75 / 83으로 맞게 나온다. PSPP는 오류 없이 틀린 값을 낸다.

+--------------------+---+----+-------+-------+
|                    | N |Mean|Minimum|Maximum|
+--------------------+---+----+-------+-------+
|dept_n              |200|2.10|      1|      7|

부서는 셋인데 케이스 수가 1에서 7 사이다. PSPP 매뉴얼에 “ADDVARIABLES는 PRESORTED를 함의한다”고 적혀 있다. 데이터가 이미 정렬돼 있다고 가정하고 같은 부서가 연속한 구간만 묶는 것이다. 앞의 신택스처럼 SORT CASES BY dept.를 먼저 하면 SPSS와 같은 값이 나온다. 오류가 안 나기 때문에 더 위험하다.

매크로

“PSPP는 매크로가 안 된다”는 말이 돌아다니는데 옛 정보다. syntax/12_unsupported_macro.sps의 세 가지가 전부 돌아간다. 단순 매크로, 리스트 반복, 조건 분기, 숫자 반복과 변수 이름 조합이다.

DEFINE !desc(vars=!CMDEND)
  DESCRIPTIVES VARIABLES=!vars /STATISTICS=MEAN STDDEV.
!ENDDEFINE.
!desc vars=age salary.

DEFINE !freqs(vars=!CMDEND)
  !DO !v !IN (!vars)
    FREQUENCIES VARIABLES=!v /STATISTICS=NONE.
  !DOEND
!ENDDEFINE.
!freqs vars=gender dept.

DEFINE !desc2(var=!TOKENS(1) / full=!TOKENS(1))
  !IF (!full = 1) !THEN
    DESCRIPTIVES VARIABLES=!var /STATISTICS=MEAN STDDEV MIN MAX.
  !ELSE
    DESCRIPTIVES VARIABLES=!var /STATISTICS=MEAN.
  !IFEND
!ENDDEFINE.
!desc2 var=age full=1.
!desc2 var=salary full=0.

DEFINE !qfreq(n=!TOKENS(1))
  !DO !i = 1 !TO !n
    FREQUENCIES VARIABLES=!CONCAT(q, !i) /STATISTICS=NONE.
  !DOEND
!ENDDEFINE.
!qfreq n=2.

!desc2 var=age full=1은 네 통계량을, full=0은 평균만 낸다. !qfreq n=2는 q1과 q2의 빈도표를 낸다. SPSS 32에서 같은 표가 나왔다.

단변량 GLM, 군집, ROC

Analyze 메뉴의 Univariate Analysis, K-Means Cluster, ROC Curve다.

GLM salary BY dept group
  /DESIGN=dept group dept*group.

QUICK CLUSTER q1 q2 q3 q4 q5
  /CRITERIA=CLUSTER(3) MXITER(20)
  /PRINT=INITIAL.

ROC gain BY reenroll (1)
  /PLOT=CURVE
  /PRINT=SE COORDINATES.

종속변수가 하나인 GLM은 상호작용 항까지 Type III 제곱합으로 낸다. 부서 F=20.71(p<.001), 집단 F=.89(p=.346), 부서×집단 F=2.01(p=.137).

|부서            |               11111577|  2|    5555789|20.71|.000|
|실험 집단       |               239850.0|  1|   239850.0|  .89|.346|
|부서 × 실험 집단|                1077679|  2|   538839.3| 2.01|.137|

K-평균 군집은 만족도 문항으로 세 군집(49, 96, 55명)을 만든다. 군집 중심을 보면 낮음·중간·높음 집단이다. ROC 곡선은 향상분으로 재수강 의향을 예측할 때 AUC=.68이고 png로 그려진다.

PSPP ROC 곡선

SPSS와 대조

항목 PSPP 2.1.1 SPSS 32 판정
SELECT IF 후 N / 평균 106 / 8.27 106 / 8.266 일치
FILTER 후 부서 N 87 (38/32/17) 87 (38/32/17) 일치
WEIGHT 후 남/여 빈도 99.00 / 151.50 99 / 152 표시만 다름
AGGREGATE 부서 평균 연봉 범위 3406.63 ~ 3944.36 3406.63 ~ 3944.36 일치
AGGREGATE 정렬 없이 dept_n 1~7 (틀림) 42/75/83 (맞음) PSPP만 정렬 필요
MATCH FILES 후 부서 평균 향상분 범위 4.61 ~ 5.07 4.61 ~ 5.07 일치
매크로 4종 정상 정상 일치
GLM 부서 / 집단 / 상호작용 F 20.71 / .89 / 2.01 20.707 / .894 / 2.008 일치
K-평균 군집 크기 49 / 96 / 55 49 / 55 / 96 구성 같고 번호만 다름
ROC AUC / 표준오차 .68 / .04 .680 / .038 일치
ROC 95% 신뢰구간 .62 ~ .74 .607 ~ .754 차이

가중 빈도는 PSPP가 소수 그대로(151.50), SPSS가 정수로 반올림해(152) 보여 주는 차이일 뿐 계산값은 같다. ROC의 AUC와 표준오차는 같은데 95% 신뢰구간이 달라서 구간 산출식이 다른 것으로 보인다.

다음 편

8편에서 PSPP에 없는 절차를 던져 보고, 어떤 오류가 어떻게 나는지, 그리고 우회로가 있는지 본다.


시리즈 목차: 0편 총론 · 1편 · 2편 · 3편 · 4편 · 5편 · 6편 · 7편 데이터 관리와 매크로 · 8편 · 9편

댓글 남기기

이 사이트는 Akismet을 사용하여 스팸을 줄입니다. 댓글 데이터가 어떻게 처리되는지 알아보세요.