【问题标题】:Is it possible to combine separate boxplot summaries into one and create the combined graph?是否可以将单独的箱线图摘要合并为一个并创建组合图?
【发布时间】:2020-07-31 12:36:16
【问题描述】:

我正在处理相当大的数据集(每月大约 4 mio 行,具有 25 个数字属性和 4 个因子属性)。我想创建一个图表,其中包含每个月(过去 36 个月)每个产品的每个数字属性(4 个因素属性之一)的箱线图。

以产品 A 为例:

                    - 
      _             |          -
     _|_            |         _|_
    |   |           |        |   |
    |   |          _|_       |   |
    |   |         |   |      |---|
    |   |         |---|      |   |
    |---|         |   |      |   |
    |_ _|         |   |      |_ _|
      |           |_ _|        |
      |             |          |
      -             |          -
                    -

 --------------------------------------------------------------
    jan '10      feb '10    mar '10 ................... feb '13

但由于这些数据集非常大,我将使用这些数据集,因此我想获得一些建议,以开始如何处理。我的想法(但我不确定这是否可能)是

  • a) 每个产品每月提取数据
  • b) 为特定月份创建箱线图(假设产品 A 为 10 年 1 月)
  • c) 将箱线图汇总数据存储在某处
  • d) 在所有月份重复 a-c,直到 2013 年 2 月
  • e) 将所有存储的箱线图汇总数据合二为一
  • f) 绘制组合箱线图 g) 对所有其他产品重复 a-f

所以我的主要问题是:是否可以将单独的 boxlot 汇总合并为一个,并根据上面的草图创建组合图?

任何帮助将不胜感激,

谢谢

【问题讨论】:

  • 要开始使用,您可以先执行result <- boxplot(1:10,plot=FALSE)bxp(result) 之类的操作,请参阅?boxplot?bxp

标签: r statistics boxplot


【解决方案1】:

这是一个简单的例子,你可能可以做一些事情:

读取单个数据集 - 您可能希望覆盖相同的数据或将此步骤包装在一个函数中,因为您正在使用大量数据。

dset1 <- 1:10
dset2 <- 10:20
dset3 <- 20:30

存储一些箱线图信息,注意plot=FALSE

result1 <- boxplot(dset1,plot=FALSE,names="month1")
result2 <- boxplot(dset2,plot=FALSE,names="month2")
result3 <- boxplot(dset3,plot=FALSE,names="month3")

将数据分组并使用bxp进行绘图

mylist <- list(result1, result2, result3)
groupbxp <- do.call(mapply, c(cbind, mylist))
bxp(groupbxp)

结果:

【讨论】:

  • 这正是我想要的......非常感谢......这样我可以通过将计算出的箱线图添加到列表中来每月更新概览图......很棒
  • 好吧....一直在玩它(对不起,对 R 来说很新)...但还没有完全理解 do.call(mapply, c(cbind, mylist)) 函数正在做......
  • @GeoffreyStoel - 这个:stackoverflow.com/questions/15148451/… 它将单个箱线图结果(result1result2...)连接到一个对象中,以便bxp 可以一次绘制所有内容。在技​​术层面上,它正在构建对列绑定的调用,或者 ?cbind 每个 (result1,result2...) 中的每一项。尝试比较 mylistgroupbxp 的打印结果,应该会更清楚一些。
【解决方案2】:

您将无法绝对精确地预测“fivenum”值的值对于组合值的组合。考虑两组的情况,每组中的百分位数为 75,以及每组中的观察计数。假设百分位数不相等。您不能只取百分位数的加权平均值来获得聚合值的第 75 个百分位数。请参阅?boxplot.stats 的帮助页面。但是,我认为,通过使用 Fivenum 集合的中值,您可能会非常接近。这可能是您开始考试的地方。

 mo.mtx <- tapply(dat$values, dat$month, function( mo.dat) c( fivenum(mo.dat), length(mo.dat) ) 
 matplot( mo.mtx[, 1:5] , type="l" )

【讨论】:

    猜你喜欢
    • 2022-01-20
    • 1970-01-01
    • 2019-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-12
    • 2018-02-16
    相关资源
    最近更新 更多