【问题标题】:Plot high-dimensional kernel density in R在 R 中绘制高维核密度
【发布时间】:2014-12-19 15:00:36
【问题描述】:

我有一个关于 R 中的核密度估计的问题。我有一个 5 维数据,其中包含 (x,y,z) 位置、发生时间和某些事件(例如地震)的大小(I'已附上数据集)。为了找到 5D 核密度估计,我在 R 中编写了以下代码:

library(ks) 
library(rgl)
kern <- read.table(file.choose(), sep=",")
evpts <- do.call(expand.grid,lapply(kern,quantile, prob=c(.1,.15,.2,.25,.3,.35,.4,.45,.5,.55,.6,.65,.7,.75,.8,.85,.9,.95)))
hat <- kde(kern, eval.points= evpts)
str(hat)

现在,我想可视化内核密度估计。我更喜欢在一个图中显示关于所有 5 个维度的内核(通过对点使用不同的颜色或大小)或至少分别关于三个维度。你对我有什么建议吗?

这是数据:

       x          y          z            time         size
422.697323  164.19886   2.457419    8.083796636  0.83367586
423.008236  163.32434   0.5551326   37.58477455  0.893893903
204.733908  218.36365   1.9397874   37.88324312  0.912809449
203.963056  218.4808    0.3723791   43.21775903  0.926406005
100.727581  46.60876    1.4022341   49.41510519  0.782807523
453.335182  244.25521   1.6292517   51.73779175  0.903910803
134.909462  210.96333   2.2389119   53.13433521  0.896529401
135.300562  212.02055   0.6739541   67.55073745  0.748783521
258.237117  134.29735   2.1205291   76.34032587  0.735699304
341.305271  149.26953   3.718958    94.33975483  0.849509216
307.138925  59.60571    0.6311074   106.9636715  0.987923188
307.76875   58.91453    2.6496741   113.8515307  0.802115718
415.025535  217.17398   1.7155688   115.7464603  0.875580325
414.977687  216.73327   1.7107369   115.9776948  0.767143582
311.006135  173.24378   2.7819572   120.8079566  0.925380118
310.116929  174.28122   4.3318722   129.2648401  0.776528535
347.260911  37.34946    3.5155427   136.7851291  0.851787115
351.317624  33.65703    0.5806926   138.7349284  0.909723017
4.471892    59.42068    1.4062959   139.0543783  0.967270976
5.480223    59.72857    2.7326106   139.2114277  0.987787428
199.513023  21.53302    2.5163259   143.5895625  0.864164659
198.718031  23.50163    0.4801849   147.2280466  0.741587333
26.650517   35.2019     0.8246514   150.4876506  0.744788202
25.089379   90.47825    0.8700944   152.1944046  0.777252476
26.307439   88.41552    2.4422487   155.9090026  0.952215177
234.282901  236.11422   1.8115261   155.9658144  0.776284654
235.052948  236.77437   1.9644963   156.6900297  0.944285448
23.048202   98.6261     3.4573048   159.7700912  0.773057491
21.516695   98.05431    2.5029284   160.8202997  0.978779087
213.936324  151.87013   3.1042192   161.0612489  0.80499513
277.887935  197.25753   1.3659279   163.673142   0.758978575
277.239746  197.54001   2.2109361   166.2629868  0.775325157

【问题讨论】:

  • 我对这个问题有过似曾相识的感觉。您是否为此请求在 SO 上进行过搜索? stackoverflow.com/questions/25794075/… 5d 对象的可视化需要一个与我们的拓扑签名不同的宇宙。您只能查看“切片”。
  • 我知道 5D 维度绘图是不可能的,我只需要绘制一个 3D 绘图并按颜色或点大小显示其他 2 个维度..
  • 我在平行坐标图上取得了一些成功。
  • 我可以知道你尝试了什么吗?

标签: r plot kernel-density


【解决方案1】:

这会将“大小”根据其时间四分位数分为 4 个颜色类别,并根据其“时间”四分位数将其分为 4 个线型类别。它不使用内核密度信息:

require(MASS)
png();parcoord(dat, col=cut(dat$size, quantile(dat$size, c(0,.25,.5,.75,1)), include.lowest=TRUE), lty= as.numeric(cut(dat$time, quantile(dat$time, c(0,.25,.5,.75,1)), include.lowest=TRUE))); dev.off()

【讨论】:

  • 非常感谢您抽出宝贵时间。这张图很棒,但不是我想要的……我需要显示内核……有没有办法在一个 3D 图中显示关于 x、y、z 的内核,然后在另一个 3D 图中显示时间和大小内核,如果不是的话可以在一张图上显示所有它们的联合内核吗?
  • 如果我们不想考虑内核,我写了这段代码来绘制 5D 图:library(rgl) kern &lt;- read.table(file.choose(),header=T , sep=",") plot3d(kern$longitude, kern$latitude, kern$depth, col=as.numeric(kern$time), size= kern$magnitude, type='s',xlab="longitude",ylab="latitude",zlab="depth")
猜你喜欢
  • 2015-07-20
  • 1970-01-01
  • 2021-01-21
  • 2020-06-21
  • 2016-12-10
  • 1970-01-01
  • 2016-12-10
  • 1970-01-01
  • 2017-11-26
相关资源
最近更新 更多