Les méthodes de régression censurée peuvent gérer des données comme celle-ci. Ils supposent que les résidus se comportent comme dans la régression linéaire ordinaire mais ont été modifiés de telle sorte que
(Censure à gauche): toutes les valeurs inférieures à un seuil bas, indépendant des données (mais pouvant varier d'un cas à l'autre) n'ont pas été quantifiées; et / ou
(Censure à droite): toutes les valeurs supérieures à un seuil haut, indépendant des données (mais pouvant varier d'un cas à l'autre) n'ont pas été quantifiées.
«Non quantifié» signifie que nous savons si une valeur tombe en dessous (ou au-dessus) de son seuil, mais c'est tout.
Les méthodes d'ajustement utilisent généralement un maximum de vraisemblance. Lorsque le modèle de la réponse correspondant à un vecteur X est sous la formeOuiX
Oui∼ Xβ+ ε
avec iid ayant une distribution commune F σ avec PDF f σ (où σ sont des "paramètres de nuisance" inconnus), alors - en l'absence de censure - la probabilité logarithmique des observations ( x i , y i ) estεFσFσσ( xje, yje)
Λ = ∑i = 1nbûcheFσ(yje-xjeβ) .
i=1n1yii=n1+1n2yiyiLes données. Le log vraisemblance s'obtient de la même manière qu'auparavant: c'est le log du produit des probabilités.
Λ = ∑i = 1n1bûcheFσ( yje- xjeβ) + ∑i = n1+ 1n2bûcheFσ( yje- xjeβ) + ∑i = n2+ 1nbûche( 1 - Fσ( yje- xjeβ) ) .
(β,σ)
D'après mon expérience, de telles méthodes peuvent bien fonctionner lorsque moins de la moitié des données sont censurées; sinon, les résultats peuvent être instables.
Voici un R
exemple simple utilisant le censReg
package pour illustrer comment OLS et les résultats censurés peuvent différer (beaucoup) même avec beaucoup de données. Il reproduit qualitativement les données de la question.
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
Utilisons les deux lm
et censReg
pour ajuster une ligne:
fit <- censReg(y.cen ~ x, data=data, left=0.0, right=0.01)
summary(fit)
Les résultats de cette régression censurée, donnés par print(fit)
, sont
(Intercept) x sigma
-0.001028 0.004935 0.004856
- 0,0010,0050,005
fit.OLS <- lm(y.cen ~ x, data=data)
summary(fit.OLS)
L'ajustement OLS, donné par print(fit.OLS)
, est
(Intercept) x
0.001996 0.002345
summary
0,002864
À titre de comparaison, limitons la régression aux données quantifiées:
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
Encore pire!
Quelques photos résument la situation.
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
Oui0,00320,0037