在R中仅使用汇总统计(无原始数据)创建多个密度图

时间:2018-05-10 11:38:35

标签: r plot ggplot2 lattice density-plot

我使用大量的4D nifti文件(x - y - z - 主题; MRI数据),由于大小我无法转换为csv文件并在R中打开。我想得到一系列为每个受试者叠加一个密度图(classic example here),其想法只是想象样本中密度分布的变化不大。

然而,我可以提取每个受试者的摘要统计数据(感兴趣的变量的平均值,中位数,SD,范围等),并使用这些来创建密度图(至少对于正态分布的变量)。像this之类的东西会很棒,但我不知道如何为密度图做到这一点。

非常感谢您的帮助。

1 个答案:

答案 0 :(得分: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)

normal densities