【问题标题】:Estimate and extract point values from a 3D kernel density in R从 R 中的 3D 内核密度估计和提取点值
【发布时间】:2017-11-25 15:53:03
【问题描述】:

从 R 文档link 中的以下代码中,我想弄清楚如何为数据帧的每个原始点提取单个值(“密度”) 这样,我就可以将新列用于我想到的 3D 空间中的“点”密度的进一步应用。

我查看了这个 SO 问题:link,但该代码给出了一个 51 层的矩阵。我不知道如何获得 150 个点值。

在我的情况下,我担心使用的三元示例:

fhat <- kde(x=iris[,1:3])

这是代码,它给出了一个很好的情节,但我无法为 iris 数据集中的 150 行/点中的每一个获取一个值

library(ks)
library(MASS)
data(iris)

## univariate example
fhat <- kde(x=iris[,2])
plot(fhat, cont=50, col.cont="blue", cont.lwd=2, xlab="Sepal length")

## bivariate example
fhat <- kde(x=iris[,2:3])
plot(fhat, display="filled.contour2", cont=seq(10,90,by=10))
plot(fhat, display="persp", thin=3, border=1, col="white")

## trivariate example
fhat <- kde(x=iris[,2:4])
plot(fhat, drawpoints=TRUE)

【问题讨论】:

  • 谢谢,已更正错误!
  • ks 包有一些生成绘图的私有方法。因此,其中的代码显示了如何获取绘图值。您可以通过在 R 控制台中输入 ks:::plotkde.1d(以及 .2d3d 变体)来查看这些函数。您也可以str(fhat) 来查看计算得到的数据。看看其中是否有任何导致答案路径。如果他们不这样做或他们感到困惑,请将令人困惑/未能达到目标的代码位添加到问题中,并且很可能可以确定一条富有成效的路径。
  • 我打算做的是使用每点的密度值来设置 plotly scatter3d 中点的颜色(可能通过在有限数量的密度类别中合并值),以便可以将点云例如,根据密度将浅红色着色到非常深的红色。在这些图中,Plotly 本身没有办法做到这一点,所以我有一个绕过的想法,但首先需要有一个具有密度值的列。我看了你已经提到的代码,但无法理解

标签: r 3d kernel-density extrapolation


【解决方案1】:

我假设您指的是 ks 包中的 kde()

如果是这样,请使用参数 eval.points 使用估计值计算点向量/矩阵的密度:

## univariate example

library(ks)

fhat <- kde(x = iris[,2])
plot(fhat, cont=50, col.cont="blue", cont.lwd=2, xlab="Sepal length")

estimate <- kde(iris[,2], eval.points = iris[,2])$estimate
points(iris[,2], estimate)

类似地适用于更高的输入维度。

【讨论】:

  • 我在 3d 版本中需要它,但经过测试,它确实有效!我没有意识到它可以这么容易地完成。 kde(iris[,1:3], eval.points = iris[,1:3])$estimate 谢谢文学硕士
  • 现在唯一的发现是 kde 很慢。 40.000 点需要 1112.87 秒。如果有人读到这里碰巧知道更快的包,请随时发表评论
猜你喜欢
  • 2013-01-11
  • 2021-05-08
  • 1970-01-01
  • 2021-01-25
  • 2011-10-30
  • 2021-01-21
  • 2018-12-19
  • 2018-01-23
  • 1970-01-01
相关资源
最近更新 更多