miércoles, 25 de junio de 2014

Importar matrices de datos y crear un directorio de trabajo

Hemos aprendido a crear matrices de datos en R. Aunque es un procedimiento sencillo, en muchas ocasiones nos encontramos con que tenemos una matriz que ha sido creada usando otro software (Excel, SPSS, etc.). Sería muy engorroso tener que copiar los datos manualmente a R. Para evitar esto, podemos importar la matriz, es decir, que pasemos esos datos directamente a R. La instrucción que le daremos a R dependerá de la extensión de los datos que hemos guardado. Las dos mejores opciones para poder leer matrices en R es haberla guardado previamente como texto delimitado por tabulaciones (.txt en Excel y .dat en SPSS) o como texto delimitado por comas (.csv). En el primer caso, la instrucción seria como sigue:

Matriz <- read.delim(“datos.extension”, header=True)
Con esta instrucción le estamos pidiendo a R que cree un objeto llamado matriz. Esta matriz estará basada en la matriz datos.extension. En este caso, ya que la matriz ha sido guardada previamente mediante texto delimitado por tabulaciones, usamos la función read.delim() y como extensión o .txt o .dat. La última parte de la instrucción (header=True o header=T), le dice a R que la primera fila de los datos contiene el nombre de las variables. En el caso de que hayamos usado un texto delimitado por comas la función sería similar con la diferencia de que usaríamos en vez de la función read.delim(), la función read.csv().  Otra diferencia es que en este caso la extensión del archivo siempre sera .csv.

Sin embargo, es importante que la matriz que queremos cargar en R este en nuestro directorio de trabajo. Este concepto hace referencia al lugar de muestro ordenador donde R buscara los datos. Así que lo primero que deberíamos hacer cuando abrimos R es establecer nuestro directorio de trabajo. Allí mismo almacenaremos los datos que queremos cargar. Para establecer nuestro directorio ejecutamos la siguiente instrucción:

setwd(“ruta”)
Por ruta entendemos donde exactamente queremos nuestro directorio. Imaginemos que queremos establecer este directorio en la unidad D, en la carpeta R. Para ello usaríamos la siguiente instrucción:

setwd("D:/R")
Por último, si queremos comprobar cuál es nuestro directorio de trabajo, lo podemos hacer con la siguiente instrucción:

getwd()
A partir de la próxima entrada empezaremos a cargar las matrices. 

miércoles, 18 de junio de 2014

Diseños intrasujetos y mixtos

Vamos a imaginar otro experimento con un diseño un poco diferente. Imaginemos que queremos conocer la importancia de ciertas áreas cerebrales en la memoria espacial. Para ello tenemos cuatro grupos de ratas a las que se les ha diseccionado una parte diferente del cerebro a cada grupo (Grupo1, Grupo2, Grupo3 y Grupo4). Además tenemos un quinto grupo a la que no se le realizo ninguna disección (Grupo5). El experimento consistía en tres diferentes fases. Se cronometra el tiempo (en segudos) que una rata tarda en recorrer un laberinto (Tiempo_1). Las ratas del grupo 1, 2, 3 y 4 fueron sometidas cirugía de disección, mientras que a las del grupo 5 se les sometió  a una pequeña cirugía, pero sin disección. Se volvía a cronometrar el tiempo que las ratas tardaban en cruzar el laberinto (Tiempo_2). En la siguiente tabla se puede ver la matriz de datos:


El diseño de este experimento es un poco diferente al anterior. Tenemos la variable intersujetos grupo, la cual toma cinco valores diferentes (los diferentes grupos). Por otro lado, tenemos la variable tiempo que es una variable intrasujetos (todos los sujetos pasan por las diferentes condiciones de esta variable) con dos niveles: Tiempo_1 y Tiempo_2. Este tipo de diseño recibe el nombre de diseño mixto. Vamos a introducir los datos en R.

Tenemos la variable cualitativa nominal Grupo. Como hemos visto anteriormente, introducirla en R es sencillo, pero tenemos que tener en cuenta que hay 4 ratas en cada grupo, por lo que la mejor opción es usar la función rep(): 

Grupo <- c(rep(1,4), rep(2,4), rep(3,4), rep(4,4), rep(5,4))
Una vez que hemos introducido la variable Grupo, tenemos que factorizarla. Como ya vimos anteriormente, la instrucción es la siguiente

