Una alternativa es el enfoque de Kooperberg y sus colegas, basado en la estimación de la densidad utilizando splines para aproximar la densidad logarítmica de los datos. Mostraré un ejemplo utilizando los datos de la respuesta de @whuber, que permitirá comparar los enfoques.
set.seed(17)
x <- rexp(1000)
Necesitarás el Logspline instalado para ello; instálelo si no lo está:
install.packages("logspline")
Cargue el paquete y calcule la densidad utilizando el logspline()
función:
require("logspline")
m <- logspline(x)
En lo que sigue, asumo que el objeto d
de la respuesta de @whuber está presente en el espacio de trabajo.
plot(d, type="n", main="Default, truncated, and logspline densities",
xlim=c(-1, 5), ylim = c(0, 1))
polygon(density(x, kernel="gaussian", bw=h), col="#6060ff80", border=NA)
polygon(d, col="#ff606080", border=NA)
plot(m, add = TRUE, col = "red", lwd = 3, xlim = c(-0.001, max(x)))
curve(exp(-x), from=0, to=max(x), lty=2, add=TRUE)
rug(x, side = 3)
El gráfico resultante se muestra a continuación, con la densidad logspline mostrada por la línea roja
Además, se puede especificar el soporte de la densidad mediante argumentos lbound
y ubound
. Si queremos suponer que la densidad es 0 a la izquierda de 0 y que hay una discontinuidad en 0, podríamos utilizar lbound = 0
en la llamada a logspline()
por ejemplo
m2 <- logspline(x, lbound = 0)
El resultado es la siguiente estimación de la densidad (mostrada aquí con el original m
logspline se ajustan como la figura anterior ya se estaba ocupando).
plot.new()
plot.window(xlim = c(-1, max(x)), ylim = c(0, 1.2))
title(main = "Logspline densities with & without a lower bound",
ylab = "Density", xlab = "x")
plot(m, col = "red", xlim = c(0, max(x)), lwd = 3, add = TRUE)
plot(m2, col = "blue", xlim = c(0, max(x)), lwd = 2, add = TRUE)
curve(exp(-x), from=0, to=max(x), lty=2, add=TRUE)
rug(x, side = 3)
axis(1)
axis(2)
box()
El gráfico resultante se muestra a continuación
En este caso, aprovechar el conocimiento de x
resulta en una estimación de la densidad que no tiende a 0 en $x = 0$ pero es similar al ajuste logspline estándar en otros lugares sobre x