4편에서는 집단 사이의 평균 차이를 봤습니다. 이번 편에서는 변수와 변수 사이의 관계를 봅니다. 다룰 분석은 세 가지입니다.
- 상관분석: 두 변수가 함께 움직이는지(나이가 많을수록 연봉도 높은지 등)를 -1에서 1 사이의 숫자로 봅니다.
- 다중회귀: 연봉을 나이, 학력, 부서로 설명합니다. 상관이 “관계가 있다”까지라면, 회귀는 “다른 조건이 같을 때 나이가 한 살 많으면 연봉이 얼마나 오르는가”처럼 크기를 알려 줍니다.
- 로지스틱 회귀: 결과가 ‘예/아니오’처럼 두 가지일 때 쓰는 회귀입니다. 여기서는 재수강 의향을 만족도, 향상분, 집단으로 예측합니다.
데이터
이번에도 data/training_survey.sav를 씁니다. 연봉은 나이, 학력, 개발부서 여부로 계산되도록 만들었기 때문에, 이 세 변수로 회귀를 돌리면 R²가 .6~.7 근처로 나와야 정상입니다. R²는 연봉의 흩어짐 가운데 모형이 설명하는 비율이라서, .67이면 약 3분의 2를 설명한다는 뜻입니다. 재수강 의향은 만족도와 향상분이 높을수록 ‘예’가 나오기 쉽도록 만들었습니다.
메뉴로 하기
상관분석은 Analyze > Bivariate Correlation, 선형회귀는 Analyze > Regression > Linear, 로지스틱 회귀는 Analyze > Regression > Binary Logistic에 있습니다. ‘Binary’는 결과가 두 가지(이항)라는 뜻입니다.
상관 대화상자에 변수를 여러 개 넣으면 모든 쌍의 상관을 한 번에 계산해 행렬로 보여 줍니다. 변수 다섯 개를 넣으면 5×5 표가 나옵니다.

선형회귀 대화상자에는 설명하려는 종속변수 하나와, 설명에 쓰는 독립변수 여러 개를 넣습니다. Statistics 버튼에서 계수(Coefficients), R, 분산분석표(ANOVA)를 고릅니다. 계수표에서 각 변수의 영향 크기를, R에서 모형 전체의 설명력을, 분산분석표에서 모형 전체가 유의한지를 봅니다.

