R中的单变量自适应核密度估计

Posted

技术标签:

【中文标题】R中的单变量自适应核密度估计【英文标题】:Univariate adaptive kernel density estimation in R 【发布时间】:2015-06-09 09:43:06 【问题描述】:

是否有一个 R 函数可以计算单变量观测的自适应核密度函数。 akj(包quantreg)呢?谢谢。

【问题讨论】:

您好,请在下面找到答案,如果适合您,请考虑接受,否则我很高兴知道为什么它不能回答您的问题! Beauvel 上校,您的内核密度估计器似乎不是一个变量。我看不到您在哪里改变平滑参数 (h) 或任何距离度量。另一个问题:当我整合数据时,CDF 大于 1(我使用单变量法线运行您的代码并将其与 rnorm 进行比较)。 【参考方案1】:

我不知道这个包,但是你自己实现它很简单(这也会让你明白你在做什么),例如让我们在计划中取这些值:

g = 5
n = 100
set.seed(g)
df = data.frame(x = unlist(lapply(1:g, function(i) rnorm(n/g, runif(1)*i))),
                y= unlist(lapply(1:g, function(i) rnorm(n/g, runif(1)*i))))

plot(df)

假设您要估计此分布上三个点 x1 = c(6,-1)x2 = c(0.3, 2)x3=c(3, -0.5) 的密度。 x1 上的密度应该是弱的,x2 上的密度应该是高的,x3 上的密度应该介于这两个低密度和高密度之间:

points(6,-1, col='red', pch=19)
points(0.3,2, col='blue', pch=19)
points(3,-0.5, col='green', pch=19)

根据自适应核密度函数的定义:

http://en.wikipedia.org/wiki/Variable_kernel_density_estimation

library(functional)

gaussianKernel = function(u, h) exp(-sum(u^2)/(2*h^2))

densityFunction = function(x, df, ker, h)

    difference = t(t(df) - x)
    W = sum(apply(difference, 1, ker, h=h))
    W/(nrow(df)*(h^(length(df))))


myDensityFunction = Curry(densityFunction, df=df, ker=gaussianKernel , h=2)

我们有直观结果的确认:0 <= P(x1) < P(x3) < P(x2) <=1

#> myDensityFunction(x1)
#[1] 0.02140895
#> myDensityFunction(x2)
#[1] 0.1146402
#> myDensityFunction(x3)
#[1] 0.09341908

【讨论】:

非常感谢。这种方法与自适应内核类似吗?我在“估计家庭范围研究中利用率分布的核方法”(B.J. Worton)中看到了它 Beauvel 上校,您的内核密度估计器似乎不是一个变量。我看不到您在哪里改变平滑参数 (h) 或任何距离度量。另一个问题:当我整合数据时,CDF 大于 1(我使用单变量法线运行您的代码并将其与 rnorm 进行比较)。

以上是关于R中的单变量自适应核密度估计的主要内容,如果未能解决你的问题,请参考以下文章

r语言绘制核密度图怎么计算重叠

Python中的多变量核密度估计

`python`中的加权高斯核密度估计

比较核密度估计图

什么是gis核密度计算

自适应带宽核密度估计