서론

인터넷이 본격적으로 보급 된 이후, 인터넷 환경에서는 새로운 어휘가 끊임없이 새롭게 생산되고 또 소비되고 있다. 이렇게 등장하는 신조어는 그 단어를 사용하는 사람들이 맞닥뜨리고 있는 현실을 반영하는 경우가 많다. 2007년 미국의 금융 회사들이 잇달아 파산한 서브프라임 모기지 사태이후, 세계 경제는 저 성장에 시달려 왔고 우리나라 역시 그 영향을 피해갈 수 없었다. 그에 따라 기업들의 채용이 줄어들고, 20,30대 젊은이들의 취업 문제는 날로 심각해져 가고 있다. 이런 암울한 현실을 반영하듯 젊은이들은 어느 하나 이룰 수 없는 자신들의 처지를 비추어 ‘연애,결혼,출산’을 포기하는 ’3포 세대’, ‘5포 세대’(3포+취업+주택 구입)라는 자조적인 신조어를 만들어 내었다. (이들 단어는 각각 2011년과 2014년에 국립국어원에 등재되었다.) 같은 맥락으로 2015년 이후 부터 젊은 세대들이 살아가는 세상을 바라보는 냉소적인 시각을 반응하는 단어가 등장하였는데, 하나는 ‘헬조선’ 다른 하나는 ‘수저계급론’ 이다. ‘수저 계급론’은 영어 속담 ’은수저를 물고 태어났다’(born with a silver spoon in one’s mouth)에서 유래된 것으로 보는데, 개인의 능력보다 부모의 사회적 지위나 경제력이 자녀의 학업 성적이나 취업에 더욱 중요한 요인으로 작용한다는 이론이다. 또한 자신이 어떤 수저에 속하는지 알아보는 ’흙수저 빙고 게임’이 각 종 SNS을 중심으로 퍼져나가기도 하였다.

약 20년전, 공사판에서 육체 노동을 하던 젊은이가 국내 유수 대학교의 법학과에 입학한 사실이 알려져 큰 화제가 되었다. 이른 바 ’개천에서 용난다’는 우리의 오랜 속담이 현실에서 이루어 진 것 인데, 시간이 갈 수록 역경을 딛고 학업적인 성취를 이루어내는 사례는 찾아 보기 힘들어지고 있다. 실제로 국내 사교육 중심지인 대치동 학원가에서는 ‘명문대 입시의 비결은 엄마의 정보력,아빠의 경제력’ 이라는 말이 정설처럼 굳어져 있다. (2009년 SBS 스페셜) 과연 부모의 경제력과 자녀의 성적 사이에는 상관 관계있는 것일까? 우리나라 학생들을 상대로 치루어 지는 수 많은 시험 중에서, 가장 공신력 있고 중요한 시험인 ’대학수학능력시험’성적을 바탕으로, 가계소득과 수능 성적간의 관계에 대해 알아보고자 한다.

분석자료 및 기초통계 분석

한국교육종단연구

가계 소득과 수능 등급의 관계를 살펴보기 위하여 한국교육개발원의 한국교육종단연구 (Korean Education Longitudinal Study)의 자료를 이용하였다. 한국교육종단연구는 2005년 당시 재학중이던 전국 150개 중학교 1학년 학생 6,908명을 표본으로 하여, 만 30세까지 학생들의 성장과 발달, 학교 경험, 그리고 초기 직업의 획득 과정을 추적 조사하는 국가 수준의 종단적 조사 연구이다. 자료의 특징은 학생 설문을 통한 성취도 평가 뿐 아니라, 학부모 설문, 교사 설문, 학교장 설문등을 통하여 학생들의 교육 성취를 다양한 영역에서 다양한 방법으로 측정한다는데 있다. 본 연구에는 한국교육종단연구 6차년도 데이터를 사용하였는데, 6차년도 데이터에 대한 자료 수집이 이루어진 2010년도에는 대상 학생들이 수능 시험을 치루었고, 같은 해 4월 부모를 대상으로 가계 소득을 포함한 설문 조사가 이루어 졌다. 본인은 한국교육 개발원 측에 정식으로 자료 요청을 하고 승인받은 뒤, 데이터를 사용하였다.

