1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
   |  
data=data.frame(statut=c("A", "B", "C", "D", "A", "B", "C", "D"), nbr_in_list=c(5,15,7,8,4,3,5,8), nbr_not_in_list=c(9,7,5,4,8,6,4,5), in_list=c("geneA","geneA","geneA","geneA", "geneB", "geneB", "geneB", "geneB"))
data1=data %>% filter(in_list=="geneA")
 
 
idx = t(combn(seq_along(data1$statut),2))
 
res_A = lapply(1:nrow(idx),function(i){
  test = fisher.test(data1[idx[i,],c("nbr_in_list","nbr_not_in_list")])
  data.frame(
    group1 = data1$statut[idx[i,1]],
    group2 = data1$statut[idx[i,2]],
    odds_ratio = as.numeric(test$estimate),
    p = as.numeric(test$p.value)
  )
})
 
res_A = do.call(rbind,res_A)
res_A
 
 
data2=data %>% filter(in_list=="geneB")
 
idx = t(combn(seq_along(data1$statut),2))
 
res_B = lapply(1:nrow(idx),function(i){
  test = fisher.test(data1[idx[i,],c("nbr_in_list","nbr_not_in_list")])
  data.frame(
    group1 = data1$statut[idx[i,1]],
    group2 = data1$statut[idx[i,2]],
    odds_ratio = as.numeric(test$estimate),
    p = as.numeric(test$p.value)
  )
})
 
res_B = do.call(rbind,res_B)
 
res_A = cbind(res_A, in_list=c("geneA", "geneA", "geneA", "geneA", "geneA", "geneA"))
res_B = cbind(res_B, in_list=c("geneB", "geneB", "geneB", "geneB", "geneB", "geneB"))
 
res=rbind(res_A, res_B)
 
   group1 group2 odds_ratio          p in_list
1       A      B  0.2700299 0.08744158   geneA
2       A      C  0.4117416 0.43123974   geneA
3       A      D  0.2927966 0.23774398   geneA
4       B      C  1.5110621 0.71134315   geneA
5       B      D  1.0692477 1.00000000   geneA
6       C      D  0.7105367 1.00000000   geneA
7       A      B  0.2700299 0.08744158   geneB
8       A      C  0.4117416 0.43123974   geneB
9       A      D  0.2927966 0.23774398   geneB
10      B      C  1.5110621 0.71134315   geneB
11      B      D  1.0692477 1.00000000   geneB
12      C      D  0.7105367 1.00000000   geneB |