如何将tapply与包含replicate,sample和sum的函数结合起来?

时间:2012-05-21 10:59:34

标签: r replicate tapply

我有一个csv文件,其中包含有关来自不同学校的学生及其权重的详细信息

e.g。

School  School code Weight  Age Height
A   1   91  15  1.6
A   1   60  16  2.0
B   2   61  14  1.8
B   2   92  13  1.7
B   2   67  14  1.5
B   2   56  15  1.7
C   3   95  16  1.7
C   3   72  17  1.5
A   1   62  15  2.0
A   1   96  15  1.9
D   4   84  17  2.0
D   4   51  17  1.6
D   4   99  18  1.6
C   3   79  17  1.8
C   3   83  17  2.0
C   3   81  16  1.9
D   4   93  17  1.6
D   4   62  18  1.5
B   2   98  14  2.0
B   2   73  13  1.6

我想用替换重复采样n个权重,求和我的n个权重,然后计算得到的分布的第95个分位数。我想为200所学校中的每一所学校的学生做这件事,从1-25变化到最终得到以下结果:

n=1 2   3   4   …   25
School code =1                  
2                   
3                   
4           95th percentile of distrinution     
5                   
…                   
200                 

我正在使用tapply()为所有200所学校找到n = 1的答案

tapply(weight,schoolcode,quantile,probs=0.95)

我正在使用replilcate(),sum()和sample()模拟1000个组合,将两个权重加在一起。

nstudents=replicate(1000, sum(sample(weight, size=n, replace=TRUE)

我无法将上述两者结合起来,以便在tapply函数中复制sum和sample。

请告知。

我是R的初学者。

1 个答案:

答案 0 :(得分:2)

将它放在函数中,并将该函数与tapply()一起使用,例如:

Myrepfun <- function(x,n){
    nstudents <- replicate(1000,sum(sample(x, size=n,replace=TRUE)))
    quantile(nstudents,probs=0.95)
}

tapply(weight,schoolcode,Myrepfun,n=2)

这为每个学校提供0.95分位数。如果您正在考虑自举,您可能需要检查:

http://www.statoo.com/en/publications/bootstrap_scgn_v131.pdf

http://www.statmethods.net/advstats/bootstrapping.html

了解其他可行的方法。