1

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

例如

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 以最终得到以下输出:

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 的初学者。

4

1 回答 1

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

了解其他可能的情况。

于 2012-05-21T11:35:42.720 回答