martes, 31 de marzo de 2009

R: Factores.

Un factor es un vector utilizado para especificar una clasificación discreta de los elementos de otro vector de igual longitud. En R existen factores nominales y factores ordinales.

Usar variables aparentemente numéricas en análisis estadísticos es un grave error, es por ello, que este capítulo intentará explicar los dos tipos de factores que podemos usar en R.

Factores Nominales.

Para saber que es exactamente este tipo de factores, se empleará un ejemplo ilustrativo. Suponemos que tenemos un vector de 10 personas de Jerez de la Frontera y dicho vector, contiene los puestos de trabajo con sus iniciales:

> Trabajo <- c("pol", "com", "ing", "bom", "bom", "com", "com", "pol", "ing", "com")

Para convertir dicho vector, Trabajo en un factor para su posterior análisis estadístico, usamos la función ya definida en R, factor():

> FactorTrabajo <- factor(Trabajo)

Y para ver que ha sucedido:

> FactorTrabajo
[1] pol com ing bom bom com com pol ing com
Levels: bom com ing pol

Vemos que directamente ha discriminado los niveles que existen en el vector. Otra forma para ver que niveles tiene un factor, podemos usar la función levels():

> levels(FactorTrabajo)
[1] "bom"."com"."ing"."pol"

Y bien, llegados a este punto, ya sabemos como convertir un vector en un factor, ahora veremos su utilidad que está orientada al análisis estadístico.

Suponemos que tenemos otro vector, con los ingresos de los anteriores trabajadores (Aunque tengan el mismo oficio pueden tener rangos diferentes, es por ello, los distintos sueldos):

> Ingresos <- c(1100, 800, 2000, 1600, 1400, 900, 950, 1300, 2300, 1000)

Pues para hacer un estudio estadístico, por ejemplo, el más sencillo, la media, disponemos de la función tapply():

> MediaIngresos <- tapply(Ingresos, FactorTrabajo, mean)
> MediaIngresos
...bom.....com....ing......pol
1500.0...912.5..2150.0.1200.0

Podemos observar que automáticamente se ha realizado el estudio estadístico de la media. éstos tipos de estudio, sólo son posibles si el vector "etiqueta", es decir, el que representa de alguna forma los niveles o clases del estudio, en nuestro caso los oficios de los trabajadores, deben ser un factor.

Factores Ordinales.

Los niveles de los factores se almacenan en orden alfabético, o en el orden en que se especificaron en la función factor() si ello se hizo explícitamente.

A veces existe una ordenación natural en los niveles de un factor, orden que deseamos tener en cuenta en los análisis estadísticos. La función ordered() crea este tipo de factores y su uso es idéntico al de la función factor().

Convertir un Factor en Numérico o Carácter.

A veces, es útil que un vector que haya sido declarado factor, volvamos a obtenerlo como numérico o como carácter.

Por ejemplo, tenemos el siguiente vector numérico:

> x <- c(101, 88, 666)

Lo convertimos en factor:

> y <- factor(x)

Y ahora queremos recuperar en su estado inicial, es decir, como numérico:

> as.numeric(as.character(y))
[1] 101 88 666

No se puede emplear directamente la función as.numeric() ya que no se codificarán de forma correcta los niveles del factor.



Los factores creados por la función factor() los denominaremos nominales o simplemente factores cuando no haya lugar a confusión, y los creados por la función ordered() los denominaremos ordinales.

En la mayoría de los casos, la única diferencia entre ambos tipos de factores consiste en que los ordinales se imprimen indicando el orden de los niveles. Sin embargo los contrastes generados por los dos tipos de factores al ajustar Modelos lineales, son diferentes.

Y para concluir, la función tapply() puede realizar más operaciones aparte de la media, es más, dicha función es bastante útil, es por ello que se recomienda que se profundice en la ayuda para ampliar conocimientos de ésta y de las otras que aparecen en este capítulo.

0 comentarios: