एक विकल्प कोपरबर्ग और सहकर्मियों का दृष्टिकोण है, डेटा के लॉग-घनत्व को अनुमानित करने के लिए स्प्लिन का उपयोग करके घनत्व का अनुमान लगाने पर आधारित है। मैं @ व्हिबर के उत्तर से डेटा का उपयोग करके एक उदाहरण दिखाऊंगा, जो दृष्टिकोण की तुलना के लिए अनुमति देगा।
set.seed(17)
x <- rexp(1000)
आपको इसके लिए स्थापित लॉगस्पलाइन पैकेज की आवश्यकता होगी ; इसे स्थापित करें यदि यह नहीं है:
install.packages("logspline")
पैकेज लोड करें और logspline()
फ़ंक्शन का उपयोग करके घनत्व का अनुमान लगाएं :
require("logspline")
m <- logspline(x)
निम्नलिखित में, मैं मानता हूं कि d
@ व्हिबर के उत्तर से वस्तु कार्यक्षेत्र में मौजूद है।
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)
परिणामी प्लॉट नीचे दिखाया गया है, जिसमें लॉग लाइनलाइन घनत्व लाल रेखा द्वारा दिखाया गया है
इसके अतिरिक्त, घनत्व का समर्थन तर्कों lbound
और के माध्यम से निर्दिष्ट किया जा सकता है ubound
। अगर हम यह मान लें कि घनत्व 0 से 0 के बाईं ओर है और 0 पर एक असंतोष है, तो हम lbound = 0
कॉल में उपयोग कर सकते हैं logspline()
, उदाहरण के लिए
m2 <- logspline(x, lbound = 0)
निम्नलिखित घनत्व का अनुमान लगाना ( m
पिछले लॉग पहले से ही व्यस्त होने के कारण मूल लॉगस्लाइन फिट के साथ यहां दिखाया गया है)।
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()
परिणामी भूखंड नीचे दिखाया गया है
इस मामले में, x
एक घनत्व अनुमान में परिणामों के ज्ञान का दोहन जो पर 0 तक नहीं होता है , लेकिन मानक logspline के समान है जो कहीं और फिट होता हैx=0x