Salah satu problem menggunakan Instrumental Variable (IV)
Salah satu kebahagiaan utama dari bekerja sebagai tutor untuk AAS dan ANU adalah saya jadi belajar konten mata kuliah yang saya tutor yang tidak saya ikuti semasa saya kuliah di ANU. Di ANU banyak banget mata kuliah yang isinya sangat menarik yang tidak mungkin semua diikuti. Menjadi tutor membuat saya βmengikutiβ perkuliahan lebih banyak daripada seharusnya ha ha.
Kali ini, saya mau berbagi ilmu tentang kelemahan Instrumental Variable (IV) regression, salah satu teknik di ekonometri untuk melakukan treatment terhadap bias OLS. Ilmu ini saya dapatkan ketika menutor dua mahasiswa keren saya, Grani dan Riza.
Apa itu IV?
Salah satu problem yang dapat menjangkiti OLS adalah endogeneity atau
reverse causality. Ini terjadi ketika variabel independen anda
ternyata tidak independen, alias variabel
Akibatnya, kita tidak dapat mengatakan dengan yakin bahwa
IV adalah salah satu treatment untuk masalah ini. IV adalah sebuah
variabel ke-3
Problem IV
IV sendiri punya banyak problem (huft). Salah satunya adalah IV bisa
jadi malah bikin bias OLS jika hubungan
Setting
Di sini kita coba bikin kasus mencari kausalitas apakah cash flow mempengaruhi firmβs borrowing. Sebuah perusahaan yang cash flow-nya sedang negatif akan meminjam dari bank atau dari masyarakat untuk bertahan, dan akan dibayar di masa datang ketika sudah dapat revenue. Namun perusahaan yang cash flow-nya sedang positif juga bisa saja meminjam karena cash flow positif menandakan perusahaan sedang tumbuh dan butuh modal lebih. Artinya, hubungan antara cash flow dan borrowing tidak jelas kalau di-OLS kan. Salah satu caranya adalah menggunakan productivity untuk memprediksi cash flow (perusahaan yang sedang kena negative shock otomatis cash flow-nya negatif) baru diregresi ke borrowing.
Kita buat 2,000 observasi, di mana separuhnya mengalami shock negatif
yang rata
data <- data.frame(
id=c(1:2000)
)
# generate data observation
data$lnz <- rnorm(2000, mean = 0.5, sd=1)
data$Z <- exp(data$lnz)
data$U <- rnorm(2000,mean = 0, sd=0.1)
data$B1 <- rbinom (2000, 1, 0.5) # to explain about probability 1
data$B2 <- 1-data$B1 # to explain about probability 1
# generate firm cashflow
data$X <- data$B1*data$Z - 3*data$B2 + data$U
# generate firm borrowing
data$E <- rnorm(2000,mean = 0, sd=0.1)
data$R <- 0.5*data$U + 0.5*data$E
data$X1 <- ifelse (data$X>0, 1, 0)
data$X2 <- ifelse (data$X<0, 1, 0)
data$Y <- (data$X*data$X1) - (data$X*data$X2) + data$R
head(data)
## id lnz Z U B1 B2 X E R
## 1 1 0.53446900 1.7065418 -0.02069438 1 0 1.685847 -0.16523761 -0.09296600
## 2 2 -0.25843412 0.7722599 -0.01968836 0 1 -3.019688 -0.09326667 -0.05647752
## 3 3 0.58658233 1.7978335 0.05513357 0 1 -2.944866 -0.10034947 -0.02260795
## 4 4 1.48663543 4.4221917 -0.18736333 0 1 -3.187363 -0.10648732 -0.14692532
## 5 5 1.07463211 2.9289152 0.04403934 0 1 -2.955961 0.03063488 0.03733711
## 6 6 0.05710789 1.0587700 0.03335503 1 0 1.092125 0.07427162 0.05381333
## X1 X2 Y
## 1 1 0 1.592881
## 2 0 1 2.963211
## 3 0 1 2.922258
## 4 0 1 3.040438
## 5 0 1 2.993298
## 6 1 0 1.145938
Kode di atas membuat cash flow
Coba kita plot
library(ggplot2)
a<-ggplot(data, aes(Z,X, colour=B1)) +
geom_point()
a

Di mana warna biru menandakan shock positif sementara hitam menandakan
shock negatif. keliatan ya? Shock positif sesuai 45β dari
Sekarang kita coba plot
b<-ggplot(data,aes(X,Y,colour=X1)) +
geom_point()
b

