Follow @data_no_memo

メモ

個人的なメモです。他者にわかりやすく書くよりも未来の自分にわかりやすく書いています。なお、記事内容の正確さは保証できません。勉強中の身ですので、間違い等ご指摘頂けたら幸いです。

トービットモデル

トービットモデルについて。

まだ勉強中で、間違っているところがあるかもしれないが、メモ。

 

 

 

 それでは、どのように普通の回帰分析と結果が異なるのか。簡単に実験してみた。

 

まず、独立変数x(平均3000、標準偏差1000)と従属変数y(平均3000、標準偏差1000)が相関0.6くらいになるように乱数(n=1000個)を発生させる。

そこで、xが2500以下の場合、yを0とする(打ち切り)。

このデータは、上のpdf中のプロット図を作成した手順と同じである。

このデータにおいて、回帰分析とトービットモデルによる分析を回してみて、その係数および標準誤差を取り出す。

以上を1000回繰り返す事で、どのように回帰分析とトービットモデルのxの係数が異なるのかを確認する。

 

なお、青色が回帰分析の係数、赤色がトービットモデルの係数である。

 

f:id:abcxyzonetwothree:20181008121422p:plain

これをみると、赤色、すなわちトービットモデルの係数の方が大きくなる傾向にある事がわかる。

この傾向は、独立変数xと従属変数yの相関係数をいろいろいじっても変わらなかった。

よって、今回の実験からは、トービットモデルは通常の回帰分析の係数よりも、大きくなる傾向にある事がわかった。

 

なお、そのコードは以下の通り。


library(AER) #トービットモデルのパーケッジ
N<-1000 #試行回数
b_lm<-numeric(N) #回帰分析の係数収納
b_tobit<-numeric(N) #トービットモデルの収納

for(i in 1:N){
  n<-1000 #サンプル数
  y<-rnorm(n,mean=3000,sd=1000) #従属変数
  
  r<-0.6
  z<-rnorm(n,mean=3000,sd=1000)
  x<-r*y+sqrt(1-r^2)*z #独立変数
  
  y<-ifelse(x<=2500,0,y) #xが2500以下で打ち切り

  data<-data.frame(cbind(x,y))
  
  lm<-summary(lm(y~x)) #回帰分析
  tobit<-summary(tobit(y~x)) #トービットモデル 
  
  b_lm[i]<-lm$coefficients[2] #回帰分析の係数を収納
  b_tobit[i]<-tobit$coefficients[2] #トービットモデルの係数を収納
}

#図示
library(ggplot2)
g1<-ggplot()
g1<-g1+geom_histogram(mapping=aes(x=b_lm),colour="blue",alpha=0.5) #回帰分析の係数(青色)
g1<-g1+geom_histogram(mapping=aes(x=b_tobit),colour="red",alpha=0.5,position="identity") #トービットモデルの係数(赤色)
print(g1)