我有一个基因不同等位基因的频率数据和总样本数(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发布于 2016-03-19 06:09:37
随机数据集:
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计数。
话虽如此,你为什么要舍入呢?这意味着你会失去一点准确性。虽然我肯定不是统计学专家,但在不准确的数据上执行统计测试似乎...真奇怪。据我所知,要在R中运行chisq.test()和fisher.test(),不需要对任何内容进行舍入。然而,这可能是一个完全不同的主题,我在这方面的知识有限。
https://stackoverflow.com/questions/36094146
复制相似问题