¿Cómo combino tapply con una función que incluye replicar, muestrear y sumar?

Tengo un archivo csv que tiene detalles sobre los estudiantes y sus pesos de diferentes escuelas.

p.ej

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

Me gustaría muestrear repetidamente n pesos con reemplazo, sumar mis n pesos y luego calcular el cuantil 95 de la distribución resultante. Me gustaría hacer esto para los estudiantes dentro de cada una de las 200 escuelas, variando entre 1 y 25 para terminar con el siguiente resultado:

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

Estoy usando tapply() para encontrar la respuesta n=1 para las 200 escuelas

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

y estoy usando replilcate(), sum() y sample() para simular 1000 combinaciones de sumar dos pesos.

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

Tengo problemas para combinar los dos anteriores para replicar la suma y la muestra dentro de la función tapply.

Por favor avise.

Soy un principiante en R.

preguntado el 21 de mayo de 12 a las 11:05

1 Respuestas

Póngalo en una función, y use esa función con tapply(), p.ej:

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)

Esto le da el cuantil 0.95 para cada escuela. Si está pensando en hacer bootstrapping, es posible que desee comprobar:

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

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

para obtener algunas ideas de qué más es posible.

contestado el 21 de mayo de 12 a las 12:05

Gracias. ¿Será esa solo una muestra dentro del schhol especificado por el código escolar? - user1407670

Eso era lo que querías, ¿verdad? Así que sí, hace lo que pediste. Intenta leer el código: aplicas la función Myrepfun al peso del vector, dividido de acuerdo con el código escolar del vector. Entonces tapply pasa cada vez sólo los pesos de un determinado schoolcode como el argumento x de la función Myrepfun. - joris meys

¡Brillante! Gracias, ¿hay alguna manera de variar de n = 2 a n = 25 iterando? (¿tal vez un bucle for?) - user1407670

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.