Grupo <- factor(Grupo, levels = c(1,2,3,4,5), labels = c("Grupo1", "Grupo2", "Grupo3", "Grupo4", "Grupo5"))
Como en el caso anterior mediante la instrucción c(1,2,3,4,5) le hemos dicho a R los niveles o valores que tiene nuestra variable grupo. Un pequeño truco para simplificar es usar la siguiente instrucción c(1:5) que literalmente significa todos los valores entre 1 y 5. De esta forma, la anterior instrucción quedaría simplificada como sigue:

Grupo <- factor(Grupo, levels = c(1:5), labels = c("Grupo1", "Grupo2", "Grupo3", "Grupo4", "Grupo5"))
Ya hemos introducido la variable grupo. La siguiente variable es la variable Tiempo. Esta variable es numérica y tiene dos niveles: Tiempo_1 y Tiempo_2. Sin embargo, a diferencia de la variable Grupo, estamos ante una variable intrasujeto, ya que todos los participantes pasan por todas las condiciones de esta variable. Esto anterior lo tenemos que tener en cuenta en R: si miras la tabla anterior, en una variable intersujeto los diferentes niveles son colocados según las filas de la tabla, sin embargo, los diferentes niveles de una variable intrasujetos son colocados en diferentes columnas. De esta manera, nos aseguramos que todos los sujetos pasan por cada una de las condiciones de esta variable. Para realizar esto anterior en R, tendríamos que crear dos diferentes objetos en R: una con cada condición de la variable Tiempo. Así para Tiempo_1 seria:

Tiempo_1 <- c(20,22,19,22,25,20,23,22,19,25,22,24,22,23,21,20,24,22,23,18)
Y para tiempo tiempo_2:

Tiempo_2 <-c(18,18,20,19,22,13,12,15,17,16,19,20,17,12,19,13,14,12,11,9)
Una vez hecho esto, pasamos a crear nuestra matriz de datos

Datos <- data.frame(Grupo, Tiempo_1, Tiempo_2)
Un pequeño apunte: en este caso, y a diferencia de lo que vimos en la entrada anterior, hemos factorizado la variable grupo antes de introducirla en la matriz de datos. Esto es todo por hoy. 

PD: Si quieres descargar el script que hemos usado, haz click aquí 


lunes, 16 de junio de 2014

Factorizando variables

En nuestra anterior entrada vimos cómo crear una matriz de datos que siga la lógica de un diseño intersujetos. En este tipo de diseño, cada sujeto sólo participa en una de las condiciones. Si recordamos el ejemplo, queríamos comprobar si la hormona oxitocina mejoraba el reconocimiento de rostros. Para ello teníamos un grupo de 10 hombres y 10 mujeres que fueron expuestos o bien con un tratamiento placebo (condición control) o bien con un tratamiento de  oxitocina (condición experimental). Cada participante recibe exclusivamente uno de los tratamientos (click aquí para descargar el script de la anterior entrada). 

Una vez que cargues el script, podrás ver que tenemos dos variables nominales (tratamiento y sexo). Estas variables que representan categorías diferentes entre sí, pero carecen de significado numérico. Dicho de otro modo, los números asignados a cada uno de los componentes de una variable nominal, simplemente representan diferentes grupos. En el caso de la variable sexo, el uno representa al grupo masculino y el dos al grupo femenino. Sin embargo, a no ser que especifiquemos lo contrario, R tratará a las variables como numéricas. Por dicha razón, tenemos que factorizarla, es decir, indicarle a R que esta variable es nominal y que, por lo tanto, estos números solo representan categorías. La instrucción general que le tenemos que dar a R es la siguiente:

factor(variable, levels =c(a,b,c…), labels=c("label1", "label2"…))
Veamos paso a paso esta instrucción. Lo primero es indicarle a R qué variable queremos factorizar. En nuestro caso es la variable Sexo de la matriz de datos Datos, por lo que la instrucción seria factor(Datos$Sexo). Sin embargo, también tenemos que indicarle a R cuales son los niveles de nuestra variable. En este caso, tenemos 1 y 2, por lo que sería levels=  c(1,2). Por último, le añadimos las etiquetas correspondientes a 1 y 2, en este caso masculino y femenino, respectivamente: labels=c("Masculino", "Femenino"). Si unimos la anterior instrucción y la asignamos a la variable Sexo de la matriz Data, seria:

Datos$Sexo <- factor(Datos$Sexo, levels = c(1,2), labels= c("Masculino", "Femenino"))
Al igual que el objeto Sexo, también tenemos que factorizar la variable Tratamiento. La instrucción seria como sigue:

