remcat: 研究資料集

(TANAKA Sigeto)

毎月勤労統計調査、2018年の集計方法変更で何か間違えた模様

前々回記事 で、毎月勤労統計調査の母集団労働者数推計がセンサスの数値から乖離している問題をとりあげた。

  1. 5-29人規模と500-999人規模事業所では、推計母集団労働者数が増加することにより、センサスからの乖離が生じている
  2. 30-99人規模事業所では、推計母集団労働者数が減少することにより、センサスからの乖離が生じている

さらに、 前回記事 では、母集団労働者推計をふたつの段階にわけて、どこでセンサスとの乖離が生じているかを検討した。調査対象事業所の労働者数の月間の変動データによる推計が第1段階であり (「毎勤推計」と呼ぶ)、事業所新設・廃止等による変動 (雇用保険事業所データによる) と事業所規模の変化などで別の層に事業所が移動したことによる変動 (毎月勤労統計調査による) の推計をおこなうのが第2段階である (「雇用保険等補正」と呼ぶ)。

  1. 5-29人規模事業所の推計母集団労働者数の増加には雇用保険等補正による寄与が大きいが、2012年以降は毎勤推計の寄与も増加してきている
  2. 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(a) 5-29人規模事業所


矢印はベンチマーク更新。

グラフ1(b) 30-99人規模事業所


矢印はベンチマーク更新。

グラフ1(c) 100-499人規模事業所


矢印はベンチマーク更新。

グラフ1(d) 500-999人規模事業所


矢印はベンチマーク更新。

グラフ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: 「毎勤推計」と「雇用保険等補正」の効果の分離:新旧比較

グラフ2(a) 5-29人規模事業所

グラフ2(b) 30-99人規模事業所

グラフ2(c) 100-499人規模事業所

グラフ2(d) 500-999人規模事業所

グラフ2(e) 1000人以上規模事業所

第1段階 (毎勤推計) に関しては、新集計と旧集計の間に、食い違いはほとんどない。労働者数に差が出ていないわけではないのだが、最大でも3万人弱程度であるため、グラフを描いたときにはっきりわかるほどのちがいにはならない。

第2段階 (雇用保険等補正) に関しては、5-29人規模事業所と1000人以上規模事業所では差がほとんどないのだが、それ以外の企業規模区分で、2012年以降に差がみられる。グラフ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(a) 5-29人規模事業所


各月の「前月末」→「本月末」の労働者数増加率の自然対数

グラフ3(b) 30-99人規模事業所


各月の「前月末」→「本月末」の労働者数増加率の自然対数

グラフ3(c) 100-499人規模事業所


各月の「前月末」→「本月末」の労働者数増加率の自然対数

グラフ3(d) 500-999人規模事業所


各月の「前月末」→「本月末」の労働者数増加率の自然対数

グラフ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(a) 5-29人規模事業所


前月の「本月末」→当月の「前月末」の労働者数増加率の自然対数

グラフ4(b) 30-99人規模事業所


前月の「本月末」→当月の「前月末」の労働者数増加率の自然対数

グラフ4(c) 100-499人規模事業所


前月の「本月末」→当月の「前月末」の労働者数増加率の自然対数

グラフ4(d) 500-999人規模事業所


前月の「本月末」→当月の「前月末」の労働者数増加率の自然対数

グラフ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」を加える。


*1: 2018年7月分の雇用保険事業所データを別の月ととりちがえるミスがあったことが判明しているが、それはすでに修正されている。 https://www.mhlw.go.jp/toukei/list/dl/20190531teisei.pdf 参照。