我使用大量的4D nifti文件(x - y - z - 主题; MRI数据),由于大小我无法转换为csv文件并在R中打开。我想得到一系列为每个受试者叠加一个密度图(classic example here),其想法只是想象样本中密度分布的变化不大。
然而,我可以提取每个受试者的摘要统计数据(感兴趣的变量的平均值,中位数,SD,范围等),并使用这些来创建密度图(至少对于正态分布的变量)。像this之类的东西会很棒,但我不知道如何为密度图做到这一点。非常感谢您的帮助。
答案 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”值处评估的正常密度(对于该主题的avg
和stdev
)。我选择了加/减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)