我有一个基因的不同等位基因和样本总数的频率数据(1242890)。要进行统计检验(卡方,费舍尔等),我需要看到等位基因的次数。什么是转换频率数据的最佳方法是每个等位基因(整数)的最准确计数。 R中有任何功能吗?在excel中,我尝试过综合,舍入和回合:
*Allele* *Frequency*
Allele1 0.228
Allele2 0.195
Allele3 0.099
Allele4 0.04
Allele5 0.00167
Allele6 0.00127
Allele7 0.027
Allele8 0.117
Allele9 0.016
Allele10 0.027
Allele11 0.00031
Allele12 0.00725
Allele13 0.134
Allele14 0.058
Allele15 0.036
Allele16 0.012
答案 0 :(得分:0)
随机数据集:
category <- letters[1:10]
freq <- runif(10, 0.1, 0.9)
df <- data.frame(category, freq)
category freq
1 a 0.3631365
2 b 0.7180477
3 c 0.2827611
4 d 0.8640651
5 e 0.7192371
6 f 0.5747942
7 g 0.3487860
8 h 0.4138134
9 i 0.3984429
10 j 0.1522889
您可以使用mapply在列中应用函数:
freqCount <- function(freq, sampleSize){
result <- freq * sampleSize
return(result)
}
round(mapply(freqCount, df$freq, sampleSize = nrow(df)))
例如会返回;
[1] 4 7 3 9 7 6 3 4 4 2
你永远不会得到一个等于1242890的总计数(来自你的评论),只是因为得到这个的唯一方法是将每个频率计数四舍五入到正好1.这意味着每个等位基因都会被看到一次。考虑到您乘以大样本量,即使非常小的频率也会非常大。即使样本数据集中的最小频率也是round(1242890*0.00033) = 410
。即使数据集中的所有频率都是0.00001,也会导致round(1242890*0.00001)*1242890 = 14914680
的计数。
chisq.test()
和fisher.test()
,您不需要对任何内容进行舍入。虽然,这可能是一个完全不同的主题,但我对此的了解有限。