如何找到覆盖R中一组点的给定部分的最小椭圆?

2024-03-16

我在想:有没有一些功能/聪明的方法来找到smallest椭圆覆盖 R 中一组 2d 点的给定部分? With smallest我的意思是面积最小的椭圆。

澄清:如果点数很大,我可以接受近似正确的解决方案(因为我猜精确的解决方案必须尝试点子集的所有组合)

这个问题可能听起来像问题的重复包含 R 中给定点百分比的椭圆 https://stackoverflow.com/questions/6655268/ellipse-containing-percentage-of-given-points-in-r但该问题的措辞方式所产生的答案并不会导致smallest椭圆。例如,使用给出的解决方案包含 R 中给定点百分比的椭圆 https://stackoverflow.com/questions/6655268/ellipse-containing-percentage-of-given-points-in-r:

require(car)
x <- runif(6)
y <- runif(6)
dataEllipse(x,y, levels=0.5)

得到的椭圆显然不是包含一半点的最小椭圆,我猜,这将是一个覆盖左上角三个点的小椭圆。


我想我有一个需要两个功能的解决方案,cov.rob来自MASS包装和ellipsoidhull来自cluster包裹。cov.rob(xy, quantile.used = 50, method = "mve")从 2d 点总数中找到大约“最佳”50 个点xy包含在最小体积椭圆中。然而,cov.rob不直接返回this椭圆,而是从最佳点估计的其他一些椭圆(目标是稳健地估计协方差矩阵)。为了找到实际的最小椭圆,我们可以给出最好的点ellipsoidhull找到最小椭圆,我们可以使用predict.ellipse得到定义椭圆外壳的路径坐标。

我不是 100% 确定这个方法是最简单的和/或它 100% 有效(感觉应该可以避免使用的第二步ellipsoidhull但我还没弄清楚如何。)。它似乎至少适用于我的玩具示例......

说得够多了,这是代码:

library(MASS)
library(cluster)

# Using the same six points as in the question
xy <- cbind(x, y)
# Finding the 3 points in the smallest ellipse (not finding 
# the actual ellipse though...)
fit <- cov.rob(xy, quantile.used = 3, method = "mve")
# Finding the minimum volume ellipse that contains these three points
best_ellipse <- ellipsoidhull( xy[fit$best,] )
plot(xy)
# The predict() function returns a 2d matrix defining the coordinates of
# the hull of the ellipse 
lines(predict(best_ellipse), col="blue")

看起来不错!您还可以检查ellipse对象以获取更多信息

best_ellipse
## 'ellipsoid' in 2 dimensions:
##  center = ( 0.36 0.65 ); squared ave.radius d^2 =  2 
##  and shape matrix =
##         x      y
## x 0.00042 0.0065
## y 0.00654 0.1229
##   hence, area  =  0.018 

这是一个方便的函数,可以将椭圆添加到现有的基本图形中:

plot_min_ellipse <- function(xy, points_in_ellipse, color = "blue") {
  fit <- cov.rob(xy, quantile.used = points_in_ellipse, method = "mve")
  best_ellipse <- ellipsoidhull( xy[fit$best,] )
  lines(predict(best_ellipse), col=color)
}

让我们在更多的点上使用它:

