前々回記事 で、毎月勤労統計調査の母集団労働者数推計がセンサスの数値から乖離している問題をとりあげた。
- 5-29人規模と500-999人規模事業所では、推計母集団労働者数が増加することにより、センサスからの乖離が生じている
- 30-99人規模事業所では、推計母集団労働者数が減少することにより、センサスからの乖離が生じている
さらに、 前回記事 では、母集団労働者推計をふたつの段階にわけて、どこでセンサスとの乖離が生じているかを検討した。調査対象事業所の労働者数の月間の変動データによる推計が第1段階であり (「毎勤推計」と呼ぶ)、事業所新設・廃止等による変動 (雇用保険事業所データによる) と事業所規模の変化などで別の層に事業所が移動したことによる変動 (毎月勤労統計調査による) の推計をおこなうのが第2段階である (「雇用保険等補正」と呼ぶ)。
- 5-29人規模事業所の推計母集団労働者数の増加には雇用保険等補正による寄与が大きいが、2012年以降は毎勤推計の寄与も増加してきている
- 30-99人規模事業所での減少と500-999人規模事業所での増加は、雇用保険等補正による
後者の、雇用保険等補正による増加については、雇用保険事業所データに由来する部分と、毎月勤労統計調査に由来する部分がある。今回の記事では、さらにこれらを分離することを考える。
目次
- 「従来の公表値」との比較
- 旧集計データと新集計データ
- 「従来の公表値」「本系列」「時系列比較のための推計値」
- データの入手と基本加工
- 推計母集団労働者数の新旧比較
- 「毎勤推計」と「雇用保険等補正」の効果の分離
- 各月の変動
- 議論
- 使用したプログラムとデータ
- 注
「従来の公表値」との比較
前々回 および 前回 の記事で使ったのは、東京都での不正抽出が発覚して以降に再集計をおこなったデータである。この再集計は毎月勤労統計調査で発覚した問題に対応するためのにおこなったものであって、雇用保険事業所データのほうに問題があったわけではない。したがって、再集計の際にも、(データのとりあつかいにミスがあった場合*1 を別とすれば) 従来とおなじデータを使っていたはずだ。
一方で、その以前に公表されていた「従来の公表値」のデータも、「政府統計の総合窓口」(e-Stat) からダウンロードできる。こちらの毎月勤労統計調査のデータは、再集計後の値とはちがうものを使っているわけである。従来の公表値と再集計後のデータを比較して、雇用保険等補正による労働者数の変動にちがいが出てくれば、そのちがいは雇用保険事業所データによるものではなく、毎月勤労統計調査の層間移動事業所のデータのほうに変化があったものと考えることができる。
旧集計データと新集計データ
「従来の公表値」「本系列」「時系列比較のための推計値」
現在公表されている毎月勤労統計調査の「従来の公表値」データは、2007年10月以降のものである。
- 2017年12月までは、第一種事業所 (30人以上の事業所) の層内での抽出率のちがいを考慮せず集計
- 2018年1月から、第一種事業所の抽出率のちがいを考慮した集計方法に変更 (このときに東京都不正抽出による抽出率のちがいの処理も秘密裡に導入)
このように、集計方法が時期によってちがうのだが、これらが一括して「従来の公表値」と呼ばれている。
一方、現在の毎月勤労統計調査の「本系列」のデータは、2012年以降について、抽出率のちがいを考慮した集計方法を適用したものである。これはつまり、「従来の公表値」では2018年1月から採用している集計方法を、6年前の2012年1月から適用したもの、ということになる。だから2018年以降については、「従来の公表値」とおなじ方式で集計しているのだが、2014-2017年の変化がちがうため、2018年1月にベンチマーク更新 (2014年7月の経済センサス-基礎調査による) をおこなったあとの水準がちがい、そのために差が生じている。
2011年以前は、集計をやり直すのに必要なデータが廃棄されてしまっていたため、「本系列」とおなじ方式での集計が不可能であった。強引な仮定を置いて必要なデータを逆算するなどして、2004年1月までさかのぼって推計値を算出したのが「時系列比較のための推計値」である。
今回の記事では、「従来の公表値」のことを「旧集計」と呼ぶ。また、「本系列」「時系列比較のための推計値」をあわせて「新集計」と呼ぶことにしよう。
データの入手と基本加工
「新集計」のデータは、前々回記事 https://remcat.hatenadiary.jp/entry/20210911/gap#data で使用したものとおなじである。(http://tsigeto.info/maikin/maikin-monthly.dat.txt)
「旧集計」のデータは、 e-Stat 「毎月勤労統計調査 全国調査」 https://www.e-stat.go.jp/stat-search/files?tstat=000001011791 の「その他」→「【参考】従来の公表値 」から、つぎの2か所のExcelファイル群 (juu-mks******.xls のようなファイル名になっている) をダウンロードする:
- 「実数原表」→「月次」
- 「実数原表(旧産業分類(平成14年3月改定)(2010年1月まで))」→「月次」
テキスト形式に変換して、 前々回記事 とおなじ Perl スクリプト http://tsigeto.info/maikin/maikin-monthly.pl.txt を適用すればよい (そのままだとファイル名制限に引っかかるので、ファイル名パターンを追記するか、オプション -all を指定する)。変換したテキストファイル (タブ区切り) を http://tsigeto.info/maikin/maikin-monthly-juu.dat.txt に置いておく (6MB)。
基本的なデータ加工方針は 前々回記事 と同様である。ただ、今回は新集計と旧集計のふたつのデータにおなじ加工を施すことになるので、共通の処理を関数にするなど、こまかい変更を加えた。当記事で使用したのRスクリプトの全体は https://remcat.hatenadiary.jp/entry/20210920/workerpop に置いておく。
datafile.new <- "maikin-monthly.dat" datafile.old <- "maikin-monthly-juu.dat" datafile.kyu201801 <- "maikin201801kyu.dat" census.date <- c( 200610, 200907, 201407, 201605.5, 201905.5 ) reset.date0 <- c( 200812.5, 201112.5, 201712.5 ) reset.date1 <- c( 200901 , 201201 , 201801 ) checkpoint <- c( census.date, reset.date0, reset.date1, 202105, 202105.5 ) read.data.long <- function( filename ) { d <- read.delim( filename, header=T ) # Sort by date and establishment size d <- d[ order(d$size) , ] d <- d[ order(d$yyyymm) , ] d$is <- factor( paste( d$industry, d$size, sep="." ) ) d$year <- round( d$yyyymm / 100 ) d$month<- floor( d$yyyymm %% 100 ) d$worker2 <- ( d$e0 + d$e1 ) /2 d1 <- d d2 <- d d1$worker <- d1$e0 d2$worker <- d2$e1 d2$yyyymm <- d2$yyyymm + 0.5 r <- rbind( d1, d2 ) r[ order(r$yyyymm) , ] } list.bysize <- function( data , reset=c() ){ r <- list( size5 = subset( data, 5 == size ), size30= subset( data, 30 == size ), size100=subset( data, 100 == size ), size500=subset( data, 500 == size ), size1000=subset(data,1000 == size ) ) lapply( r , function(d){ n <- nrow( d ) d$worker.prev <- c( NA, d [ -n, "worker" ] ) d$worker.next <- c( d [ -1, "worker" ] , NA ) d$worker.inc <- log( d$worker / d$worker.prev ) d$worker.diff<- d$worker - d$worker.prev d [ d$yyyymm %in% reset , "worker.inc" ] <- NA d [ d$yyyymm %in% reset , "worker.diff"] <- NA d } ) } # Renewed data x.long <- read.data.long( datafile.new ) x.bysize <- subset( x.long, industry=="TL" & 0<size ) data.new <- list.bysize( x.bysize, reset=reset.date1 ) # Old data y.long <- read.data.long( datafile.old ) y.bysize <- subset( y.long, industry=="TL" & 0<size ) data.old <- list.bysize ( y.bysize, reset=reset.date1 ) start.old.mon <- data.old[[1]] [ 1 , "yyyymm" ] end.old.mon <- data.old[[1]] [ nrow(data.old[[1]]) , "yyyymm" ] start.old.num <- which( data.new[[1]]$yyyymm==start.old.mon ) skip.old <- start.old.num -1 remain.old <- nrow( data.new[[1]] ) - nrow( data.old[[1]] ) - skip.old
新集計のデータのうち、「本系列」は従来の公表値 (=旧集計) の2012年1月を起点に再集計を施したものであり、「時系列比較のための推計値」は2012年1月から過去にさかのぼって推計をおこなったものである。したがって、2012年1月の新集計と旧集計の数値は一致するはずなのだが、実際には若干の食い違いがみられる。
# Workers at 2012-01 w201201 <- cbind( subset( x.bysize, yyyymm==201201 , select=c("yyyymm", "size", "worker") ) , subset( y.bysize, yyyymm==201201 , select="worker" ) ) w201201 <- cbind( w201201, w201201[,3] - w201201[,4] ) colnames(w201201) <- c( "month", "size", "worker.new", "worker.old", "difference" ) w201201
month size worker.new worker.old difference 127038 201201 5 18332606 18332859 -253 127037 201201 30 12341641 12341565 76 127036 201201 100 9663789 9663655 134 127035 201201 500 2213075 2212995 80 127034 201201 1000 3092198 3092198 0
この食い違いの原因はわからない。ただ、差は最大でも253人と小さいので、とりあえず放置して先に進もう。
推計母集団労働者数の新旧比較
新集計と旧集計それぞれの推計母集団労働者数の推移を確認する。
まず、基準となるセンサスの労働者数を求めておく (理屈は 前々回記事 を参照)。
# Gaps x.cp <- subset( x.bysize, yyyymm %in% checkpoint ) size.cp <- sapply( split( x.cp , x.cp$yyyymm ), function(d){ d[ , "size" ] } ) worker.cp<-sapply( split( x.cp , x.cp$yyyymm ), function(d){ d[ , "worker" ] } ) rownames(worker.cp) <- size.cp[,1] gap2009 <- worker.cp[,"200901"]/ worker.cp[,"200812.5"] worker.pop2006 <- worker.cp[,"200610"] * gap2009 gap2012 <- worker.cp[,"201201"]/ worker.cp[,"201112.5"] worker.pop2009 <- worker.cp[,"200907"] * gap2012 kyu2018 <- read.delim( datafile.kyu201801, header=T ) kyu2018 <- kyu2018[ order(kyu2018$size), ] kyu2018.tl0 <- subset( kyu2018, industry=="TL" & 0<size ) gap2018 <- worker.cp[,"201801"] / kyu2018.tl0$e0 worker.pop2014 <- worker.cp[,"201407"] * gap2018 # From https://www.mhlw.go.jp/content/10700000/000823050.pdf gap2019 <- c( 0.888, 1.092, 0.985, 0.813, 0.947 ) names( gap2019 ) <- c( "5", "30", "100", "500", "1000" ) worker.pop2019 <- worker.cp[,"201905.5"] * gap2019 census2016 <- rbind ( c( 0.878, 1.161, 0.960, 0.843, 0.971 ) , c( 0.880, 1.171, 0.960, 0.844, 0.973 ) , c( 0.877, 1.162, 0.959, 0.843, 0.977 ) , c( 0.877, 1.161, 0.960, 0.842, 0.970 ) , c( 0.877, 1.161, 0.960, 0.842, 0.970 ) ) gap2016 <- exp( apply( log(census2016), 2, mean ) ) names( gap2016 ) <- c( "5", "30", "100", "500", "1000" ) worker.pop2016 <- worker.cp[,"201605.5"] * gap2016 worker.pop <- rbind( worker.pop2006, worker.pop2009, worker.pop2014, worker.pop2016, worker.pop2019 ) rownames(worker.pop) <- census.date temp <- sapply ( data.new[["size5"]]$yyyymm , function(i) { if( i %in% rownames(worker.pop) ) { r <- worker.pop[ as.character(i), ] } else { r <- rep( NA, ncol(worker.pop) ) } r } ) worker.pop.yyyymm <- t(temp) colnames(worker.pop.yyyymm) <- colnames(worker.pop) rownames(worker.pop.yyyymm) <- data.new[["size5"]]$yyyymm
そのうえで、新集計、旧集計、センサスの労働者数のデータを統合する
# Trend of the number of workers by establishment size result <- lapply( data.new , function(d){ size <- d[1,"size"] r <- cbind( d$yyyymm, d$worker, worker.pop.yyyymm[ , as.character(size) ] ) colnames(r) <- c( "yyyymm", "worker.new", "census" ) rownames(r) <- rownames(d) data.frame(r) } ) worker.old <- sapply( data.old , function(d){ r <- d$worker names(r) <- d$yyyymm r } ) for( s in names(result) ) { result[[s]]$worker.old <- c( rep(NA, skip.old) , worker.old[, s] , rep(NA, remain.old) ) }
結果は下記のグラフ1のようになる。黒い線が新集計 (前々回記事 とおなじ)、緑が旧集計、×印がセンサスの労働者数である。矢印はベンチマーク更新をあらわす。
グラフ1: 新集計と旧集計の労働者数
グラフ1(e) 1000人以上規模事業所
5-29人規模事業所と1000人以上規模事業所では、新旧集計の間に差はみられない。5-29人規模では、新集計でも旧集計でも、センサスよりずっと速く労働者数が増加しており、大きな乖離が生じている。他方、1000人以上規模では、センサスとの乖離は大きくはなく、特に2012年にベンチマークを更新して以降は、両者ともほぼ一定で推移している。
それ以外の規模区分では、新旧集計の間に差がみられる。
30-99人規模事業所では、2012年以降、新集計の労働者数が減少してセンサスを大きく下回っている。これに対して、旧集計の労働者数は、横ばいか増加しており、センサスに近い値となっている。この事業所規模区分における労働者数のセンサスからの乖離は、 方式を変更して再集計をおこなったことによってかえって拡大した のである。
100-499人規模と500-999人規模の事業所では、2012年以降、新集計の労働者数は旧集計を上回って推移している。これらの事業所規模区分では、センサスの値は新旧集計の間にあることが多く、どちらのほうが乖離が小さいかは一概にはいえない。
なお、2011年以前に関しては、どの事業所規模区分でも新旧集計がほぼ一致している ことに注意されたい。
「毎勤推計」と「雇用保険等補正」の効果の分離
では、旧集計と新集計との食い違いは、どこから生まれたのだろうか。推計母集団労働者数の変化から、第1段階 (毎勤推計) と第2段階 (雇用保険等補正) 効果を分離してみよう。これには、前回記事 で説明したとおり、「前月末」→「本月末」と「本月末」→「前月末」の労働者数の変化率をそれぞれ抜き出してかけあわせていけばよい (これ以降の計算では、ベンチマーク更新をおこなわないので注意)。
# Select record and field select.f <- function( data, mod, field ){ d <- subset( data, yyyymm %% 1 == mod ) r <- d[ , field] names(r) <- floor( d$yyyymm ) r } # Distinguish two factors worker.cum <- function( v , start ) { v[ is.na(v) ] <- 0 v[ 1 ] <- 0 start * exp( cumsum(v) ) } cum5.new <- sapply( data.new , function(d) { size <- d[1, "size"] start <- d[1, "worker"] worker.cum( select.f( d, 0.5 , "worker.inc" ) , start ) } ) cum0.new <- sapply( data.new , function(d) { size <- d[1, "size"] start <- d[1, "worker"] worker.cum( select.f( d, 0 , "worker.inc" ) , start ) } )
これで、新集計の推計母集団労働者数の動きから、第1段階と第2段階それぞれの効果を分離して累積した数値が出せる。
旧集計についても同様にしたいのだが、新集計と比較するため、旧集計の最古のデータである2007年10月時点の数値をそろえて出発することにしよう。
# Workers at 2007-10 w200710 <- rbind( cum0.new[ "200710", ], cum5.new[ "200710", ] ) rownames(w200710)<- c( "e1.e0", "e0.e1" ) colnames(w200710)<- c( 5, 30, 100, 500, 1000) cum5.old <- sapply( data.old , function(d) { size <- d[1, "size"] start <- w200710[ "e0.e1", as.character(size) ] worker.cum( select.f( d, 0.5 , "worker.inc" ) , start ) } ) cum0.old <- sapply( data.old , function(d) { size <- d[1, "size"] start <- w200710[ "e1.e0", as.character(size) ] worker.cum( select.f( d, 0 , "worker.inc" ) , start ) } )
センサスの数値も加えて、グラフ描画用にまとめたリストをつくる。
# Census temp <- sapply ( as.numeric( rownames(cum0.new) ) , function(i) { j <- as.character(i) k <- as.character(i-0.5) w <- rownames(worker.pop) if ( j %in% w ) { r <- worker.pop[ j, ] } else if( k %in% w ) { r <- worker.pop[ k, ] } else { r <- rep( NA, ncol(worker.pop) ) } r } ) worker.pop.yyyymm2 <- t(temp) colnames(worker.pop.yyyymm2) <- colnames(worker.pop) rownames(worker.pop.yyyymm2) <- rownames(cum0.new) worker.predicted <- list() for( i in 1:ncol(cum0.new) ) { s <- colnames(cum0.new)[i] worker.predicted[[s]] <- data.frame( yyyymm=rownames(cum0.new) ) worker.predicted[[s]]$e1.e0.new <- cum0.new[ , i] worker.predicted[[s]]$e0.e1.new <- cum5.new[ , i] worker.predicted[[s]]$census <- worker.pop.yyyymm2[ , i ] worker.predicted[[s]]$e1.e0.old <- c( rep(NA,skip.old/2), cum0.old[,i] , rep(NA,remain.old/2) ) worker.predicted[[s]]$e0.e1.old <- c( rep(NA,skip.old/2), cum5.old[,i] , rep(NA,remain.old/2) ) }
結果を下記のグラフ2に示す。新集計については黒い点線 (第1段階) と実線 (第2段階)、旧集計については赤丸 (第2段階) と緑丸 (第1段階) であらわしている。×印はセンサスの労働者数である。
グラフ2: 「毎勤推計」と「雇用保険等補正」の効果の分離:新旧比較
各月の変動
効果を累積したときにみられるこのような変動は、いつ生じているのか。くわしく検討するため、月ごとの増加率によってグラフを描いてみる。
inc.e0.e1.new <- sapply( data.new , select.f , 0.5 , "worker.inc") inc.e0.e1.old <- sapply( data.old , select.f , 0.5 , "worker.inc" ) inc.e0.e1 <- list() for( i in 1:ncol(inc.e0.e1.new) ) { s <- colnames(inc.e0.e1.new)[i] inc.e0.e1[[s]] <- data.frame( yyyymm=rownames(inc.e0.e1.new) ) inc.e0.e1[[s]]$new <- inc.e0.e1.new[ , i ] inc.e0.e1[[s]]$old <- c( rep(NA,skip.old/2), inc.e0.e1.old[,i] , rep(NA,remain.old/2) ) }
まず、第1段階 (毎勤推計) による毎月の増加率が新集計と旧集計でどうちがうかをみてみよう。グラフ3は各月の「前月末」→「本月末」の労働者数増加率の自然対数をとってプロットしたものである。黒線が新集計、赤い×印が旧集計のデータ。
グラフ3: 「毎勤推計」による各月の増加率の新旧比較
グラフ3(e) 1000人以上規模事業所
どの事業所規模区分でも、新旧集計の間にちがいはほとんどない。また、毎年4月の労働者数の増加率が高く、グラフにはっきりした周期性がみられることがわかる。
第2段階 (雇用保険等補正) についても同様にグラフを描いてみよう。
inc.e1.e0.new <- sapply( data.new , select.f , 0 , "worker.inc") inc.e1.e0.old <- sapply( data.old , select.f , 0 , "worker.inc" ) inc.e1.e0 <- list() for( i in 1:ncol(inc.e1.e0.new) ) { s <- colnames(inc.e1.e0.new)[i] inc.e1.e0[[s]] <- data.frame( yyyymm=rownames(inc.e1.e0.new) ) inc.e1.e0[[s]]$new <- inc.e1.e0.new[ , i ] inc.e1.e0[[s]]$old <- c( rep(NA,skip.old/2), inc.e1.e0.old[,i] , rep(NA,remain.old/2) ) }
グラフ4は、前月の「本月末」から当月の「前月末」への労働者数の増加率の自然対数をとってプロットしたものである。黒線が新集計、緑の×印が旧集計のデータ。なお、ベンチマークを更新した3か所 (2009年1月、2012年1月、2018年1月) については欠損値とした。
グラフ4: 「雇用保険等補正」による増加率の新旧比較
グラフ4(e) 1000人以上規模事業所
5-29人規模事業所と1000人以上規模事業所では新旧のちがいはほとんどないが、それ以外の規模区分では、2012年から2017年の間に、大きな新旧差がある。 30-99人規模 (グラフ4(b)) では、旧集計 (緑×) がほぼゼロ前後で一定であるのにくらべて、新集計の黒線はところどころ下方に飛び出しており、労働者数を引き下げていることがわかる。100-499人規模 (グラフ4(c)) では、新集計の黒線は上方に飛び出しているところと、下方に飛び出しているところがある。500-999人規模 (グラフ4(d)) では、上方に飛び出た大きなスパイクがいくつもあり、これらが労働者数を増加させている。
新集計と旧集計との間にこのようなちがいが出るのは、2012年1月から2017年12月までの6年間だけである。新集計データの値は、2011年12月までは「時系列比較のための推計値」によるものであるが、この区間では旧集計の労働者とほとんど一致する。また、2018年1月には旧集計データの集計方法が変更になっているが、そこからあとの区間でもやはり新旧の差はほとんどない。
議論
以上の分析から、 30人以上の規模の事業所 (=第一種事業所) にみられる推計母集団労働者数とセンサスの労働者数との乖離は、2019年の再集計作業によって、雇用保険等補正を通じて、2012年以降の毎月勤労統計調査集計結果に持ち込まれた ものとみることができる。先に論じておいた ように、この再集計作業では雇用保険事業所データは変化していなかったはずだとすると、乖離をもたらした原因は、雇用保険等補正のもうひとつの要素すなわち事業所が層間移動したことによる労働者数の移動であろう。
これはつまり、2018年におこなわれた毎月勤労統計調査の集計方法の改訂は、層間移動した事業所のあつかいの変更をふくんでいた ということである。同年末に発覚した東京都不正抽出への対応のために2012年以降のデータを再集計した際にも、この変更をそのまま適用したのだろう。しかし、2011年以前の労働者数の変動には、新旧の集計によるちがいがほとんどないことから、2011年から2004年までさかのぼって「時系列比較のための推計値」を計算したときには、この変更は適用しなかった ものとみられる。
グラフ4でみたように、30-99人規模事業所では、雇用保険等補正による労働者数の増加率に、下方へのスパイクがいくつもみられる。一方、500-999人規模事業所では、上方への巨大なスパイクが周期的に出現する。これらの影響が表れた結果として、推計母集団労働者数は、前者では減少し、後者では増加している。
層間移動した事業所のあつかいをいったいどう変更したら、こういう特異な変化があらわれるのだろうか? 次回記事ではこの謎解きをおこないたい。
使用したプログラムとデータ
- 毎勤原表から情報を抽出するPerlプログラム
- http://tsigeto.info/maikin/maikin-monthly.pl.txt
- 分析用Rプログラム
- http://tsigeto.info/maikin/maikin-monthly3.r.txt
- 毎勤原表2004年1月-2021年5月のデータ (新集計)
- http://tsigeto.info/maikin/maikin-monthly.dat.txt
- 毎勤原表2018年1月「旧サンプル」のデータ (新集計)
- http://tsigeto.info/maikin/maikin201801kyu.dat.txt
- 毎勤原表2007年10月-2020年12月のデータ (旧集計)
- http://tsigeto.info/maikin/maikin-monthly-juu.dat.txt
- その他の情報
- http://tsigeto.info/maikin/
これらのプログラムとデータを使用するときは、ファイル名末尾の「.txt」を削るか、プログラム中のファイル名指定部分に「.txt」を加える。
つづき:
層間移動事業所と抽出率逆数:毎月勤労統計調査問題の死角
https://remcat.hatenadiary.jp/entry/20211014/samplingrate (10月14日)
履歴
- 2021-10-09
- 公開
- 2021-12-28
- 「つづき」を追記
注
*1: 2018年7月分の雇用保険事業所データを別の月ととりちがえるミスがあったことが判明しているが、それはすでに修正されている。 https://www.mhlw.go.jp/toukei/list/dl/20190531teisei.pdf 参照。