Datos$Tratamiento <-factor(Datos$Tratamiento, levels = c(1,2), labels=c("Oxitocina", "Placebo"))
Y de esta forma ya sabe R que estas dos variables son nominales. Hasta la próxima!

PD: click aquí para descargar el script de esta entrada. Recuerda hacer click en la esquina superior derecha para saltar la publicidad. 
 

martes, 10 de junio de 2014

Diseños intersujetos

Vamos a ver ejemplos un poco más complejos que los vistos hasta ahora. Imaginemos que queremos comprobar si la Oxitocina (una hormona) tiene algún efecto en el reconocimiento de caras. Para ello hemos elaborado un experimento con un diseño intersujeto (los sujetos solo participan en una condición experimental) en el que han participado 10 hombres y 10 mujeres. De cada grupo, a 5 se les administro oxitocina intranasal mientras otros recibieron un placebo. Todos los participantes cumplimentaron un test que evaluaba su capacidad para reconocer caras. La puntuación máxima que se puede obtener en este test es de 20. En la siguiente tabla se pueden ver las puntuaciones de cada grupo.


Vamos a introducir estos datos en R. La primera columna hace referencia al número de sujeto. Cuando creemos la matriz, R dará estos números automáticamente, por lo que no hace falta que los introduzcamos nosotros. La siguiente variable es Sexo. La mitad de nuestros sujetos son de género masculino y la otra mitad de género femenino. Esta variable es de tipo cualitativa nominal, es decir, representa categorías que son diferentes entre sí,  pero tales categorías no son medibles. Tan solo podemos decir que son diferentes entre sí. Aunque estas variables no sean medibles, si se representan con números. Sin embargo estos números tienen un carácter totalmente arbitrario y sólo indican al grupo al que pertenece un determinado sujeto. Imaginemos que asignamos el número 1 para el género masculino y el número 2 para el femenino. Podemos crear el objeto Sexo con la variable c():

Sexo <- c(1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2)

Es muy tedioso tener que repetir tantas veces los mismos números. En situaciones como esta podemos usar la función rep(x,y), siendo x lo que queremos repetir e y el número de veces  que queremos que se repita. En el caso que nos ocupa, la instrucción seria como sigue:

Sexo <- c(rep(1,10), rep(2,10))

Con esta instrucción le estamos pidiendo a R que cree el objeto Sexo usando la función c(). Dentro de esta función, usamos la función rep() dos veces: la primera repite el numero 1 un total de diez veces, y la segunda repite el numero 2 otras diez veces. 

La siguiente variable es Tratamiento que, al igual que la variable Sexo, es también nominal. Imaginemos que le asignamos el valor 1 al tratamiento con oxitocina y 2 al placebo. Como se puede ver en la tabla, los primeros cinco participantes recibieron oxitocina, los siguientes 5 recibieron placebo, los siguientes 5 oxitocina y los últimos 5 placebo. Este orden tenemos que respetarlo al incluir nuestra nueva variable. La instrucción seria como sigue:

Tratamiento <-c(rep(1,5), rep(2,5),rep(1,5),rep(2,5))

Con esta instrucción le estamos diciendo a R que cree el objeto Tratamiento con la función c() y que los primeros cinco elementos de este objeto sean un 1, los segundos cinco sean un 2, los siguientes cinco elementos un 1 y, finalmente, los cinco últimos elementos un 2. De esta forma nos aseguramos que el orden de los elementos de nuestro objeto es igual que en la tabla. 

Ahora solo nos faltaría por incluir la variable puntuación. Como hemos hecho en otras ocasiones, usaremos la función c():

Puntuacion <-c(18,18,20,19,20,13,12,15,17,16,19,20,17,12,19,13,14,12,11,9)

Una vez que hemos introducido las variables, podemos unirlas en una matriz de datos:

Datos <-data.frame (Sexo, Tratamiento, Puntuacion)
En la siguiente entrada veremos cómo decirle a R que considere nuestras variables nominales como tales. Hasta la próxima!

PD: click aquí para descargar el script de esta entrada. Recuerda hacer click en la esquina superior derecha para saltar la publicidad.

jueves, 5 de junio de 2014

Un pequeño truco: la función attach ()