데이터 정리

edu<-read.csv('edu.csv')
nrow(edu)  #rawdata 행의 개수는 6908개 이다. 
[1] 6908
edu$math<-as.character(edu$math)
edu$math<-as.numeric(edu$math)
edu$language<-as.character(edu$language)
edu$language<-as.numeric(edu$language)
edu$foreign<-as.character(edu$foreign)
edu$foreign<-as.numeric(edu$foreign)      #언어,수학,외국어 점수가 facotr로 되어있어 수치형으로 전환한다.
edu.rm<-na.omit(edu)                      #결측치를 모두 제거한다.
edu.sub<-subset(edu.rm,income>1&educost>1,select=-c(parreply,stureply))   #소득,교육비에서 무응답과 기재오류는 음수로 기재되어 있으므로 제거한다.
nrow(edu.sub)                            #결측치 제외하고 3063명의 데이터가 존재한다.
[1] 3063



TableID1df8580721b5

Data: edu.copy • Chart ID: TableID1df8580721b5googleVis-0.6.1
R version 3.3.2 (2016-10-31) • Google Terms of UseDocumentation and Data Policy



hist(edu.sub$income,200,xlim=c(0,3000),probability = T,main='월평균 소득 분포의 히스토그램',xlab='월소득(만원)',col='darkgoldenrod1')
lines(density(edu.sub$income),col='navy',lwd=2)
legend(1500,0.002,'평균     406만원',bty='n')  
legend(1500,0.0017,'중앙값  350만원',bty='n') 



hist(edu.sub$educost,150,xlim=c(0,800),probability = T,main='월평균 교육비 지출 분포의 히스토그램',xlab='월 교육비 (만원)',col='olivedrab1')
lines(density(edu.sub$educost),col='tomato',lwd=2)
legend(450,0.01,  '평균    58만원',bty='n')  
legend(450,0.0085,'중앙값   50만원',bty='n') 



월 수입과 교육비 지출간의 Scattorplot (ggriaphExtra )

표준점수를 등급으로 변환 (googleVis)

#소득을 25%,50%,75% 기준으로 나누고 1,2,3,4 로 coding한다.

q<-quantile(edu.sub$income,c(0,.25,.50,.75,1))
edu.sub$incomegr<-cut(edu.sub$income,q)
edu.sub$incomegr<-as.numeric(edu.sub$incomegr)             

 
#언어영역  표준점수를 등급으로 나눈다.
edu.sub$langgr<-cut(edu.sub$language,c(150,129,123,116,108,97,86,72,60,1),right = FALSE,levels<-c(9:1),labels = paste('Gr',9:1))

#수학 가형, 나형 각각의 등급을 구하고, 데이터를 다시 합친다.
mathA<-subset(edu.sub,mathtype=='a')                     #수학 가형 응시자만 선택한다
mathB<-subset(edu.sub,mathtype=='b')                     #수학 나형 응시지만 선택한다
mathA$mathgr<-cut(mathA$math,c(150,132,124,116,107,96,83,72,65,1),right = FALSE,levels<-c(9:1),labels = paste('Gr',9:1))
mathB$mathgr<-cut(mathB$math,c(150,139,129,117,103,89,83,79,75,1),right = FALSE,levels<-c(9:1),labels = paste('Gr',9:1))
edu.sub<-rbind(mathA,mathB)


#외국어 영역 표준점수를 등급으로 나눈다 
edu.sub$foregr<-cut(edu.sub$foreign,c(150,132,125,117,107,95,82,72,66,1),right = FALSE,levels<-c(9:1),labels = paste('Gr',9:1))


edu.cut<-edu.sub[,-c(5:7)]
edu.re <- subset(edu.cut, select=c(1,2,3,4,6,7,5,8,9))
colnames(edu.re)<-c('ID','성별','수입','교육비','소득 등급','언어 등급','수리 선택','수리 등급','외국어 등급')



library(googleVis)
cuttable <- gvisTable(edu.re, options = list(width = 600, height = 300, page = "enable"))
op<-options(gvis.plot.tage=NULL)
cuttable
TableID28b47c5a7a80

