p********y 发帖数: 15 | 1 我有13个样本,每个样本2000+的count data,现在要对每个样本算出的一个index求
bootstrap confidence interval,bootstrap的时候有个限制条件,就是每个样本
resample之后的total count总和要绝对等于一个数,我现在用R sample() 跑while
loop 加限制条件生成新的data,用新data算index再找CI,但这样很慢,题目要求要抽
100,000个,我跑1000个就要180多秒了,如果一定要用R跑,有什么好办法可以快点?
我还会Perl还没想过Perl怎么写。请大神们支招! |
s*r 发帖数: 2757 | 2 you do not have weibi...so i just answer briefly
perl could be 10 times faster than r
you need a unix cluster to do this |
p********y 发帖数: 15 | 3
不好意思,我好穷。。。追问一下,Perl为什么快呢,用cluster是说每个样本单独作
为一个job跑,同时跑所以快?
【在 s*r 的大作中提到】 : you do not have weibi...so i just answer briefly : perl could be 10 times faster than r : you need a unix cluster to do this
|
S******y 发帖数: 1123 | 4 Can you share your R code? |
p********y 发帖数: 15 | 5 mat=matrix(0,ncol=100000,nrow=nrow(OTU_matrix))
i=0
while (i<=100000){
new=sample(OTU_matrix[,1],nrow(OTU_matrix),replace=T)
if (sum(new)==4190){
mat[,i]=new
i=i+1
}
}
OTU_matrix每列是我要抽的样本,mat是我要生成的resampling data |
p********y 发帖数: 15 | 6 对新data算我要的参数很快,就是生成新data很慢,试着跑了这个100,000的,需要五
个小时才能跑完 |
s*r 发帖数: 2757 | 7 r 不兴用循环 google key word: apply plyr
【在 p********y 的大作中提到】 : mat=matrix(0,ncol=100000,nrow=nrow(OTU_matrix)) : i=0 : while (i<=100000){ : new=sample(OTU_matrix[,1],nrow(OTU_matrix),replace=T) : if (sum(new)==4190){ : mat[,i]=new : i=i+1 : } : } : OTU_matrix每列是我要抽的样本,mat是我要生成的resampling data
|
p********y 发帖数: 15 | 8 我发现慢的原因主要是有的样本里的数有很多的零,数值也不大,有的最大count就200
多,这样很难满足总和等于4190的条件,就要一直resample... |
s*r 发帖数: 2757 | 9 有了这样一个限制条件,resample出来的distribution还是原来的population吗
有限制条件的话,sample到N-1的时候,就要看剩下的数里面有那个可以让总合等于
4190的么。。。
也许Dynamic Programming: Combination Sum对你有帮助
200
【在 p********y 的大作中提到】 : 我发现慢的原因主要是有的样本里的数有很多的零,数值也不大,有的最大count就200 : 多,这样很难满足总和等于4190的条件,就要一直resample...
|