查找化合物的p值(成对)

时间:2018-07-23 13:29:23

标签: r

我有下一个SNPs data.frame结构

> str(SNPs)
'data.frame':   1703 obs. of  4 variables:
 $ group: Factor w/ 2 levels "A","B": 1 1 1 1 1 1 1 1 1 1 ...
 $ rs1  : Factor w/ 3 levels "D/D","I/D","I/I": 1 1 2 3 3 2 1 1 1 1 ...
 $ rs2  : Factor w/ 3 levels "a/a","a/b","b/b": 3 3 2 3 3 2 2 3 3 2 ...
 $ rs3  : Factor w/ 3 levels "G/G","G/T","T/T": 2 1 2 1 1 3 1 1 2 1 ...
 ...other rs


> head(SNPs)
  group rs1 rs2 rs3 ...other rs
1     A D/D b/b G/T
2     A D/D b/b G/G
3     A I/D a/b G/T
4     A I/I b/b G/G
5     A I/I b/b G/G
6     A I/D a/b T/T

例如,我注意到rs5 4b/4a中的rs6 G/Ggroup A经常一起出现(请参阅下文)。在group B中,它们也经常同时出现。所以我想知道-统计规律与否。

我可以创建具有两组所有对的表

> SNPs$rs5_rs6 <- paste(SNPs$rs5, SNPs$rs6)
> tmp <- table(SNPs$rs5_rs6, SNPs$group)
> tmp

              A   B
  4a/4a G/G   1  20
  4b/4a G/G  31  83
  4b/4a G/T  14  51
  4b/4a T/T   1   0
  4b/4b G/G  37 106
  4b/4b G/T  35 119
  4b/4b T/T  11  31

因此,现在我需要比较(查找p值)A组和B组:A组中的4a/4a G/G与B组中的4a/4a G/G,A组中的4b/4a G/G与{{ B组中的1}},A组中的4b/4a G/G与B组中的4b/4a G/T等,仅此对/

我该怎么做?

1 个答案:

答案 0 :(得分:0)

如果要对每一行进行比例测试(H0 = 0.5),则可以使用mapply函数,如下所示:

  

prop.test可用于测试零表示比例   (成功的概率)在几个组中是相同的,或者   它们等于某些给定值。

str <- "x y A B
4a/4a G/G   1  20
4b/4a G/G  31  83
4b/4a G/T  14  51
4b/4a T/T   1   0
4b/4b G/G  37 106
4b/4b G/T  35 119
4b/4b T/T  11  31"

df <- read.table(text = str, header = TRUE)

df$p_value <- mapply(function(x, y) prop.test(x, x + y, conf.level = 0.95)$p.value, df$A, df$B)
df

输出:

      x   y  A   B      p_value
1 4a/4a G/G  1  20 8.568298e-05
2 4b/4a G/G 31  83 1.782949e-06
3 4b/4a G/T 14  51 7.997514e-06
4 4b/4a T/T  1   0 1.000000e+00
5 4b/4b G/G 37 106 1.297106e-08
6 4b/4b G/T 35 119 2.257307e-11
7 4b/4b T/T 11  31 3.370431e-03