Los métodos de regresión censurada pueden manejar datos como este. Asumen que los residuos se comportan como en la regresión lineal ordinaria, pero se han modificado para que
(Censura izquierda): no se han cuantificado todos los valores más pequeños que un umbral bajo, que es independiente de los datos (pero puede variar de un caso a otro); y / o
(Censura a la derecha): no se han cuantificado todos los valores mayores que un umbral alto, que es independiente de los datos (pero puede variar de un caso a otro).
"No cuantificado" significa que sabemos si un valor cae por debajo (o por encima) de su umbral, pero eso es todo.
Los métodos de adaptación suelen utilizar la máxima probabilidad. Cuando el modelo para la respuesta correspondiente a un vector X tiene la formaYX
Y∼Xβ+ε
con iid tiene una distribución común F σ con PDF f σ (donde σ son "parámetros molestos" desconocidos), entonces, en ausencia de censura, la probabilidad logarítmica de observaciones ( x i , y i ) esεFσfσσ(xi,yi)
Λ=∑i=1nlogfσ(yi−xiβ).
Con la censura presente, podemos dividir los casos en tres clases (posiblemente vacías): para los índices a n 1 , y i contiene los valores de umbral más bajos y representa los datos censurados a la izquierda ; para los índices i = n 1 + 1 a n 2 , y i se cuantifican; y para los índices restantes, el y i contiene los umbrales superiores valores de y representan derecha censuradoi=1n1yii=n1+1n2yiyidatos. La probabilidad de registro se obtiene de la misma manera que antes: es el registro del producto de las probabilidades.
Λ=∑i=1n1logFσ(yi−xiβ)+∑i=n1+1n2logfσ(yi−xiβ)+∑i=n2+1nlog(1−Fσ(yi−xiβ)).
(β,σ)
En mi experiencia, tales métodos pueden funcionar bien cuando menos de la mitad de los datos están censurados; de lo contrario, los resultados pueden ser inestables.
Aquí hay un R
ejemplo simple que usa el censReg
paquete para ilustrar cómo OLS y los resultados censurados pueden diferir (mucho) incluso con muchos datos. Reproduce cualitativamente los datos de la pregunta.
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
Usemos ambos lm
y censReg
para ajustar una línea:
fit <- censReg(y.cen ~ x, data=data, left=0.0, right=0.01)
summary(fit)
Los resultados de esta regresión censurada, dada por print(fit)
, son
(Intercept) x sigma
-0.001028 0.004935 0.004856
−0.0010.0050.005
fit.OLS <- lm(y.cen ~ x, data=data)
summary(fit.OLS)
El ajuste OLS, dado por print(fit.OLS)
, es
(Intercept) x
0.001996 0.002345
summary
0.002864
A modo de comparación, limitemos la regresión a los datos cuantificados:
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
¡Peor aún!
Algunas fotos resumen la situación.
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