Data: edu.re • Chart ID: TableID28b47c5a7a80googleVis-0.6.1
R version 3.3.2 (2016-10-31) • Google Terms of UseDocumentation and Data Policy



누적 로지스틱 회귀모형 (VGAM)

소득이 1단위 올라갈 수록 언어 영역 등급이 상위 영역에 속할 누적 로지스틱 회귀모형을 적합하고자 한다. VGAM 패키지의 vglm 함수를 사용하기 위하여 분할표 형식으로 재작성 하였다. 분할표 작성에는 reshape2 패키지의 dcast 함수를 사용하였다. 분할표 작성에 앞서 월 소득 보다 교육비 지출이 많은 것으로 응답한 자료는 신뢰성이 떨어진다고 보고 삭제 하였다.

edu.cut$lie<-ifelse(edu.cut$educost>edu.cut$income,1,0)     #ifelse함수를 통해 소득보다 교육비 지출이 큰 학생을 1로 표시한다.
edu.truth<-subset(edu.cut, lie==0)                  
library(reshape2)
langdftruth<-dcast(incomegr~langgr,data=edu.truth)[c(1:4),]
colnames(langdftruth)<-c('incomegr',paste0('Gr',9:1))
langdftruth
  incomegr Gr9 Gr8 Gr7 Gr6 Gr5 Gr4 Gr3 Gr2 Gr1
1        1  53  62 144 151 201 153 100  57  26
2        2  13  46  81 128 181 128  94  53  24
3        3  15  30  87 140 224 164 125  75  49
4        4   5  14  43  48  95  90  72  32  42
library(VGAM)                           
model1<-vglm(cbind(Gr1,Gr2,Gr3,Gr4,Gr5,Gr6,Gr7,Gr8,Gr9)~incomegr,family = cumulative(parallel = TRUE),data=langdftruth)
summary(model1)

Call:
vglm(formula = cbind(Gr1, Gr2, Gr3, Gr4, Gr5, Gr6, Gr7, Gr8, 
    Gr9) ~ incomegr, family = cumulative(parallel = TRUE), data = langdftruth)

Pearson residuals:
  logit(P[Y<=1]) logit(P[Y<=2]) logit(P[Y<=3]) logit(P[Y<=4])
1       -1.06387        0.75583         0.6470        1.59238
2       -1.41970        0.06556         0.2636       -0.25094
3       -0.02181        0.17216        -0.3873       -1.30520
4        2.49904       -1.14302        -0.5563        0.02872
  logit(P[Y<=5]) logit(P[Y<=6]) logit(P[Y<=7]) logit(P[Y<=8])
1        0.15487         -1.286        -0.5865        -2.7262
2       -0.07493          1.258        -0.8288         2.1137
3       -0.18296          1.210         1.3323         0.8767
4        0.22029         -1.353         0.5019         0.9393

Coefficients:
               Estimate Std. Error z value Pr(>|z|)    
(Intercept):1 -3.691252   0.114496 -32.239   <2e-16 ***
(Intercept):2 -2.675798   0.093339 -28.667   <2e-16 ***
(Intercept):3 -1.772170   0.084134 -21.064   <2e-16 ***
(Intercept):4 -0.956249   0.079575 -12.017   <2e-16 ***
(Intercept):5  0.003624   0.077604   0.047    0.963    
(Intercept):6  0.808492   0.080084  10.096   <2e-16 ***
(Intercept):7  1.867721   0.093188  20.043   <2e-16 ***
(Intercept):8  2.944691   0.126516  23.275   <2e-16 ***
incomegr       0.276772   0.030508   9.072   <2e-16 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Number of linear predictors:  8 

Dispersion Parameter for cumulative family:   1

Residual deviance: 39.861 on 23 degrees of freedom

Log-likelihood: -110.8192 on 23 degrees of freedom

Number of iterations: 4 

Exponentiated coefficients:
incomegr 
1.318865 

등급이 9개 이므로, 9등급을 기준으로 하여 총 8개의 intercept와 소득 등급에 대한 1개의 coefficient가 추정되었다.

