Medidas características

Como dijimos anteriormente, la función summary() proporciona información básica acerca de una variable. También acepta como argumento un data.frame, en cuyo caso la salida informará acerca de todas las variables contenidas en el mismo.
Otras funciones nos dan medidas estadísticas de forma aislada. Ya comentamos algunas de ellas (mean(),median(),max(),min(),sum(), var()). Otras son range(), que nos muestra los valores mínimo y máximo, pero no el rango; sd(), que devuelve la desviación estandard; y quantile(), que nos va a permitir dividir la variable en partes iguales para obtener los cuartiles, deciles o percentiles. Veamos su funcionamiento para la variable IN
quantile(resultados$IN,probs=1:10/10,na.rm=T)

 10% 		 20% 		30% 		40% 		 50% 		60% 		 70% 		80% 		 90% 		100%      

0 0 0 1 2 3 4 5 7 10
Como vemos, con la función hemos obtenido los diez deciles de la variable.

Sin embargo, no existe ninguna función que nos proporcione un listado o una tabla con todas las medidas estadísticas que puedan interesarnos. De lo que sí dispone R (por ser en definitiva un lenguaje de programación) es la posibilidad de editar personalmente operaciones aritméticas y de crear funciones que realicen determinadas operaciones. En el siguiente ejemplo se puede ver cómo se crea una función que nos devuelva la media, suma, desviación estandard, variancia y rango de una variable. Una vez creada, podremos aplicarla a cualquier variable.
estadisticos <-function(x){
+ cat("\n","La media es",mean(x),"\n")
+ cat("\n","La suma es",sum(x),"\n")
+ cat("\n","La desviacion estandard es",sd(x),"\n")
+ cat("\n","La variancia es",var(x),"\n")
+ cat("\n","El rango es","[",range(x),"]","\n") + }5.1

Las funciones deben tener un nombre, en este caso estadisticos, y su cuerpo va encerrado entre llaves ({}) . En el ejemplo, la función es una sucesión de funciones cat() (que encadena secuencias decaracteres) y las funciones estadísticas que queremos obtener. Por supuesto, pueden añadir todas las que deseen...
Una vez creada, se puede aplicar a cualquier variable; por ejemplo cars$speed. Así,
estadisticos(cars$speed)
devuelve
La media es 15.4
La suma es 770
La desviacion estandard es 5.287644
La variancia es 27.95918
El rango es [ 4 25 ]
Esta función estará disponible en el espacio de trabajo siempre y cuando sea guardada (por ejemplo, al abandonar R, comunicando que deseamos guardar las modificaciones) y no sea borrada del mismo (con rm(estadisticos).

Si queremos que la función esté disponible en cualquier otro espacio de trabajo, podemos introducirla en el fichero de funciones de R. Otra posibilidad sería crear un paquete con nuestras propias funciones, pero esta posibilidad de momento no vamos a considerarla.

Una de las ventajas de R es que es software libre, de modo que se distribuye con el código fuente en formato editable. De esta manera, podemos modificar el programa según nuestros intereses. En este caso, lo que nosotros vamos a hacer es introducir una función nueva, creada por nosotros mismos, en el paquete base de R.
Para ello (en Linux) no tenemos más que abrir el fichero /usr/lib/R/library/base/R/base (la localización puede variar en función de la distribución de Linux) con cualquier editor de texto y teclear la función tal y como lo hemos hecho en R. Por supuesto, debemos tener permiso de escritura sobre el fichero, cuyo propietario será por defecto root. Al guardar los cambios, la nueva función estará disponible siempre que arranquemos R ya que el paquete base se carga automáticamente.

Como hemos adelantado anteriormente, en R también podemos construir expresiones algebráicas que nos permiten calcular medidas no implementadas en los paquetes con los que trabajemos. Por ejemplo, si necesitamos conocer la media geométrica de una variable, sabiendo que se define como

\begin{displaymath}
G=\sqrt[n]{x_{1} \cdot x_{2} \ldots \cdot x{n}}
\end{displaymath}

podemos introducir (en el caso de cars$dist)
prod(cars$dist)^(1/length(cars$dist))
donde prod() es la función que calcula el producto de los elementos de un vector y length() devuelve el número de elementos de un vector.
Por supuesto, si vamos a requerir a menudo la media geométrica, podemos construir una función que acepte como argumento cualquier variable. En este caso podría ser
media.geometrica<-function(x) {prod(x)^(1/length(x)) }
Así,
media.geometrica(cars$dist)
devolvería
[1] 34.32615
2007-02-12