Tengo un conjunto de datos con muchos ceros que se ve así:
set.seed(1)
x <- c(rlnorm(100),rep(0,50))
hist(x,probability=TRUE,breaks = 25)
Me gustaría dibujar una línea para su densidad, pero la density()
función usa una ventana móvil que calcula valores negativos de x.
lines(density(x), col = 'grey')
Hay density(... from, to)
argumentos, pero estos parecen solo truncar el cálculo, no alterar la ventana para que la densidad en 0 sea consistente con los datos como se puede ver en la siguiente gráfica:
lines(density(x, from = 0), col = 'black')
(si se cambiara la interpolación, esperaría que la línea negra tuviera una densidad mayor a 0 que la línea gris)
¿Existen alternativas a esta función que proporcionarían un mejor cálculo de la densidad en cero?
fuente
Estoy de acuerdo con Rob Hyndman en que debes lidiar con los ceros por separado. Existen algunos métodos para tratar una estimación de la densidad del núcleo de una variable con soporte acotado, que incluye 'reflexión', 'rernormalización' y 'combinación lineal'. Estos no parecen haber sido implementados en la
density
función de R , pero están disponibles en elkdens
paquete de Benn Jann para Stata .fuente
Otra opción cuando tiene datos con un límite inferior lógico (como 0, pero podría ser otros valores) que sabe que los datos no irán por debajo y la estimación regular de densidad del núcleo coloca valores por debajo de ese límite (o si tiene un límite superior , o ambos) es usar estimaciones de línea de registro. El paquete logspline para R implementa estos y las funciones tienen argumentos para especificar los límites, por lo que la estimación irá al límite, pero no más allá y todavía escalará a 1.
También hay métodos (la
oldlogspline
función) que tendrán en cuenta la censura de intervalos, por lo que si esos 0 no son 0 exactos, pero se redondean para que sepa que representan valores entre 0 y algún otro número (un límite de detección, por ejemplo), entonces puede dar esa información a la función de ajuste.Si los 0 adicionales son 0 verdaderos (no redondeados), la mejor aproximación es estimar la punta o la masa puntual, pero también se puede combinar con la estimación de la línea de registro.
fuente
Puede intentar reducir el ancho de banda (la línea azul es para
adjust=0.5
),pero probablemente KDE simplemente no sea el mejor método para manejar tales datos.
fuente