首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将频率数据转换为样本数(整数)的最佳方法是什么?

将频率数据转换为样本数(整数)的最佳方法是什么?
EN

Stack Overflow用户
提问于 2016-03-19 05:01:26
回答 1查看 81关注 0票数 0

我有一个基因不同等位基因的频率数据和总样本数(1242890)。为了进行统计检验(卡方检验、费雪检验等),我需要知道等位基因出现的次数。转换频率数据的最好方法是什么?每个等位基因(整数)的计数最准确。在R中有什么函数吗?在excel中,我尝试过舍入、舍入和舍入:

代码语言:javascript
复制
*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
EN

回答 1

Stack Overflow用户

发布于 2016-03-19 06:09:37

随机数据集:

代码语言:javascript
复制
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跨列应用函数:

代码语言:javascript
复制
freqCount <- function(freq, sampleSize){
  result <- freq * sampleSize

  return(result)
}

round(mapply(freqCount, df$freq, sampleSize = nrow(df)))

例如,会返回;

代码语言:javascript
复制
  [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(),不需要对任何内容进行舍入。然而,这可能是一个完全不同的主题,我在这方面的知识有限。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36094146

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档