【问题标题】:Creating multiple density plots using only summary statistics (no raw data) in R在 R 中仅使用汇总统计数据(无原始数据)创建多个密度图
【发布时间】:2018-10-20 16:15:18
【问题描述】:

我使用大型 4D nifti 文件(x - y - z - 主题;MRI 数据),由于大小我无法转换为 csv 文件并在 R 中打开。我想获得一系列为每个主题叠加密度图 (classic example here),以便直观地显示整个样本的密度分布没有太大差异。

但是,我可以提取每个主题的汇总统计数据(感兴趣变量的平均值、中位数、SD、范围等),并使用这些数据创建密度图(至少对于正态分布的变量)。像this 这样的东西会很棒,但我不确定如何为密度图做这件事。

您的帮助将不胜感激。

【问题讨论】:

  • 也许这些包有用:neurobase, oro.nifti
  • 我同意 zx8754,oro.nifti 包是专门为读取/写入/操作 NIfTI 文件而设计的。

标签: r plot ggplot2 lattice density-plot


【解决方案1】:

所以这些实际上并不是密度图本身 - 它们是具有给定均值和标准偏差的正态分布密度图。

这可以在ggplot2 中完成,但您需要将主题和摘要表扩展为点网格和这些点的正常密度。

这是一个例子。首先,组成一些数据,包括主题ID和一些模拟样本平均值和样本标准差。

library(tidyverse)
set.seed(1)
foo <- data_frame(Subject = LETTERS[1:10], avg=runif(10, 10,20), stdev=runif(10,1,2)) 

现在,对于每个主题,我们需要获得一个合适的“x”值网格以及在这些“x”值处评估的正常密度(对于该主题的avgstdev)。我选择了加/减 4 个标准差。这可以使用do 来完成。但这会产生一个有趣的数据框,其中有一列由数据框组成。我使用unnest 来分解数据框。

bar <- foo %>% 
  group_by(Subject) %>% 
  do(densities=data_frame(x=seq(.$avg-4*.$stdev, .$avg+4*.$stdev, length.out = 50),
                          density=dnorm(x, .$avg, .$stdev))) %>% 
  unnest()

看看bar 看看发生了什么。现在我们可以使用ggplot2 将所有这些正常密度放在同一个图上。我猜有很多主题,你不会想要情节的传奇。

bar %>% 
  ggplot(aes(x=x, y=density, color=Subject)) + 
  geom_line(show.legend = FALSE)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-24
    • 1970-01-01
    • 2015-07-31
    • 2017-12-31
    • 2014-01-15
    • 2022-12-06
    相关资源
    最近更新 更多