P中的P值排列

问题描述 投票:0回答:1

我是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个回答
0
投票

我不完全确定你在做什么。但有几点。 R具有内置的replicate功能,专门为此类设计而设计。您可以使用的一个选项是:

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

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

mean(colMeans(my_vector))

获取您要报告的“pvalue”。

© www.soinside.com 2019 - 2024. All rights reserved.