En esta entrada voy a tratar de explicar una función que, aunque reconozco que no uso mucho, es muy útil. En la anterior entrada vimos una matriz que contenía los datos correspondientes  a los ingresos económicos de cinco amigos en el 2013(accede al script de la anterior entrada haciendo click aquí). Si quisiéramos acceder a la variable tendríamos que teclear lo siguiente:
Amigos$Ingresos2013
Es decir, primero tenemos que escribir el nombre de la matriz de datos seguido de $ y del nombre de la variable. Cuando tenemos nombres demasiado largos esto puede resultar un poco tedioso. Para facilitarnos el trabajo podemos usar la función attach (). Esta función la tendremos que usar sobre una matriz de datos y hace que podamos acceder directamente a  las diferentes  variables que componen la matriz de datos. Es decir, si ejecutamos esta función sobre nuestra matriz de datos amigos:


attach(Amigos)

tan solo tendríamos que nombrar la variable a la que queremos acceder sin necesidad de nombrar la matriz de datos de la que proviene:
 

Ingresos2013

Si quisiéramos calcular la diferencia entre los sueldos de 2013 y 2010, ahora lo haríamos simplemente con la siguiente instrucción:

Ingresos2013-Ingresos2013

Esto nos facilitara el trabajo especialmente cuando tenemos variables con nombres muy largos. En la próxima entrada, veremos matrices un poco más complejas y nos iremos metiendo un poco más a fondo con los diferentes diseños de investigación. Hasta la próxima!

PD: Si quieres descargar el script usado en esta entrada, haz click aquí. Recuerda hacer click en la esquina superior derecha para evitar la publicidad.

miércoles, 4 de junio de 2014

Algunas operaciones sencillas con matrices de datos

En la anterior entrada vimos cómo crear una matriz de datos a partir de varias variables. Si no tienes esa matriz de datos haz click aquí para descargar el script, puesto que vamos a seguir usándola en esta entrada. Imaginemos ahora que queremos añadir a nuestra matriz de datos los ingresos mensuales de nuestros amigos en los años 2013 y 2010. Empecemos con los ingresos en el 2013. Imaginemos que estos son 1500, 1800, 1300, 1000, 1200, respectivamente. Para añadir este nuevo objeto a nuestra matriz usaremos la función c() de la siguiente forma:

Amigos$Ingresos2013 <- c(1500, 1800, 1300, 1000, 1200)

De la misma manera, si los ingresos de nuestros amigos  en 2010 fueron 1100, 1500, 900, 750, 900, respectivamente:

Amigos$Ingresos2010 <- c(1100, 1500, 900, 750, 900)

Con las anteriores funciones le estamos pidiendo a R que cree dos objetos dentro de la matriz de datos amigos. Si queremos ver cómo nos ha quedado nuestra matriz de datos, tan solo tendremos que escribir el nombre de la misma (Amigos). Si tan solo queremos ver los objetos que tiene nuestra matriz, podemos hacerlo mediante la siguiente instrucción:

names(Amigos)

Podemos hacer algunas operaciones aritméticas entre los objetos que forman parte de la matriz y guardarlas dentro la misma matriz. Por ejemplo, tenemos los sueldos mensuales de nuestros amigos, pero no sus sueldos anuales. Ya que un año tiene 12 meses, si multiplicamos el sueldo mensual por 12 obtendremos el sueldo anual. Esto en R lo podemos hacer de la siguiente manera:

Amigos$IngresosAnuales2013 <- Amigos$Ingresos2013*12
Amigos$IngresosAnuales2010 <- Amigos$Ingresos2010*12

Con estas dos instrucciones, hemos creado dos nuevas variables dentro de nuestra matriz de datos: IngresosAnuales2013 e IngresosAnuales2010. Estas dos variables se obtienen multiplicando por 12 los ingresos mensuales de 2013 y 2010, respectivamente. 

Imaginemos ahora que queremos saber si el sueldo de nuestros amigos en este año es mayor que el suelo de 2010, además queremos guardar la diferencia entre ambos sueldos en una nuevo objeto llamado DifSueldos. Para ellos escribimos la siguiente instrucción:

Amigos$DifSueldos <- Amigos$Ingresos2013-Amigos$Ingresos2010

Con esta instrucción, hemos creado el objeto DifSuelods dentro de nuestra matriz de datos. Dicho objeto es igual a la diferencia entre los objetos Ingresos2013 e Ingresos2010. En resumen, es posible crear nuevos objetos a partir de otros ya existentes. Para ello usaremos los diferentes operadores: + para la suma, - para la resta, * para la multiplicación y / para la división. Más adelante volveremos sobre este tema.

PD: Puedes descargar el script que hemos usado en esta entrada haciendo click aquí. Recuerda hacer click en la esquina superior derecha para evitar la publicidad