|
Estadística básica con R
Publicado el: 05-07-2008 @ 08:55 am
Para tener una idea de lo que se puede hacer con el lenguaje R es bueno tener a la mano un ejemplo. A continuación incluyo una matriz (25x20) de 500 datos que representan el peso (en Kg) de cerdos en una finca. 35 84 17 41 55 45 62 29 41 20 46 59 15 64 26 60 27 67 68 55 54 32 82 47 72 48 62 45 35 40 46 56 42 64 64 39 32 67 68 46 21 50 40 55 55 52 64 54 63 47 20 56 42 62 50 63 32 63 67 44 88 18 54 66 70 65 64 55 41 47 80 46 46 46 35 16 33 32 66 48 60 30 79 23 34 62 71 55 60 62 46 50 70 42 35 47 41 39 51 57 59 11 60 87 45 29 53 59 58 69 36 80 56 73 33 27 41 49 38 48 10 37 26 60 37 29 53 35 36 78 69 56 59 73 61 35 46 56 41 51 30 65 41 33 69 40 29 42 62 86 72 53 81 59 77 73 60 63 63 54 43 40 65 50 28 50 44 42 70 59 71 24 72 41 34 27 76 33 58 55 65 40 25 22 47 59 44 69 53 34 48 62 64 41 24 65 71 37 58 51 63 85 40 43 62 73 49 71 55 40 51 69 49 34 21 51 72 37 55 53 25 61 39 54 41 29 52 73 28 28 27 43 52 20 29 51 69 46 46 48 46 21 39 26 44 50 49 50 72 51 19 52 52 61 47 45 39 46 44 51 17 43 57 44 30 41 69 43 65 56 44 52 38 73 64 71 32 55 37 51 71 46 63 53 28 41 31 50 54 59 47 28 38 28 43 51 68 52 49 54 83 22 63 19 42 55 80 35 59 70 50 25 61 35 48 41 29 43 58 57 39 53 12 33 42 22 62 22 30 62 50 34 61 40 57 28 68 63 57 48 10 26 29 66 45 65 49 36 63 63 53 42 47 61 60 65 44 60 51 54 45 69 39 57 56 63 64 40 68 59 62 34 44 64 60 76 50 65 63 54 58 81 39 27 47 66 47 58 72 59 36 55 29 68 72 49 34 64 45 58 21 24 65 61 56 44 48 57 71 41 44 58 39 68 20 52 43 32 57 57 31 57 70 66 62 47 48 57 65 37 64 58 42 68 47 52 41 40 54 46 70 32 31 49 50 47 40 63 54 30 67 67 45 44 67 58 38 39 52 57 33 66 43 35 50 18 39 60 56 61 67 67 55 74 42 58 56 57 49 48 68 19 13 21 36 69 66 30 56 69 64 78 55 61 29 55 56 59 51 51
Para comenzar, hay que copiar los datos en un archivo de texto plano (por ejemplo como cerdos.dat) y guardarlo en el directorio de trabajo; que se puede averiguar con: getwd()
Una vez copiado allí, se carga y se asigna a un objeto (por ejemplo a) en la memoria del intérprete con: a <- read.table("cerdos.dat")
¿Qué es el objeto a? Con dim(a) en el intérprete se señalará que es una matriz de 25x20. Supongamos que queremos determinar la media del peso de los 500 cerdos; inmediatamente pensamos en el uso de mean(a). Sin embargo, el resultado es: V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 V14 V15 V16 V17 V18 V19 V20 45.80 44.48 45.24 45.52 48.12 48.36 53.56 49.20 55.48 53.08 51.16 52.16 50.16 54.56 45.80 50.20 47.92 50.56 53.84 51.84
lo que indica que, a efectos del programa, cada columna "representaría" 20 "muestras" de 25 valores de la población total de 500 cerdos. No obstante, eso no fue lo que se quería señalar. La forma matricial es sólo una manera adecuada de representar más cómodamente los datos. Entonces, tenemos que convertir la "matriz" en un vector de 500 datos y asignarlo, por ejemplo, a un objeto (en este caso b). Para invocar cada columna individual del objeto a podemos hacerlo con a[,1], a[,2]...a[,20]. Como R permite opciones de programación (obvio, es un lenguaje) se requiere la función de concatenación c() y la estructura repetitiva for. En este caso usamos: b <- c(a[,1], a[,2]) for(i in 3:20) b <- c(b, a[,i])
El objeto b es nuestro requerido vector de 500 elementos. La media de b, mean(b), arroja ahora el resultado único de 49.852. Otros estadísticos importantes incluirían la desviación estándar, sd(b), el valor máximo, max(b), el valor mínimo, min(b), la amplitud o rango, abs(max(b) - min(b)), entre otros. Por otra parte, R no incluye funciones propias para determinar la asimetría (skewness, el tercer momento) ni la curtosis (el cuarto momento) de los datos por lo que habría que programarlas. Sin embargo, esto tampoco es difícil. Para la asimetría tendríamos: skewness <- sum(((b-mean(b))/sd(b))^3)/(length(b)-3)
y para la curtosis: curtosis <- sum(((b-mean(b))/sd(b))^4)/(length(b)-4)-3
donde length(b) es el número de datos del objeto b. No obstante, las fórmulas anteriores son complicadas y si evitamos el tener que escribirlas siempre que las necesitemos sería lo mejor. Para ello recurrimos a la opción de crear nuestras propias funciones, que es permitido en R, ya que las anteriores sólo estarían disponibles para el objeto b. Generalizando tendríamos: skew <- function(x) { skew <- sum(((x-mean(x))/sd(x))^3)/(length(x)-3) skew }
curtosis <- function(x) { curtosis <- sum(((x-mean(x))/sd(x))^4)/(length(x)-4) - 3 curtosis }
Por tanto, con skew() y curtosis() podremos determinar estos estadísticos para objetos diferentes de b guardando la imagen de nuestra área de trabajo. Otra función interesante es sort(), la cual nos permitiría ordenar la serie de 500 valores de b. Por defecto, se hace en orden ascedente. No obstante, la voy a combinar con la regeneración del despliegue matricial de datos en otro objeto: c. En este caso: c < - sort(b) dim(c) <- c(25,20) c
lo que producirá nuevamente una matriz de 25x20 ordenada ascendentemente. El orden descendente se lograría con sort(b, decreasing=TRUE). Continuará... 
Ultima actualización el 05-07-2008 @ 09:02 pm
|