【问题标题】:P Value permutations in RR中的P值排列
【发布时间】:2019-03-04 14:11:40
【问题描述】:

我是 r 的新手

我正在 R 中执行置换测试以确定某些 SNP 的出现百分比是否是偶然的 我的数据设置了一个包含 52K 值的向量 我按原样通过 Loop 进行测试:

R1_H <- R1[,12] #extract the vector from a dataframe

niter=100000       #set the number of iterations
out <- rep(0,length(R1_H))

for (i in 1:niter){
out = out + (R1_H <= sample(R1_H)) #compare my ocurrence against a 
                                 #sample of the entire population
}

pvalue=out/niter #determine the pvalue
R1$pvalueF = pvalue #print the pvalue

问题是这种方式极其缓慢且耗费资源。 有人认为更有效的方法吗? 非常感谢

【问题讨论】:

    标签: r loops permutation


    【解决方案1】:

    我不完全确定你在做什么。但有几点。 R 具有内置的 replicate 函数,该函数是专门为这类事情设计的。您可以使用的一种选择是:

    my_vector <- replicate(niter, 
                       expr = (R1_H <= sample(R1_H, replace = T)))
    

    这将重复expr niter 次。在这种情况下,它将进行替换采样并返回一个矩阵,其中包含 R1_H 和 10k 列中的数据点数。然后你可以这样做:

    mean(colMeans(my_vector))
    

    获取您尝试报告的“pvalue”。

    【讨论】:

    • 感谢您的回答。
    • 感谢您的回答。我们想确定单个观察值的出现(即由 52K 观察值组成的总体中“阳性”出现的数量是否是偶然的。为此,“出现”比偶然的大多少倍整个人口的样本。这是我们的 P 值。您的解决方案很有趣,但它生成的向量太大,无法在我的内存中分配
    • 我会去看看 thomasleeper.com/Rcourse/Tutorials/permutationtests.html> 我想这可能是你正在寻找的答案
    猜你喜欢
    • 2016-07-27
    • 1970-01-01
    • 2020-08-15
    • 2015-12-20
    • 2014-06-30
    • 2013-10-04
    • 2017-11-11
    • 2013-10-12
    • 2014-06-23
    相关资源
    最近更新 更多