计算具有多个重复和类别的样本的斜率

时间:2014-12-11 18:28:51

标签: r reshape reshape2

我有一个相当复杂的实验数据集,因此我创建了一个简化的示例来帮助传达问题。完整实验是一个时间过程,包括8个时间点,4个重复,4个类别(简化为"性别"样本中)和26,000个基因的表达数据。我想如果有人可以帮助更简单的数据集来解决我的问题,它应该应用于更大的数据集。

更简单的数据集(下面)有4个时间点,3个重复,2个基因和测量表达式(数字非负值,完整数据集中有小数)。我能够将以下代码直接复制并粘贴到R中,并且有效。

sample <- structure(list(time = c(0L, 0L, 0L, 0L, 0L, 0L, 15L, 15L, 15L, 
15L, 15L, 15L, 30L, 30L, 30L, 30L, 30L, 30L, 45L, 45L, 45L, 45L, 
45L, 45L, 0L, 0L, 0L, 0L, 0L, 0L, 15L, 15L, 15L, 15L, 15L, 15L, 
30L, 30L, 30L, 30L, 30L, 30L, 45L, 45L, 45L, 45L, 45L, 45L), 
replicate = c(1L, 1L, 2L, 2L, 3L, 3L, 1L, 1L, 2L, 2L, 3L, 
3L, 1L, 1L, 2L, 2L, 3L, 3L, 1L, 1L, 2L, 2L, 3L, 3L, 1L, 1L, 
2L, 2L, 3L, 3L, 1L, 1L, 2L, 2L, 3L, 3L, 1L, 1L, 2L, 2L, 3L, 
3L, 1L, 1L, 2L, 2L, 3L, 3L), gender = structure(c(2L, 1L, 
2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 
1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 
2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 
1L), .Label = c("female", "male"), class = "factor"), gene = structure(c(1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L), .Label = c("gene1", "gene2"), class = "factor"), 
expression = c(1000L, 2000L, 1010L, 2010L, 1020L, 2020L, 
900L, 1900L, 910L, 1910L, 920L, 1920L, 700L, 1700L, 710L, 
1720L, 720L, 1750L, 500L, 1020L, 520L, 1010L, 510L, 1050L, 
1100L, 2100L, 1110L, 2110L, 1120L, 2120L, 1000L, 2000L, 1010L, 
2010L, 1020L, 2020L, 800L, 1800L, 810L, 1820L, 820L, 1850L, 
600L, 1120L, 620L, 1110L, 610L, 1150L)), .Names = c("time", 
"replicate", "gender", "gene", "expression"), class = "data.frame", row.names = c(NA, 
-48L))
sample$replicate <- as.factor(sample$replicate)

应该是这样的:

> head(sample)
  time replicate gender  gene expression
1    0         1   male gene1       1000
2    0         1 female gene1       2000
3    0         2   male gene1       1010
4    0         2 female gene1       2010
5    0         3   male gene1       1020
6    0         3 female gene1       2020

我的问题是:

我想要在时间过程中使用每个基因的每个基因的重复计算的斜率列表。我不确定我是否期望斜率是线性的或非线性的,因此选择其中一个是有帮助的。我预计斜坡大部分趋势向下,但也有一些可能是积极的。

我不反对以不同的方式重塑数据!我只是不知道用什么格式来实现我的目标。我玩过reshapereshape2个套餐。有一次,我的数据是&#34;时间&#34;作为列,26,000列具有表达式值,但一个类别仅一个复制。最终我有4个重复和4个类别,26,000个独特基因,这就是我如何着陆这个特定的格式/结构。

我需要斜率来执行一些归一化计算,然后才能使用混合效果模型中的数据来查找时间和性别之间的相互作用(或者#34;类别&#34;在我的大数据集中),复制作为随机效果。

如果有帮助,这是我的sessionInfo()。使用RStudio version 0.98.994

sessionInfo()
R version 3.1.2 (2014-10-31)
Platform: x86_64-apple-darwin10.8.0 (64-bit)
locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

attached base packages:
[1] graphics  grDevices utils     datasets  stats     methods   base     

other attached packages:
[1] lme4_1.1-7           Rcpp_0.11.3          Matrix_1.1-4         gplots_2.14.2            RColorBrewer_1.0-5  
[6] ggplot2_1.0.0        reshape_0.8.5        BiocInstaller_1.16.1

loaded via a namespace (and not attached):
 [1] bitops_1.0-6       caTools_1.17.1     colorspace_1.2-4   digest_0.6.4       gdata_2.13.3          grid_3.1.2        
 [7] gtable_0.1.2       gtools_3.4.1       KernSmooth_2.23-13 lattice_0.20-29    MASS_7.3-35        minqa_1.2.4       
[13] munsell_0.4.2      nlme_3.1-118       nloptr_1.0.4       plyr_1.8.1         proto_0.3-10       reshape2_1.4      
[19] scales_0.2.4       splines_3.1.2      stringr_0.6.2      tools_3.1.2  

非常感谢你的帮助!如果我能澄清任何事情,请告诉我。

1 个答案:

答案 0 :(得分:1)

使用dplyr

的方法怎么样?
library(dplyr)
sample %>% 
    group_by(gene, gender) %>% 
    do(slope=lm(expression~time, .)$coef[2]) %>% 
    ungroup()

这将返回

   gene gender     slope
1 gene1 female -20.91111
2 gene1   male -11.33333
3 gene2 female -20.91111
4 gene2   male -11.33333