Logo Espacio Linux       
Portada Taller Linux Descargas Foros Buscar Mapa del sitio Ayuda BlogEL
   Iniciar sesión | Registrarse    
 
Principal

Patrocinadores

Anuncios



Boletín Espacio Linux
Las novedades del sitio y el mundo Linux en tu email.


Sitios amigos

Blogs de miembros


Directorio de blogs | Registrarse
Los usuario registrados pueden crear su propio blog y escribir comentarios.

Estadística básica con R


Por: zeka
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




Añadir un comentario
Añadir un comentario
Ver más artículos
Ver más artículos

Comentarios

Por: cdar     Publicado el 05-09-2008 @ 08:06 am

Muy buen articulo... yo no conocia esta herramienta de estadista, me gusto mucho..
Por: zeka     Publicado el 05-09-2008 @ 09:52 am

Gracias. Yo tampoco la conocía; ni una semana tengo de haberla descubierto. El interés surgió porque parte del software estadístico privativo (R es libre) es muy costoso y quería una alternativa confiable y versátil (y que directamente pudiese usar las salidas de mis programas escritos en C++). Lo interesante es que R está basado en objetos y me parece ideal para introducir estos conceptos a los que se inician en la programación orientada a objetos. Como es un lenguaje interpretado es también muy buena opción frente a las calculadoras gráficas de los ambientes de Gnome ó KDE.
Journal ©
 



Copyright | Términos de uso | Política de privacidad | Publicidad | Contáctanos | Blog