Как совместить 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 школ, варьируя n от 1 до 25, чтобы получить следующий результат:

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

Я использую tapply(), чтобы найти ответ n=1 для всех 200 школ.

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

и я использую repilcate(), sum() и sample() для имитации 1000 комбинаций сложения двух весов вместе.

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

У меня возникли проблемы с объединением двух вышеперечисленных, чтобы воспроизвести сумму и образец в функции tapply.

Пожалуйста, порекомендуйте.

Я новичок в Р.


person user1407670    schedule 21.05.2012    source источник


Ответы (1)


Поместите его в функцию и используйте эту функцию с 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

чтобы получить некоторые идеи о том, что еще возможно.

person Joris Meys    schedule 21.05.2012
comment
Спасибо, это будет только пример в школе, которая указана школьным кодом? - person user1407670; 21.05.2012
comment
Это было то, что вы хотели, верно? Так что да, он делает то, что вы просили. Попробуйте прочитать код: вы применяете функцию Myrepfun к весу вектора, разделенному в соответствии со школьным кодом вектора. Таким образом, tapply каждый раз передает только веса определенного schoolcode в качестве аргумента x функции Myrepfun. - person Joris Meys; 21.05.2012
comment
Великолепно! Спасибо, есть ли способ изменить от n = 2 до n = 25 путем итерации? (может быть цикл for?) - person user1407670; 21.05.2012