\[logit[p(Y \leq j등급)]= \alpha_{j}+ 0.27\times 소득등급\]

임의의 j 점수 등급에 대하여 소득이 1등급 상승하면, 점수 등급이 j 등급 보다 하위에 속할 오즈보다 상위에 속할 오즈가 exp(0.27)=1.3배 증가한다.

\[logit[p(Y \leq 1등급)]= -3.69+ 0.27\times 소득등급 \]

\[P(Y \leq 1등급)= \dfrac{exp(-3.69+0.27 \times 소득등급)}{1+exp(-369+0.27 \times 소득등급)}\]

소득 최하위 등급일 때 언어 영역 1등급 받을 확률= 2.9%

소득 최상위 등급일 때 언어 영역 1등급 받을 확률= 6.3%

누적 로지스틱 모형은 각 j 마다 intercept는 다르나, coefficient는 하나로 공유한다. 즉 비례 오즈 모형(proportional odss model)인데, 과연 비례 오즈의 가정(assumption)이 맞는지 확인해 볼 필요가 있다. 이를 위해서 각 j 마다 서로다른 coefficient를 가지는 모형을 적합한 다음, 가능도비 검정을 통해서 모형 적합도 여부를 확인하였다.

model1.1<-vglm(cbind(Gr1,Gr2,Gr3,Gr4,Gr5,Gr6,Gr7,Gr8,Gr9)~incomegr, family = cumulative,data=langdftruth)

pchisq(2*(logLik(model1.1)-logLik(model1)),df=length(coef(model1.1))-length(coef(model1)),lower.tail = FALSE)
[1] 0.002081759
alt text

alt text

P-value는 0.05보다 작으므로, 비례오즈 가정이 만족하지 못한다는 것을 확인하였다. 즉 현재 데이터를 누적 로지스틱 모형을 통해 설명하는 것은 부적절하여, 다범주 회귀모형(multinomial regression)을 통해 데이터 분석을 시도하였다.

다범주 로지스틱 회귀모형(nnet)

library(nnet)
model2<-multinom(langgr~incomegr,data=edu.truth)
# weights:  27 (16 variable)
initial  value 6690.548838 
iter  10 value 6175.031827
iter  20 value 6118.234568
final  value 6118.187637 
converged
summary(model2)
Call:
multinom(formula = langgr ~ incomegr, data = edu.truth)

Coefficients:
     (Intercept)  incomegr
Gr 8 -0.04705314 0.3392090
Gr 7  0.58548755 0.4456064
Gr 6  0.65775094 0.5403501
Gr 5  0.81335068 0.6520786
Gr 4  0.43105284 0.7001631
Gr 3 -0.04486371 0.7679590
Gr 2 -0.51593722 0.7190208
Gr 1 -1.84652899 1.0689233

Std. Errors:
     (Intercept)  incomegr
Gr 8   0.2943594 0.1476915
Gr 7   0.2621875 0.1337102
Gr 6   0.2566944 0.1310782
Gr 5   0.2504067 0.1285139
Gr 4   0.2563584 0.1300916
Gr 3   0.2660455 0.1325308
Gr 2   0.2874136 0.1392745
Gr 1   0.3381613 0.1490537

Residual Deviance: 12236.38 
AIC: 12268.38 

nnet 패키지의 multinom 함수를 이용하여 다범주 로지스틱 회귀모형을 적합하였다.결과를 보면 9등급을 기준으로 두었어다는 것을 알 수 있다. 1등급에 대한 회귀식을 정리하면 다음과 같다.

\[log(\dfrac{\pi_Gr1}{\pi_Gr9})= -1.84 + 1.06 \times 소득등급 \]

즉 소득이 1등급 증가하면 언어 영역 등급이 9등급이 아니라 1등급일 오즈의 추정값은 exp(1.06)=2.88배 이다.

수리 영역 및 외국어 영역에서도 다범주 로지스틱 회귀분석을 적용하여, 요약표로 정리해 보았다.