신택스로 하기
신택스 파일은 syntax/06_correlation_regression.sps와 syntax/07_logistic.sps입니다.
회귀에 부서를 넣으려면 한 가지 준비가 필요합니다. 부서(dept)는 1=영업, 2=개발, 3=관리처럼 번호로 되어 있지만, 이 번호는 크기가 아니라 이름표일 뿐입니다. 그대로 회귀에 넣으면 “부서 번호가 1 커질 때마다 연봉이 얼마 오른다”는 엉뚱한 해석이 됩니다. 그래서 “개발부서인가 아닌가”를 0과 1로 표시한 더미 변수를 새로 만듭니다. (dept = 2)라는 식은 참이면 1, 거짓이면 0이 되는 SPSS 식 그대로이고, PSPP에서도 똑같이 동작합니다.
* 상관행렬.
* VARIABLES 에 나열한 변수끼리 모든 쌍의 Pearson 상관을 구합니다.
* PRINT=TWOTAIL SIG 는 양측 검정 유의확률을 함께 인쇄하라는 뜻입니다.
CORRELATIONS
/VARIABLES=age edu salary sat_mean gain
/PRINT=TWOTAIL SIG.
* 부서 더미(개발 여부) 생성 후 급여 회귀.
* dept 가 2(개발)이면 dev=1, 아니면 dev=0 이 됩니다.
COMPUTE dev = (dept = 2).
VARIABLE LABELS dev '개발부서 여부'.
* STATISTICS 로 계수표, 모형 요약(R), 분산분석표를 요청합니다.
* DEPENDENT 에 종속변수를 적습니다.
* METHOD=ENTER 는 나열한 독립변수를 한꺼번에 모두 넣는 방식입니다.
REGRESSION
/STATISTICS COEFF R ANOVA
/DEPENDENT salary
/METHOD=ENTER age edu dev.
로지스틱 회귀는 VARIABLES 뒤에 결과 변수를, WITH 뒤에 예측 변수를 씁니다.
* 재수강 의향(reenroll: 0=아니오, 1=예)을 만족도, 향상분, 집단으로 예측합니다.
* PRINT=SUMMARY 는 요약 수준의 출력을 요청합니다.
LOGISTIC REGRESSION VARIABLES reenroll
WITH sat_mean gain group
/PRINT=SUMMARY.
출력 읽기
먼저 상관행렬의 일부입니다.
|나이 Pearson |1.000| -.017| .544| .017| -.011|
| Sig. (2-tailed) | | .816| .000| .810| .882|
|최종 학력 Pearson |-.017| 1.000| .476| .046| -.002|
|연봉(만원) Pearson | .544| .476| 1.000| -.028| .012|
행과 열이 만나는 칸이 두 변수의 상관계수입니다. 열 순서는 신택스에 적은 순서(나이, 학력, 연봉, 만족도 평균, 향상분)와 같습니다. 대각선의 1.000은 변수 자기 자신과의 상관이라 볼 필요가 없습니다. Pearson 줄에서 계수를, 그 아래 Sig. (2-tailed) 줄에서 유의확률을 읽습니다.
나이와 연봉은 r=.544, 학력과 연봉은 r=.476으로, 둘 다 나이가 많을수록, 학력이 높을수록 연봉이 높은 양의 관계입니다. 나이와 학력의 상관은 -.017로 사실상 관계가 없습니다. 이 점이 뒤의 회귀에서 중요합니다. 독립변수끼리 서로 얽혀 있지 않으면 각 변수의 영향을 깔끔하게 나눠 볼 수 있기 때문입니다. 만족도와 향상분은 어느 변수와도 상관이 거의 없는데, 처음부터 그렇게 설계했습니다.
다음은 회귀의 모형 요약입니다.
Model Summary (연봉(만원))
+---+--------+-----------------+--------------------------+
| R |R Square|Adjusted R Square|Std. Error of the Estimate|
+---+--------+-----------------+--------------------------+
|.82| .67| .66| 332.84|
+---+--------+-----------------+--------------------------+
R Square 열의 .67이 앞에서 말한 설명력입니다. 나이, 학력, 개발부서 여부 세 가지로 연봉 차이의 약 67%를 설명한다는 뜻입니다. Adjusted R Square(.66)는 변수 개수를 감안해 조금 깎은 값이고, 변수를 많이 넣은 모형끼리 비교할 때 씁니다. 마지막 열 Std. Error of the Estimate(332.84)는 모형의 예측이 실제 연봉에서 대략 얼마나 벗어나는지를 연봉 단위(만원)로 보여 줍니다.
이어서 계수표입니다.
|(Constant) | 1136.76| 140.15| .00| 8.11|.000|
|나이 | 44.22| 3.23| .56|13.68|.000|
|최종 학력 | 316.58| 30.87| .43|10.25|.000|
|개발부서 여부| 434.65| 48.38| .37| 8.98|.000|
열은 왼쪽부터 비표준화 계수 B, 그 표준오차, 표준화 계수 Beta(β), t, 유의확률입니다. 세 독립변수 모두 마지막 열이 .000이므로 p<.001로 유의합니다.
B 열은 원래 단위로 읽는 값입니다. “다른 변수가 같을 때 나이가 한 살 많으면 연봉이 44만원, 학력이 한 단계 높으면 317만원, 개발부서면 435만원 더 높다”로 해석합니다. 데이터를 그렇게 만들었으니 당연한 결과이긴 하지만, 회귀가 설계해 둔 값을 되찾아 냈다는 점을 확인할 수 있습니다.
Beta 열은 단위를 없앤 값이라 변수끼리 영향력을 비교할 때 씁니다. 나이(.56), 학력(.43), 개발부서(.37) 순입니다. B만 보면 학력(316.58)이 나이(44.22)보다 훨씬 커 보이지만, 나이는 수십 살 범위로 움직이고 학력은 네 단계뿐이라 단위가 다릅니다. 그래서 “어느 변수가 더 중요한가”는 Beta로 비교합니다.
마지막으로 로지스틱 회귀의 계수표입니다.
Variables in the Equation
+-----------------------------+-----+----+-----+--+----+------+
| | B |S.E.| Wald|df|Sig.|Exp(B)|
+-----------------------------+-----+----+-----+--+----+------+
|Step 1 만족도 평균 | .56| .20| 7.86| 1|.005| 1.74|
| 점수 향상분(사후-사전)| .08| .03| 9.29| 1|.002| 1.09|
| 실험 집단 | .39| .35| 1.22| 1|.269| 1.48|
| Constant |-3.00| .80|13.95| 1|.000| .05|
+-----------------------------+-----+----+-----+--+----+------+
로지스틱 회귀에서는 B보다 마지막 열 Exp(B)를 읽는 편이 쉽습니다. Exp(B)는 오즈비라고 부르며, 그 변수가 1 늘 때 ‘예’가 나올 오즈(예가 나올 가능성 대비 아니오가 나올 가능성)가 몇 배가 되는지를 뜻합니다. 1보다 크면 ‘예’ 쪽으로, 1보다 작으면 ‘아니오’ 쪽으로 기웁니다.
만족도는 Exp(B)=1.74, p=.005로 유의합니다. 만족도 평균이 1점 높으면 재수강 의향 오즈가 약 1.74배가 됩니다. 향상분도 Exp(B)=1.09, p=.002로 유의합니다. 점수가 1점 더 오를 때마다 오즈가 약 1.09배씩 커집니다. 반면 집단(실험군 여부)은 p=.269로 유의하지 않습니다. 향상분을 이미 모형에 넣어 두었기 때문에, 그 효과를 빼고 나면 집단 자체가 따로 더 설명하는 부분은 뚜렷하지 않다는 뜻입니다.
같은 출력의 분류표(Classification Table)에서는 모형이 200명 중 몇 명의 재수강 의향을 맞혔는지 보여 줍니다. 전체 정확도는 68.0%입니다.
SPSS와 대조
같은 신택스를 SPSS 32에서 돌린 값입니다.
| 항목 | PSPP 2.1.1 | SPSS 32 |
|---|---|---|
| r 나이–연봉 / 학력–연봉 | .544 / .476 | .544 / .476 |
| R / R² / 수정 R² | .82 / .67 / .66 | .817 / .668 / .663 |
| 추정값의 표준오차 | 332.84 | 332.838 |
| B 상수 / 나이 / 학력 / 개발 | 1136.76 / 44.22 / 316.58 / 434.65 | 1136.765 / 44.219 / 316.578 / 434.653 |
| β 나이 / 학력 / 개발 | .56 / .43 / .37 | .563 / .427 / .374 |
| 로지스틱 B 만족도 / 향상분 / 집단 | .56 / .08 / .39 | .556 / .083 / .390 |
| 로지스틱 Exp(B) | 1.74 / 1.09 / 1.48 | 1.743 / 1.086 / 1.477 |
| 로지스틱 p | .005 / .002 / .269 | .005 / .002 / .269 |
| 분류 정확도 | 68.0% | 68.0% |
전부 같습니다. SPSS가 소수 자리를 한두 자리 더 보여 줄 뿐, PSPP가 인쇄하는 자리까지는 일치합니다.
한 가지 더 확인해 본 것이 있습니다. SPSS에서 같은 로지스틱 모형을 GENLIN(일반화 선형모형)으로 다시 돌려도 계수가 완전히 같았습니다. GENLIN은 PSPP에 없는 명령이지만, 이항 로지스틱이라면 LOGISTIC REGRESSION으로 같은 답을 얻을 수 있습니다. 교재나 논문에서 GENLIN으로 로지스틱 회귀를 한 신택스를 보시더라도, PSPP에서는 LOGISTIC REGRESSION으로 바꿔 돌리면 됩니다.
함정과 메모
- 상관행렬에서 PSPP는 소수 셋째 자리(.544)까지 인쇄합니다. 다른 표는 대부분 둘째 자리까지라서, 같은 PSPP 출력 안에서도 자릿수가 다를 수 있다는 점을 알아 두시면 좋습니다.
- REGRESSION의 단계선택(STEPWISE)은 PSPP에서 지원이 제한적입니다. 이 시리즈에서는 변수를 한꺼번에 넣는 ENTER만 썼습니다.
- 편상관(PARTIAL CORR)은 PSPP에 없습니다. 회귀 잔차를 이용해 우회하는 방법을 8편에서 다룹니다.
다음 편
6편에서는 만족도 5문항이 하나의 척도로 묶일 만큼 일관된지(신뢰도), 어떤 구조로 묶이는지(요인분석)를 확인합니다. 그리고 비모수 검정에서 PSPP와 SPSS의 값이 처음으로 어긋나는 지점을 살펴봅니다.
시리즈 목차: 0편 총론 · 1편 · 2편 · 3편 · 4편 · 5편 상관·회귀·로지스틱 · 6편 · 7편 · 8편 · 9편