R 密度面采样点概率
我创建了一个二维密度曲面:R 密度面采样点概率,r,R,我创建了一个二维密度曲面: library(MASS) a <- data$x b <- data$y f1 <- kde2d(a, b, n = 100) filled.contour(f1) 库(MASS) 基本上,你想要做的事情需要两个步骤:首先,找到估计密度的轮廓,使80%的点位于该轮廓内。然后找到每个点的密度,看看它是否高于轮廓 我们没有您的数据变量,因此我将伪造一个: data <- data.frame(x = rnorm(200), y = rnorm(
library(MASS)
a <- data$x
b <- data$y
f1 <- kde2d(a, b, n = 100)
filled.contour(f1)
库(MASS)
基本上,你想要做的事情需要两个步骤:首先,找到估计密度的轮廓,使80%的点位于该轮廓内。然后找到每个点的密度,看看它是否高于轮廓
我们没有您的数据
变量,因此我将伪造一个:
data <- data.frame(x = rnorm(200), y = rnorm(200))
library(MASS)
a <- data$x
b <- data$y
f1 <- kde2d(a, b, n = 100)
filled.contour(f1)
对于第二步,您需要创建一个近似结果的函数
由kde2d
给出。fields::interp.surface
函数可以做到这一点
densities <- fields::interp.surface(f1, data)
结果如下:
数据谢谢!这很有帮助。那么,我如何检查一个点,比如(-1,2),是否位于这个中心的80%之内呢?对于少量点,我可以目视检查,但我需要检查实际数据集中的100000个点。只需将它们作为列x
和y
放在名为newdata
的数据框中,并调用fields::interp.surface(f1,newdata)>contourlevel
。非常感谢!!我真的很感谢你的帮助。在回复你的编辑时:你仍然可以使用我给出的方法,只要你要求“中心”时你指的是“最高密度”。对于“中心80%”还有其他定义,对双峰分布给出了不同的答案,但对于大多数应用,“最高密度”是一个相当合理的定义。
densities <- fields::interp.surface(f1, data)
table(densities > contourlevel)
plot(data, col = ifelse(densities > contourlevel, "green", "red"))