subj<-c('lang','lang','matha','matha','mathb','mathb','fore','fore')
hr<-c(1.92,3.14,2.07,9,1.59,2.41,1.82,3.15)
testtable<-data.frame(subj,hr)
testtable$subj<-factor(testtable$subj,levels=c('fore', 'mathb','matha','lang'), labels=c('외국어','수학 나','수학 가','언어'))
pl<-ggplot(testtable, aes(x=hr, y=subj))+geom_line(size=1, aes(colour=subj))+geom_point()+ggtitle("과목별 1등급에 속할 오즈 비")+ theme(plot.title=element_text(face="bold", size=20, vjust=0, color="darkblue"))
pl



결론

이 연구에서 저자는 소득과 수능 등급간의 상관관계에 대해 알아보았다. 누적 로지스틱 모형을 적합하려 하였으나, 적합도 부족으로 다범주 로지스틱 모형으로 전환하여 살펴 보았다. 그 결과 소득 구간이 높으면, 수능 최하등급 보다 1등급을 받을 오즈가 더 높은 경향이 있는 것으로 나타났다. 이것은 언어,수리 가,수리 나, 외국어 영역에서 일관되게 나타났으며, 오즈비가 1을 포함하지 않는 것이 확인되었다. 하지만 순서 정보를 가지고 있는 반응변수를 다범주 로짓 모형으로 적합하여 정보 손실이 발생하였다는 점은 아쉬운점으로 생각한다.

저자는 이 연구의 한계점을 다음과 같이 생각한다. 첫째, 가장 중요한 설명변수인 가계 소득 및 교육비에 대한 신뢰 문제이다. 가계 소득은 오롯이 학부모 설문조사로 수집되었다. 대부분 정직하게 응답하였을 것이라 생각하지만, 응답의 신뢰성을 의심할 수 밖에 없는 자료들도 분명 있었다. (가령 소득을 9999만원으로 기입) 이런 자료들이 이상치를 만들어 내고 모형에 큰 영향을 미치리라 생각하는데, 응답의 신뢰도 여부 판단은 지극히 주관적일 수 밖에 없기 때문에 저자는 모든 응답이 사실이라 생각하고 데이터에 포함하였다. 둘째, 결측치(missing value)가 많았다는 점이다. 한국교육평가원으로 부터 받은 자료에는 약 7000명의 데이터가 있었는데, 결측치를 모두 제거하고 나니 절반 수준인 3000명으로 감소하였다. 표본 수를 생각하면 3000명이라는 숫자는 충분하지만, 절반이 넘는 데이터를 폐기함으로써 모델 적합에 많은 영향을 미쳤음에 틀림 없다. 결측치를 보완하는 방법으로 listwise deletion, pairwise deletion, 다중대입법(Multiple imputation)등이 있으나, 본인이 결측치를 다루는데 있어 아직 경험히 부족하여 모두 제거하고 데이터 분석을 하였다. 향후 분석에서는 보완해야 할 점으로 생각한다. 마지막으로는 지역적인 변수를 고려하지 못했다는 점이다. 소득이 같다고 하더라도, 거주하는 지역(대도시, 농어촌)에 따라 성적에 미치는 영향이 동일하다는 보장은 없을 것이다. 지역별로 층화하여, 동질 연관성을 만족하는지 여부도 확인하였으면 더욱 풍성한 데이터가 나왔을 것이라는 아쉬움이 든다.

한국교육종단연구는 7000명에 가까운 학생들을 거의 20년 가까이 추적관찰하는 대규모 연구이다. 저자가 분석한 2010년 6차년도 데이터를 가지고 무수히 많은 사회과학 연구들이 이미 발표 되었다. 본 연구는 대상자들이 만 30세가 될 때 까지 계속되므로, 취업, 혹은 결혼에 대한 조사까지 광범위하게 이루어지리라 생각한다. 이 데이터로 앞으로 더욱 많은 연구들이 쏟아져 나올 것이다. 취업, 결혼 여부를 종속 변수로 둔 로지스틱 회귀모형이나, 대학졸업 부터 취업까지 걸린 시간으로 생존분석을 해 보는 것도 흥미로운 연구주제가 될 것으로 본다. 이러한 연구들이 젊은이들의 취업,결혼에 대한 고충을 해결해 줄 수 있는 작은 실마리가 되길 기대해 본다.