PSPP 강의 8편 — 안 되는 것과 우회로

이 편에서는 PSPP에 없는 절차를 일부러 던져 본다. 어떤 오류가 나는지, 오류 메시지가 무엇을 말해 주는지, 그리고 같은 질문에 PSPP로 답할 우회로가 있는지다. 앞 편들이 “된다”를 보였다면 이 편은 “여기서 갈린다”를 보인다.

데이터

data/training_survey.sav. 반복측정 설계(사전·사후 × 집단), 혼합모형, 편상관, Chart Builder 그래프, 그리고 SPSS 전용 고급 절차 열두 가지를 시도한다.

메뉴에서 먼저 보인다

1편에서 본 PSPPIRE의 Analyze 메뉴에는 General Linear Model 항목 자체가 없다. SPSS 32의 같은 메뉴를 펼치면 일변량, 다변량, 반복측도, 분산성분이 있다.

PSPPIRE Analyze 메뉴

SPSS 32 분석 > 일반선형모형 하위 메뉴

메뉴에 없는 것은 신택스로 넣어도 안 된다. 다만 오류 메시지는 무엇이 없는지를 정확히 말해 준다.

신택스로 던져 보기

syntax/10_unsupported_glm_repeated.sps, 11_unsupported_mixed.sps, 13_unsupported_graphs.sps의 GGRAPH 부분, 14_data_mgmt_extra_procs.sps의 PARTIAL CORR 부분이다. 전부 SPSS에서는 정상 실행된다.

GLM pre_score post_score BY group
  /WSFACTOR=time 2 Polynomial
  /METHOD=SSTYPE(3)
  /WSDESIGN=time
  /DESIGN=group.

MIXED post_score BY group WITH pre_score
  /FIXED=group pre_score
  /RANDOM=INTERCEPT | SUBJECT(dept)
  /METHOD=REML.

PARTIAL CORR
  /VARIABLES=salary age BY edu
  /SIGNIFICANCE=TWOTAIL.

GGRAPH
  /GRAPHDATASET NAME="gd" VARIABLES=dept MEAN(salary)[name="ms"]
  /GRAPHSPEC SOURCE=INLINE.
BEGIN GPL
  ...
END GPL.

PSPP의 답이다.

syntax/10_unsupported_glm_repeated.sps:5.5-5.24: error: GLM: Multivariate analysis is not yet
implemented.
    5 | GLM pre_score post_score BY group
      |     ^~~~~~~~~~~~~~~~~~~~

syntax/11_unsupported_mixed.sps:4.1-4.5: error: MIXED: MIXED is not yet implemented.
    4 | MIXED post_score BY group WITH pre_score
      | ^~~~~

