Bir alternatif, verilerin log yoğunluğunu yaklaşık olarak belirlemek için spline kullanan yoğunluğu tahmin etmeye dayanan Kooperberg ve meslektaşlarının yaklaşımıdır. @ Whuber'un cevabındaki verileri kullanarak, yaklaşımların karşılaştırılmasını sağlayacak bir örnek göstereceğim.
set.seed(17)
x <- rexp(1000)
Bunun için kurulu logspline paketine ihtiyacınız olacak ; değilse yükleyin:
install.packages("logspline")
Paketi yükleyin ve logspline()
işlevi kullanarak yoğunluğu tahmin edin :
require("logspline")
m <- logspline(x)
Aşağıda, d
@ whuber'ın cevabındaki nesnenin çalışma alanında mevcut olduğunu varsayıyorum .
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)
Ortaya çıkan arsa kırmızı çizgi ile gösterilen logspline yoğunluğu ile aşağıda gösterilmiştir
Ek olarak, yoğunluk desteği argümanlar lbound
ve ubound
. Biz yoğunluk 0 solundaki 0 olduğunu varsayalım isteyen ve bir devamsızlık 0'dan varsa, biz kullanabilirsiniz lbound = 0
çağrısında logspline()
örneğin,
m2 <- logspline(x, lbound = 0)
Aşağıdaki yoğunluk tahminini m
verirken (burada önceki rakam zaten meşgulken orijinal logspline ile gösterilmiş olarak gösterilmiştir ).
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()
Ortaya çıkan arsa aşağıda gösterilmiştir
Bu durumda, x
sonuçların bilgisinden yararlanarak , 0 olma eğiliminde olmayan , ancak başka bir yere uyan standart logspline'a benzer bir yoğunluk tahminix=0x