x <- runif(100)
y <- runif(100)
xy <- cbind(x, y)
plot(xy)
plot_min_ellipse(xy, points_in_ellipse = 50)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何找到覆盖R中一组点的给定部分的最小椭圆? 的相关文章

  • R 中的聚类分析:确定最佳聚类数

    如何选择最佳的聚类数量来进行 k 均值分析 绘制以下数据的子集后 多少个簇比较合适 如何进行聚类树突分析 n 1000 kk 10 x1 runif kk y1 runif kk z1 runif kk x4 sample x1 lengt
  • r testthat 和 covr 在非包库中使用

    我希望能够使用testthat and covr在一个项目中not一个 r 包 事实上不使用任何第三方服务 只是普通的旧 r 源文件的集合 我正在努力找出这是否可行 如果可以 则已设置有关如何设置的说明 我发现假设你正在编写一个 r 包 我
  • 指定生存图的自定义时间点

    我正在努力使用以下方法创建生存 累积事件图ggsurvplot函数从survminer包裹 我想为我的绘图指定自定义时间点 但我不知道该怎么做 这xlim and break x by参数有点帮助 但它们创建了均匀间隔的时间点和比我想要的更
  • R testthat 单元测试数据和辅助函数约定

    我正在编写一个 R 包 并使用 testthat 进行单元测试 我的许多单元测试都是为了测试适用于我的包特定对象的功能 对于这些测试 我创建了一个辅助函数来设置模拟对象 我还有一些其他辅助函数来减少单元测试中的代码量 目前这些辅助函数在我的
  • 从频率表生成 data.frame

    我在 2 4 数组中有包含 500 个观察值的合成数据 datax array c 120 181 50 43 41 33 24 8 dim c 2 4 dimnames datax list gender c male female pu
  • R.scale() 和 sklearn.preprocessing.scale() 之间的区别

    我目前正在将数据分析从 R 转移到 Python 当在 R 中缩放数据集时 我将使用 R scale 根据我的理解 它将执行以下操作 x mean x sd x 为了替换该函数 我尝试使用 sklearn preprocessing sca
  • 为“facet_wrap”中的每列创建边框和标题

    我想在每个方面周围放置带有标签和标题的黑色边框facet wrap 与此类似的东西 样本数据 library tidyverse mtcars gt mutate gear factor gear levels c 4 3 5 gt ggp
  • 如何在 R 树形图中省略标签?

    我一直在使用R 树形图包 http cran r project org web packages treemap treemap pdf我有一个 2 层深的树形图 我希望打印第二级标签 但不打印第一级标签 使用手册页中的示例 tmPlot
  • 为什么 data.table `:=` 的 knit 缓存失败?

    这在精神上与this https stackoverflow com q 15267018 1900520问题 但机制上一定不同 如果您尝试缓存knitr包含一个块data table 分配然后它的行为就好像该块尚未运行 并且后面的块看不到
  • 将 r 数据框中的列字符串转换为数字

    我有一个数据框 其中有一列字符串 如下所示 mydata lt c 1 356670 35 355030 1 356670 35 355030 1 356620 35 355890 1 356930 35 358660 1 357000 3
  • 带有 geom_errorbar 的position_dodge

    我有以下代码 require ggplot2 pd lt position dodge 0 3 ggplot dt aes x Time y OR colour Group geom errorbar aes ymin CI lower y
  • 合并具有一个共同元素的集合 R

    我有一个这样的列表 lista list lista 1 c 1 2 4 6 8 9 10 11 12 19 32 34 35 36 37 38 lista 2 c 7 8 lista 3 c 13 14 16 26 27 28 29 30
  • 向图像添加坐标,以用作 R 中的 Leaflet、Shiny 和 Shinydashboard 包中的地图

    我计划使用 Leaflet Shiny 和 Shinydashboard 沿着以下很棒的路线创建一个带有医院 OHS 事件标记的交互式地图交互式地图和直方图模板 http shiny rstudio com gallery superzip
  • Openxlsx 多次验证损坏输出文件

    我正在尝试添加多个验证并将公式添加到 Excel 文件 这是我使用的代码 library openxlsx fileTemplate lt New01 xlsx wbTemplate lt loadWorkbook fileTemplate
  • 根据另一个向量替换向量中的值

    我想替换向量中的值 x 与另一个向量 y 陷阱 22 方法需要是动态的 以适应向量中不同数量的 级别 x 例如 考虑向量x x lt sample c 1 2 3 4 5 100 replace TRUE gt x 1 2 4 1 1 3
  • Rstudio 命令历史记录

    这些天我经常使用 Rstudio 但最近注意到我的命令不再存储在历史记录中 我不知道这是从什么时候开始的 但可能是在安装最新版本时发生的 关于问题可能是什么的任何想法吗 Thanks 这是我们在 v0 93 73 中引入并在 v0 93 7
  • 列槽不足

    当尝试为 data table 中的每个变量 108 个变量 创建 12 个滞后时 我收到一条错误 指出列槽不足 此操作应创建大约 1200 个变量或列 Data A as data table Datos A Varnames names
  • 了解用于处理色边距的scale_fill_continuous_divergingx参数输入

    这个问题是我上一个问题的延续here https stackoverflow com questions 58718527 setting midpoint for continuous diverging color scale on a
  • ggplot堆叠条 - 隐藏标签但保留标签位置

    我在 ggplot 中有一个堆积条形图 其中 geom text 标签位于每个条形的中心 我想隐藏小条上的标签 以便图表看起来不会过于拥挤 我可以使用下面的代码来完成此操作 但它会弄乱标签的位置 正如您在下面的链接图片中看到的那样 它们不再
  • 按列分组的数据帧上 R 中的行之间的差异

    我希望通过 app name 获得不同版本的计数差异 我的数据集如下所示 app name version id count difference 这是数据集 data structure list app name structure c

随机推荐