Data

#
dta <- read.csv("data0419.csv", header = T)
options(digits = 3)
pacman::p_load(tidyverse, ggplot2, knitr, furniture, reshape2)
dta <- dta %>% mutate( Gender = relevel(Gender, ref = "女"),
                       Sector = relevel(Sector, ref = "私立"),
                       Field1 = relevel(Field1, ref = "遊憩與運動學群"),
                       EduLv = factor(EduLv, levels=c("博士","碩士","普通大學","科技大學",
                                                      "技術學院","五專","三專",
                                                      "二專","高中","高職","國中")),
                       EduLv = relevel(EduLv, ref = "技術學院"),
                       Region = factor(Region, levels =c("宜花東離島","北北基","桃竹苗",
                                                         "中彰投","雲嘉南","高屏澎")),
                       Age = as.numeric(Age), 
                       J_year = as.numeric(J_year), 
                       JobZone = as.numeric(JobZone),
                       EduZone = as.numeric(EduZone),
                       JobZone_D = as.numeric(EduZone-JobZone),
                       Salary = as.numeric(Salary),
                       SubEduOver = relevel(SubEduOver, ref="符合工作要求"),
                       Core = recode_factor(as.factor(JobCor), "1" = "無關聯",
                                            "2" = "部分關聯",
                                            "3" = "核心關聯"),
                       SubEduOver = factor(SubEduOver,levels =c("符合工作要求","高於工作要求","低於工作要求")))%>%  
  filter(Age <= 65 & Age >= 20)

# data construction
glimpse(dta)
## Observations: 1,567
## Variables: 25
## $ SID         <fctr> A10, A100, A103, A104, A105, A106, A107, A108, A1...
## $ Gender      <fctr> 女, 女, 男, 女, 女, 女, 女, 女, 女, 男, 男, 男, 女, 男, 男, 女, 女...
## $ Sector      <fctr> 國立(公立), 私立, 國立(公立), 國立(公立), 國立(公立), 私立, 私立, 國立(公立...
## $ EduLv       <fctr> 碩士, 普通大學, 高職, 普通大學, 普通大學, 普通大學, 普通大學, 普通大學, 碩士, 碩...
## $ SubEduOver  <fctr> 高於工作要求, 符合工作要求, 符合工作要求, 符合工作要求, 符合工作要求, 符合工作要求, 符...
## $ Require     <fctr> 高中/高職, 普通大學, 高中/高職, 普通大學, 普通大學, 普通大學, 普通大學, 普通大學,...
## $ Field1      <fctr> 資訊學群, 外語學群, 工程學群, 文史哲學群, 文史哲學群, 大眾傳播學群, 大眾傳播學群, 藝...
## $ City        <fctr> 高雄市, 苗栗縣, 高雄市, 南投縣, 嘉義市, 臺北市, 臺北市, 南投縣, 高雄市, 臺中市,...
## $ Category    <fctr> 受雇於公營機關, 受雇於公營機關, 受雇者於私營企業, 受雇於公營機關, 受雇者於私營企業, 受雇...
## $ Staff       <fctr> 50-99人, 50-99人, 2-9人, 100-199人, 10-29人, 30-49人, 3...
## $ Hours       <int> 40, 70, 57, 51, 64, 50, 50, 47, 50, 60, 45, 40, 56...
## $ J_year      <dbl> 8, 4, 21, 1, 6, 0, 1, 1, 17, 7, 3, 23, 1, 2, 1, 1,...
## $ J_total     <dbl> 8, 4, 30, 1, 6, 0, 2, 2, 28, 7, 30, 26, 1, 10, 1, ...
## $ income      <fctr> 2-3萬以下, 3-4萬以下, 3-4萬以下, 4-5萬以下, 2萬以下, 3-4萬以下, 3-4...
## $ SubMismatch <int> 2, 3, 5, 4, 5, 4, 3, 3, 4, 4, 4, 4, 5, 5, 3, 2, 4,...
## $ JobSat      <int> 4, 3, 5, 6, 7, 5, 3, 6, 3, 5, 4, 7, 3, 4, 4, 4, 5,...
## $ EduZone     <dbl> 5, 4, 2, 4, 4, 4, 4, 4, 5, 5, 3, 5, 4, 4, 4, 4, 5,...
## $ Region      <fctr> 高屏澎, 桃竹苗, 高屏澎, 中彰投, 雲嘉南, 北北基, 北北基, 中彰投, 高屏澎, 中彰投,...
## $ Salary      <dbl> 25000, 35000, 35000, 45000, 20000, 35000, 35000, 4...
## $ Age         <dbl> 34, 30, 62, 25, 21, 24, 25, 26, 57, 35, 54, 54, 23...
## $ JobZone     <dbl> 3, 4, 3, 4, 4, 4, 4, 4, 4, 4, 4, 5, 4, 4, 3, 2, 4,...
## $ JobCor      <int> 1, 2, 1, 2, 1, 3, 1, 1, 1, 3, 1, 1, 3, 1, 3, 1, 2,...
## $ Core        <fctr> 無關聯, 部分關聯, 無關聯, 部分關聯, 無關聯, 核心關聯, 無關聯, 無關聯, 無關聯, 核...
## $ ObjOver     <fctr> over, adequate, under, adequate, adequate, adequa...
## $ JobZone_D   <dbl> 2, 0, -1, 0, 0, 0, 0, 0, 1, 1, -1, 0, 0, 0, 1, 2, ...
# check and pick out
lapply(dta[,c("Sector", "Field1", "City", "Region","EduLv", "SubEduOver", "ObjOver")], levels)
## $Sector
## [1] "私立"         "國外學校"     "國立(公立)"
## 
## $Field1
##  [1] "遊憩與運動學群" "大眾傳播學群"   "工程學群"       "文史哲學群"    
##  [5] "外語學群"       "生命科學學群"   "生物資源學群"   "地球與環境學群"
##  [9] "法政學群"       "社會與心理學群" "建築與設計學群" "財經學群"      
## [13] "教育學群"       "資訊學群"       "管理學群"       "數理化學群"    
## [17] "醫藥衛生學群"   "藝術學群"      
## 
## $City
##  [1] "宜蘭縣" "花蓮縣" "金門縣" "南投縣" "屏東縣" "苗栗縣" "桃園市"
##  [8] "高雄市" "基隆市" "雲林縣" "新北市" "新竹市" "新竹縣" "嘉義市"
## [15] "嘉義縣" "彰化縣" "臺中市" "臺北市" "臺東縣" "臺南市" "澎湖縣"
## 
## $Region
## [1] "宜花東離島" "北北基"     "桃竹苗"     "中彰投"     "雲嘉南"    
## [6] "高屏澎"    
## 
## $EduLv
##  [1] "技術學院" "博士"     "碩士"     "普通大學" "科技大學" "五專"    
##  [7] "三專"     "二專"     "高中"     "高職"     "國中"    
## 
## $SubEduOver
## [1] "符合工作要求" "高於工作要求" "低於工作要求"
## 
## $ObjOver
## [1] "adequate" "over"     "under"
# hunt for missing values by variables
apply(apply(dta, 1, is.na), 1, sum)
##         SID      Gender      Sector       EduLv  SubEduOver     Require 
##           0           0           0           0           0           0 
##      Field1        City    Category       Staff       Hours      J_year 
##           0           0           0           0           0           0 
##     J_total      income SubMismatch      JobSat     EduZone      Region 
##           0           0           0           0           0           0 
##      Salary         Age     JobZone      JobCor        Core     ObjOver 
##           0           0           0           0           0           0 
##   JobZone_D 
##           0
# pick out
names(dta)
##  [1] "SID"         "Gender"      "Sector"      "EduLv"       "SubEduOver" 
##  [6] "Require"     "Field1"      "City"        "Category"    "Staff"      
## [11] "Hours"       "J_year"      "J_total"     "income"      "SubMismatch"
## [16] "JobSat"      "EduZone"     "Region"      "Salary"      "Age"        
## [21] "JobZone"     "JobCor"      "Core"        "ObjOver"     "JobZone_D"
p <- dplyr::select(dta, -City, -income, -JobSat)

