サーモンの人に教えてもらった Tobit モデルというのを少し調べてみたので備忘録として残しておきます。
Tobit モデルというのは、打ち切りデータを表現するためのモデルです。
打ち切りデータというと時間的な打ち切りを想像しますが、ここでは上限や下限が決まっていて、それ以上の値を取るときは上限値(下限値)に打ち切られてしまうデータのことを言います。
例えばテストの点数を考えます。
テストの点数は、0点から100点までの範囲しか取らず、120点取ることのできる能力を持った人の点数は、100点に打ち切られてしまいます。
今、理科のテストの点数と算数のテストの点数の関係を見たいとします。
ところが、算数のテストが簡単すぎて、100点の人が続出したとします。
データはこんな感じ。
censor <- function(x) {
x[x > 100] <- 100
x[x < 0] <- 0
x
}
set.seed(123)
理科 <- censor(rnorm(100, mean=50, sd=20))
算数 <- censor(理科 + 40 + rnorm(100, mean=0, sd=10))
# hist(理科)
# hist(算数)
plot(算数 ~ 理科)
\(算数 = 理科 + 40\) で生成し、100点以上は打ち切りしています。切片 40 傾き 1 が真の母数です。
これに素直に lm をかけてパラメータ推定すると、こうなります。
plot(算数 ~ 理科)
model <- lm(算数 ~ 理科)
abline(model)
summary(model)
##
## Call:
## lm(formula = 算数 ~ 理科)
##
## Residuals:
## Min 1Q Median 3Q Max
## -20.463 -6.504 0.009 6.478 28.207
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 51.893 2.797 18.6 <2e-16 ***
## 理科 0.672 0.051 13.2 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 9.26 on 98 degrees of freedom
## Multiple R-squared: 0.639, Adjusted R-squared: 0.636
## F-statistic: 174 on 1 and 98 DF, p-value: <2e-16
推定された切片は 52、傾きは 0.7 ぐらいと、真の値である切片 40 傾き 1 に対して、打ち切りによるバイアスがかかっています。
次に、Tobit Model を使ってパラメータ推定してみます。 R で Tobit Model を使うには、VGAM パッケージを使います。
library(VGAM)
plot(算数 ~ 理科)
abline(model)
tobit.model <- vglm(算数 ~ 理科, tobit(Lower=0, Upper=100), trace=FALSE)
abline(coef(tobit.model)[c(1,3)], lwd=2)
summary(tobit.model)
##
## Call:
## vglm(formula = 算数 ~ 理科, family = tobit(Lower = 0, Upper = 100),
## trace = FALSE)
##
## Coefficients:
## Estimate Std. Error z value
## (Intercept):1 38.4 3.731 10
## (Intercept):2 2.3 0.088 26
## 理科 1.0 0.079 13
##
## Number of linear predictors: 2
##
## Names of linear predictors: mu, log(sd)
##
## Dispersion Parameter for tobit family: 1
##
## Log-likelihood: -267.4 on 197 degrees of freedom
##
## Number of iterations: 5
太線が Tobit Model による回帰直線です。
推定された切片は 38、傾きは 1.0 と真の値に近い値が推定できました。
以上です。