Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 密度面采样点概率_R - Fatal编程技术网

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"))