Metode regresi yang disensor dapat menangani data seperti ini. Mereka menganggap residu berperilaku seperti dalam regresi linier biasa tetapi telah dimodifikasi sehingga
(Sensor kiri): semua nilai lebih kecil dari ambang batas rendah, yang tidak tergantung pada data, (tetapi dapat bervariasi dari satu kasus ke yang lain) belum dikuantifikasi; dan / atau
(Sensor kanan): semua nilai yang lebih besar dari ambang tinggi, yang tidak tergantung pada data (tetapi dapat bervariasi dari satu kasus ke yang lain) belum dikuantifikasi.
"Tidak terkuantifikasi" berarti kita tahu apakah suatu nilai jatuh di bawah (atau di atas) ambangnya, tetapi itu saja.
YX
Y∼Xβ+ε
εFσfσσ(xi,yi)
Λ=∑i=1nlogfσ(yi−xiβ).
i=1n1yii=n1+1n2yiyidata. Kemungkinan log diperoleh dengan cara yang sama seperti sebelumnya: ini adalah log dari produk probabilitas.
Λ = ∑i = 1n1logFσ( ysaya- xsayaβ) + ∑i = n1+ 1n2logfσ( ysaya- xsayaβ) + ∑i = n2+ 1nlog( 1 - Fσ( ysaya- xsayaβ) ) .
( β, σ)
Dalam pengalaman saya, metode seperti itu dapat bekerja dengan baik ketika kurang dari setengah data disensor; jika tidak, hasilnya bisa tidak stabil.
Berikut adalah R
contoh sederhana menggunakan censReg
paket untuk menggambarkan bagaimana OLS dan hasil yang disensor dapat berbeda (banyak) bahkan dengan banyak data. Itu secara kualitatif mereproduksi data dalam pertanyaan.
library("censReg")
set.seed(17)
n.data <- 2960
coeff <- c(-0.001, 0.005)
sigma <- 0.005
x <- rnorm(n.data, 0.5)
y <- as.vector(coeff %*% rbind(rep(1, n.data), x) + rnorm(n.data, 0, sigma))
y.cen <- y
y.cen[y < 0] <- 0
y.cen[y > 0.01] <- 0.01
data = data.frame(list(x, y.cen))
0.005−0.0010.005
Mari kita gunakan keduanya lm
dan censReg
agar sesuai dengan garis:
fit <- censReg(y.cen ~ x, data=data, left=0.0, right=0.01)
summary(fit)
Hasil dari regresi yang disensor ini, diberikan oleh print(fit)
, adalah
(Intercept) x sigma
-0.001028 0.004935 0.004856
−0.0010.0050.005
fit.OLS <- lm(y.cen ~ x, data=data)
summary(fit.OLS)
Kesesuaian OLS, diberikan oleh print(fit.OLS)
, adalah
(Intercept) x
0.001996 0.002345
summary
0.002864
Sebagai perbandingan, mari kita batasi regresi untuk data yang diukur:
fit.part <- lm(y[0 <= y & y <= 0.01] ~ x[0 <= y & y <= 0.01])
summary(fit.part)
(Intercept) x[0 <= y & y <= 0.01]
0.003240 0.001461
Lebih buruk lagi!
Beberapa gambar merangkum situasinya.
lineplot <- function() {
abline(coef(fit)[1:2], col="Red", lwd=2)
abline(coef(fit.OLS), col="Blue", lty=2, lwd=2)
abline(coef(fit.part), col=rgb(.2, .6, .2), lty=3, lwd=2)
}
par(mfrow=c(1,4))
plot(x,y, pch=19, cex=0.5, col="Gray", main="Hypothetical Data")
lineplot()
plot(x,y.cen, pch=19, cex=0.5, col="Gray", main="Censored Data")
lineplot()
hist(y.cen, breaks=50, main="Censored Data")
hist(y[0 <= y & y <= 0.01], breaks=50, main="Quantified Data")
00.01
Y0.00320.0037