error: PARTIAL CORR: PARTIAL CORR is not yet implemented.
error: GGRAPH: GGRAPH is not yet implemented.
error: Unknown command `BEGIN GPL'.

첫 번째 메시지를 자세히 보면 캐럿(^)이 /WSFACTOR가 아니라 종속변수 두 개 pre_score post_score를 가리킨다. PSPP가 막히는 지점은 반복측정이라는 설계가 아니라 종속변수가 여러 개인 것 자체다. 실제로 /WSFACTOR 없이 종속변수만 둘 넣은 MANOVA도 정확히 같은 메시지를 낸다.

SPSS 전용 절차 열두 가지

syntax/15_spss_only.sps에 PSPP에 아예 없을 것으로 예상한 절차를 모았다. 다항·순서형 로지스틱, 일반화 선형모형, MANOVA, 생존분석(Kaplan-Meier, Cox), 판별분석, 계층적 군집, 복합표본, 시계열(ARIMA, 전문가 모델러), R·Python 연동이다. SPSS 32에서는 전부 돌아갔고 PSPP에서는 한 절차도 돌지 않았다. 오류는 두 종류로 갈린다.

PSPP의 반응 명령
not yet implemented (명령은 알지만 미구현) NOMREG, PLUM, KM, COXREG, DISCRIMINANT, CLUSTER, CSPLAN, CSDESCRIPTIVES, DATE, TSMODEL
Unknown command (명령 자체를 모름) GENLIN, ARIMA, BEGIN PROGRAM
10번과 같은 Multivariate analysis is not yet implemented GLM 종속변수 2개 (MANOVA)

“not yet implemented”는 개발 목록에는 있다는 뜻이고, “Unknown command”는 명령어 표에도 없다는 뜻이다. 어느 쪽이든 지금은 안 된다.

한 가지 주의할 것이 있다. PSPP는 BEGIN PROGRAM 블록 안의 Python 코드를 신택스로 읽으려 든다. import sys를 IMPORT 명령으로 해석해 오류를 내고, 그 자리에서 “연쇄 실패를 막기 위해 처리를 중단한다”며 파일 실행을 멈춘다. 신택스 파일 중간에 Python 블록이 있으면 그 뒤 명령은 실행되지 않는다. SPSS에서 쓰던 파일을 PSPP로 가져올 때 BEGIN PROGRAM 블록부터 걷어내야 하는 이유다.

SPSS에서는 어떻게 나오나

같은 신택스를 SPSS 32에서 돌린 값이다. PSPP 열이 비어 있는 것이 이 편의 요점이다.

절차 SPSS 32 PSPP 2.1.1
반복측정 GLM: time F (1, 198) 113.962, p<.001
반복측정 GLM: time × group F 80.272, p<.001
MIXED: group F (1, 197) 81.014, p<.001 (비수렴 경고)
PARTIAL CORR: 학력 통제 연봉–나이 r .628, df=197, p<.001
MANOVA: group Wilks λ / F .700 / 42.281 (2, 197)
GGRAPH 막대그래프 정상 (한글 축 레이블 포함)

MIXED의 비수렴 경고는 예제 데이터에 부서 변량효과가 없어 분산이 0으로 추정되기 때문이고, 통계적으로 정상인 안내다.

우회로

반복측정 2수준 설계 → 차이 점수의 t-검정

사전·사후 두 시점과 집단 하나인 설계에서 관심사는 대개 시점×집단 상호작용, 즉 “실험군의 변화가 대조군보다 큰가”다. 이것은 차이 점수(gain = 사후 − 사전)에 대한 독립표본 t-검정과 같은 검정이다. 4편에서 이미 돌렸다. t=-8.959를 제곱하면 80.26이고, SPSS 반복측정 GLM의 time×group F는 80.272다. 자유도도 (1, 198)로 같다. 반올림 범위에서 같은 값이다.

시점이 셋 이상이거나 개체 내 요인이 둘 이상이면 이 우회로는 안 통한다. 그때는 R(afex, lme4)이나 jamovi·JASP로 간다.

편상관 → 회귀 잔차의 상관

편상관은 정의상 “통제변수로 각각 회귀한 잔차끼리의 상관”이다. PSPP의 REGRESSION은 잔차를 저장할 수 있으니 세 줄이면 된다. 저장소의 syntax/chk_partial_corr_workaround.sps다.

REGRESSION /DEPENDENT salary /METHOD=ENTER edu /SAVE=RESID.
REGRESSION /DEPENDENT age    /METHOD=ENTER edu /SAVE=RESID.
CORRELATIONS /VARIABLES=RES1 RES2 /PRINT=TWOTAIL SIG.
|RES1 Pearson Correlation|1.000| .628|
|     Sig. (2-tailed)    |     | .000|

r=.628. SPSS의 PARTIAL CORR 값과 소수 셋째 자리까지 같다. PSPP의 /SAVE=RESID는 SPSS와 달리 변수 이름을 지정하지 못하고 RES1, RES2처럼 자동으로 붙는다는 점만 다르다.

나머지

  • MANOVA, 혼합모형, 생존분석, 판별분석, 시계열: PSPP에 우회로가 없다. R이 정답이다. jamovi나 JASP는 GUI로 MANOVA와 혼합모형을 지원한다.
  • 다항·순서형 로지스틱: 범주가 셋이면 이항 로지스틱을 범주 쌍마다 돌리는 편법이 있지만 같은 모형은 아니다. R의 nnet, MASS 패키지로 간다.
  • GGRAPH: PSPP의 GRAPH로 히스토그램·산점도·막대그래프까지는 된다(3편의 상자그림처럼 png로 나온다). 꾸밈이 필요하면 9편처럼 csv로 뽑아 다른 도구로 그린다.
  • Python·R 연동: 없다. 대신 PSPP를 배치 모드로 돌리고 출력을 csv로 받아 Python이나 R에서 이어 가는 것이 9편의 흐름이다.

다음 편

9편에서 이 시리즈의 모든 출력을 GUI 없이 만든 방법, 배치 실행과 자동화를 다룬다. 여기서는 PSPP가 SPSS보다 낫다.


시리즈 목차: 0편 총론 · 1편 · 2편 · 3편 · 4편 · 5편 · 6편 · 7편 · 8편 안 되는 것과 우회로 · 9편