Metody regresji ocenzurowanej mogą obsługiwać takie dane. Zakładają, że reszty zachowują się jak w zwykłej regresji liniowej, ale zostały zmodyfikowane w taki sposób
(Lewa cenzura): wszystkie wartości mniejsze niż dolny próg, który jest niezależny od danych (ale może różnić się w zależności od przypadku), nie zostały określone ilościowo; i / lub
(Właściwa cenzura): wszystkie wartości większe niż wysoki próg, który jest niezależny od danych (ale może różnić się w zależności od przypadku), nie zostały określone ilościowo.
„Nieokreślony” oznacza, że wiemy, czy wartość spada poniżej (lub powyżej) progu, ale to wszystko.
Metody dopasowania zazwyczaj wykorzystują maksymalne prawdopodobieństwo. Gdy model odpowiedzi odpowiadającej wektorowi X jest w formieYX
Y∼Xβ+ε
z iid o wspólnym rozkładzie F σ z PDF f σ (gdzie σ są nieznanymi „parametrami uciążliwymi”), to - przy braku cenzury - logarytmiczne prawdopodobieństwo obserwacji ( x i , y i ) wynosiεFσfσσ(xi,yi)
Λ=∑i=1nlogfσ(yi−xiβ).
Z censoring występuje, można podzielić na trzy przypadki (ewentualnie puste) klasy: indeksów do n 1 , z Y i zawiera na dolny próg wartości i stanowią pozostawione uciętych danych; indeksów i = N 1 + 1 do N 2 , z Y i określono ilościowo; a dla pozostałych indeksów y i zawierają górne wartości progowe i reprezentują prawą cenzuręi=1n1yii=n1+1n2yiyidane. Prawdopodobieństwo dziennika jest uzyskiwane w taki sam sposób, jak poprzednio: jest to dziennik iloczynu prawdopodobieństw.
Λ=∑i=1n1logFσ(yi−xiβ)+∑i=n1+1n2logfσ(yi−xiβ)+∑i=n2+1nlog(1−Fσ(yi−xiβ)).
Jest to maksymalizowane numerycznie jako funkcja (β,σ)
Z mojego doświadczenia wynika, że takie metody mogą działać dobrze, gdy cenzuruje się mniej niż połowę danych; w przeciwnym razie wyniki mogą być niestabilne.
Oto prosty R
przykład z wykorzystaniem censReg
pakietu do zilustrowania, jak OLS i wyniki ocenzurowane mogą się różnić (bardzo dużo) nawet przy dużej ilości danych. Jakościowo odtwarza dane w pytaniu.
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
Użyjmy obu lm
i censReg
dopasuj linię:
fit <- censReg(y.cen ~ x, data=data, left=0.0, right=0.01)
summary(fit)
Podane przez wyniki regresji ocenzurowanej print(fit)
są
(Intercept) x sigma
-0.001028 0.004935 0.004856
−0.0010.0050.005 .
fit.OLS <- lm(y.cen ~ x, data=data)
summary(fit.OLS)
Podane przez OLS dopasowanie print(fit.OLS)
to
(Intercept) x
0.001996 0.002345
summary
0.002864 , czyli mniej niż połowę wartości rzeczywistej. Tego rodzaju uprzedzenia są typowe dla regresji z dużą ilością cenzurowanych danych.
Dla porównania ograniczmy regresję do danych ilościowych:
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
Nawet gorzej!
Kilka zdjęć podsumowuje sytuację.
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 w pierwszym zostały przesunięte do odpowiednich progów, aby uzyskać drugi wykres. W rezultacie możesz zobaczyć wszystkie cenzurowane dane ułożone u dołu iu góry.
Y0.00320.0037