自評過量

學歷、營利類型人數百分比

knitr::kable(furniture::table1(p,
                               EduLv, Category,
                               splitby = ~ SubEduOver, row_wise=TRUE, output = 'text2'))
符合工作要求 高於工作要求 低於工作要求
n = 1078 n = 316 n = 173
EduLv
技術學院 27 (67.5%) 6 (15%) 7 (17.5%)
博士 9 (90%) 1 (10%) 0 (0%)
碩士 297 (65%) 131 (28.7%) 29 (6.3%)
普通大學 496 (72%) 128 (18.6%) 65 (9.4%)
科技大學 176 (66.4%) 40 (15.1%) 49 (18.5%)
五專 20 (66.7%) 6 (20%) 4 (13.3%)
三專 0 (0%) 0 (0%) 1 (100%)
二專 24 (68.6%) 3 (8.6%) 8 (22.9%)
高中 0 (0%) 0 (0%) 2 (100%)
高職 29 (76.3%) 1 (2.6%) 8 (21.1%)
國中 0 (NaN%) 0 (NaN%) 0 (NaN%)
Category
自營者 32 (65.3%) 8 (16.3%) 9 (18.4%)
受雇於公營機關 427 (73.1%) 116 (19.9%) 41 (7%)
受雇者於私營企業 619 (66.3%) 192 (20.6%) 123 (13.2%)

學歷平均薪資

#  another way
 # r1<- aggregate(Salary~EduLv+Category+ObjOver,p,mean)

r1<- p %>%
  group_by(SubEduOver,EduLv) %>%
  summarise(平均薪資 = mean(Salary))

