我有下一个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/G
和group 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
等,仅此对/
我该怎么做?
答案 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