Firmβs borrowing sudah pasti positif, dan kita buat sedemikian
sehingga perusahaan meminjam sesuai cash flow (alias koefisien
beta-nya = 1). Nah, ketika
Jika kita, ceritanya nggak tau hubungan
b +
geom_smooth(method = "lm")

Keliatan bias banget yah?
Bagaimana dengan koefisiennya? Coba anda bisa nebak gak? ingat bahwa
ketika
# Regression
mod <- lm(Y~X, data = data)
summary(mod)
##
## Call:
## lm(formula = Y ~ X, data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.0007 -1.7264 0.9776 1.1259 15.2347
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2.88313 0.04075 70.76 <2e-16 ***
## X 0.32862 0.01145 28.70 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.82 on 1998 degrees of freedom
## Multiple R-squared: 0.2919, Adjusted R-squared: 0.2916
## F-statistic: 823.7 on 1 and 1998 DF, p-value: < 2.2e-16
Jawabannya (hampir) benar! (hampir) 0.5! Jadi sebenarnya dengan OLS, kita sudah mendapatkan koefisien yang (hampir) sesuai dengan data yang kita regenerasi, yaitu (hampir) 0.5! Yah tentu saja hasilnya masih salah wkwkwk karena 0.32 masih agak jauh dari 0.5 yha, tapi kan ceritanya kita gak tau dunia nyata bentuknya kayak gimana he he he.
Regresi IV malah bikin tambah jelek
Tentu saja OLS belum ngasih kita koefisien yang kita inginkan ya (tentu saja masalah bias masih ada). Yang jadi masalah, regresi IV malah bikin koefisiennya makin menjauh dari 0.5!
Coba kita regresi
library (AER)
modelIV <- ivreg(formula=data$Y~data$X | data$Z)
summary(modelIV)
##
## Call:
## ivreg(formula = data$Y ~ data$X | data$Z)
##
## Residuals:
## Min 1Q Median 3Q Max
## -5.366 -3.175 -2.877 3.252 3.884
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 3.01206 0.07358 40.94 <2e-16 ***
## data$X 1.08897 0.05915 18.41 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 3.26 on 1998 degrees of freedom
## Multiple R-Squared: -1.271, Adjusted R-squared: -1.272
## Wald test: 339 on 1 and 1998 DF, p-value: < 2.2e-16
Setelah di-treat dengan IV, koefisien X dan Y malah bermasalah. Tapi sebenernya kan memang kita meregresikan X dan Y dengan koefisien 1 (meskipun aslinya 50% doang, 50%-nya lagi koefisien -1) Tentu saja, IV-nya hanya menangkap 50% dari fenomena, dan 50%-nya lagi akhirnya diserahkan ke intercept (dan error). OLS emang masih ada bias, tapi IV malah bikin tambah parah. Inilah salah satu contoh problem menggunakan IV, jika hubungan IV nya sendiri bias.
Cara terbaik? Tentu saja memisahkan regresinya jadi dua. Contoh jika kita regresi hanya shock positif saja:
dataX<-data
dataX<-dataX[!(dataX$B2=="1"),]
modelIV2 <- ivreg(formula=dataX$Y~dataX$X | dataX$Z)
summary(modelIV2)
##
## Call:
## ivreg(formula = dataX$Y ~ dataX$X | dataX$Z)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.228315 -0.047317 0.002166 0.045417 0.201270
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.0020950 0.0028174 0.744 0.457
## dataX$X 0.9997967 0.0006977 1432.905 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.06716 on 999 degrees of freedom
## Multiple R-Squared: 0.9995, Adjusted R-squared: 0.9995
## Wald test: 2.053e+06 on 1 and 999 DF, p-value: < 2.2e-16
Ini benar. Intercept = 0, dan koefisiennya 1, sesuai dengan yang kita
buat. Tentu saja yang negatif tidak perlu kita IV karena ketika negatif,
Intinya, hati-hati menggunakan IV
Tentu saja di dunia nyata kita tidak tau fungsi asli dari
Biasanya yang kita lakukan di paper adalah menunjukkan hasil regresi OLS dan IV, sehingga bisa dilihat pola-nya apakah IV memperbaiki OLS atau tidak. Tentu saja justifikasi dari publikasi lain soal keabsahan IV juga harus ditulis di paper kita wkwk. Di Crawford sendiri, jika anda menggunakan IV, siap-siaplah ditanya-tanyain soal kekuatan instrumennya. Ha ha ha ha!
IV memang ribet. Moga-moga kita tidak harus berurusan dengan IV. wwkwkw. Ok sekian semoga postingannya berguna.