knitr::kable(dcast(r1, EduLv ~ SubEduOver, value.var = "平均薪資"))
EduLv 符合工作要求 高於工作要求 低於工作要求
技術學院 43148 33333 42857
博士 100000 85000 NA
碩士 64259 48664 51207
普通大學 42974 36172 37615
科技大學 41080 32000 33878
五專 55500 39167 40000
三專 NA NA 35000
二專 61667 28333 50000
高中 NA NA 45000
高職 33103 25000 57500

受雇型態平均薪資

r2<- aggregate(Salary ~ Category+ SubEduOver,p,mean)

knitr::kable(dcast(r2, Category ~ SubEduOver, value.var = "Salary"))
Category 符合工作要求 高於工作要求 低於工作要求
自營者 70625 41250 58889
受雇於公營機關 49204 43836 44146
受雇者於私營企業 48425 39063 38171

客觀過量

學歷、營利類型人數百分比

knitr::kable(furniture::table1(p,
                               EduLv, Category,
                               splitby = ~ ObjOver, row_wise=TRUE, output = 'text2'))
adequate over under
n = 488 n = 971 n = 108
EduLv
技術學院 10 (25%) 28 (70%) 2 (5%)
博士 4 (40%) 6 (60%) 0 (0%)
碩士 33 (7.2%) 424 (92.8%) 0 (0%)
普通大學 319 (46.3%) 330 (47.9%) 40 (5.8%)
科技大學 84 (31.7%) 160 (60.4%) 21 (7.9%)
五專 9 (30%) 9 (30%) 12 (40%)
三專 1 (100%) 0 (0%) 0 (0%)
二專 11 (31.4%) 10 (28.6%) 14 (40%)
高中 0 (0%) 0 (0%) 2 (100%)
高職 17 (44.7%) 4 (10.5%) 17 (44.7%)
國中 0 (NaN%) 0 (NaN%) 0 (NaN%)
Category
自營者 19 (38.8%) 22 (44.9%) 8 (16.3%)
受雇於公營機關 174 (29.8%) 380 (65.1%) 30 (5.1%)
受雇者於私營企業 295 (31.6%) 569 (60.9%) 70 (7.5%)

學歷平均薪資

高職、二專、普大、技術學院過量情形平均薪資不合期待

#  another way
 # r1<- aggregate(Salary~EduLv+Category+ObjOver,p,mean)

r1<- p %>%
  group_by(ObjOver,EduLv) %>%
  summarise(平均薪資 = mean(Salary))

knitr::kable(dcast(r1, EduLv ~ ObjOver, value.var = "平均薪資"))
EduLv adequate over under
技術學院 50000 37679 55000
博士 126250 80000 NA
碩士 71515 57983 NA
普通大學 42476 38500 53375
科技大學 41310 36906 37857
五專 60556 39444 50417
三專 35000 NA NA
二專 52727 31000 76786
高中 NA NA 45000
高職 31765 22500 47941

學歷平均年齡

二專、三專平均年齡偏高

r11<- p %>%
  group_by(ObjOver,EduLv) %>%
  summarise(平均年齡 = mean(Age))

knitr::kable(dcast(r11, EduLv ~ ObjOver, value.var = "平均年齡"))
EduLv adequate over under
技術學院 34.6 31.0 41.5
博士 46.2 40.0 NA
碩士 35.8 32.1 NA
普通大學 28.8 29.4 29.1
科技大學 30.0 29.2 30.2
五專 40.8 38.0 39.8
三專 53.0 NA NA
二專 40.8 41.4 46.4
高中 NA NA 27.5
高職 36.2 28.5 39.1

受雇型態平均薪資

限縮教育的自營者薪資太高了!

r2<- aggregate(Salary ~ Category+ ObjOver,p ,mean)

knitr::kable(dcast(r2, Category ~ ObjOver, value.var = "Salary"))
Category adequate over under
自營者 59474 58864 86875
受雇於公營機關 47644 48000 45833
受雇者於私營企業 42932 45606 50786

Chi-Square test

自評客評過量

客評過量傾向與自評過量傾向是否有關

r3 <- table(p$ObjOver,p$SubEduOver )
knitr::kable(r3)
符合工作要求 高於工作要求 低於工作要求
adequate 380 66 42
over 615 240 116
under 83 10 15
chisq.test(r3)
## 
##  Pearson's Chi-squared test
## 
## data:  r3
## X-squared = 40, df = 4, p-value = 2e-08

自評客評關聯

將自評關聯由5點量表切割為N(1和2). P(3). A(4和5)
檢測客評關聯與自評關聯是否有關

p <- p %>% 
  mutate( 自評關聯 = cut(SubMismatch, breaks = c(0.5,2.5,3.5,5.5), label = c("N", "P", "A"), ordered = T))
r4<-table(p$Core, p$自評關聯 )
knitr::kable(r4)
N P A
無關聯 399 264 307
部分關聯 34 52 119
核心關聯 49 87 256
chisq.test(r4)
## 
##  Pearson's Chi-squared test
## 
## data:  r4
## X-squared = 200, df = 4, p-value <2e-16