Если вы оцениваете свою плотность по данным, вам лучше использовать эмпирические моменты из данных для оценки моментов распределения. Если вы просто использовали это как пример функции, то вы могли бы использовать функцию integrate
из пакета stats
. Например,
set.seed(123)
tmp <- runif(100,-10,10)
PDFdata <- density(tmp , kernel = "gaussian")
PDF <- splinefun(PDFdata$x , PDFdata$y)
mean(tmp)
[1] -0.02882012
integrate(function(x) x*PDF(x), -Inf, Inf)
Error in integrate(function(x) x * PDF(x), -Inf, Inf) :
the integral is probably divergent
и действительно, для этого набора данных функция PDF
не является плотностью:
plot(PDF, from = -100, to = 100)
Таким образом, мы заставляем его обнуляться вне диапазона оценки плотности:
PDF2 <- function(x) ifelse(x < min(PDFdata$x) | x > max(PDFdata$x), 0,
PDF(x))
integrate(function(x) x*PDF2(x), -Inf, Inf)
-0.02900585 with absolute error < 8.2e-05