1 Introducción

Este trabajo es una colección de fórmulas, técnicas y métodos estadísticos desarrollados para usar en el campo de la Ecología. Aquí se detalla cómo se pueden analizar los datos ecológicos, desde el muestreo hasta el modelado, y desde los individuos hasta los ecosistemas. Teniendo en cuenta la fuerza y debilidad de las técnicas estadísiticas, se sintetizan las herramientas estadísiticas actuales, presentándolas de manera simplicada y aplicada para que sean entendidas por la mayoría. Me uno al objetivo de James y McCulloch (1990):

The objective of the present review is to help the researcher navigate between the Scylla of oversimplication, such as describing complex patterns with univariate analyses, and the Charybdis of assuming that patterns in data necessarily reect factors in nature, that they have a common cause, or, worse, that statistical methods alone have sorted out multiple causes . (James y McCulloch, Annu. Rev. Ecol. Syst. 1990).
1.1 ¾Por qué estudiar estadística?. ¾Qué es la Estadística?. La estadística se podría denir como el conjunto de métodos cientícos que nos permiten una interpretación descriptiva de la información numérica, elegir elementos representativos para realizar inferencia y contrastar hipótesis, estudiar las relaciones causaefecto y hacer predicciones. Podemos clasicar la estadística en: ˆ Descriptiva: descripción de los datos observados. Describe, analiza y representa un grupo de datos utilizando métodos numéricos y grácos que resumen y presentan la información contenida en ellos. ˆ Probabilística: modelización del comportamiento del fenómeno en estudio. ˆ Inferencial: estimación de lo desconocido y generalización de los resultados. Apoyándose en el cálculo de probabilidades y a partir de datos muestrales, efectúa estimaciones, decisiones, predicciones u otras generalizaciones sobre un conjunto mayor de datos. Para ello, es importante establecer algunas deniciones de conceptos básicos y fundamentales que serán utilizados a lo largo del texto.
1.1.1
ˆ ˆ

Deniciones.

Conceptos básicos.

Individuos o elementos: personas u objetos que contienen cierta información que se desea estudiar. Población: conjunto de elementos (o individuos) que cumplen ciertas propiedades comunes. 9

Muestra: subconjunto representativo de la población en estudio. ˆ Parámetro: función denida sobre una población. Ej: altura media de los individuos de un país. ˆ Estadístico o Estimador: función denida sobre una muestra. Ej: altura media de los individuos del aula. ˆ Variables o Caracteres: propiedades, rasgos o cualidades de los elementos de la población. Estos caracteres pueden dividirse en cualitativos y cuantitativos. ˆ Modalidades: diferentes situaciones posibles de un carácter. Las modalidades deben ser a la vez exhaustivas y mutuamente excluyentes cada elemento posee una y sólo una de las modalidades posibles. Ejemplo: Consideraremos todos los estudiantes de Granada (población), donde queremos hallar la altura media de la población (parámetro μ). Realizamos un muestreo sobre los alumnos de la Facultad de Ciencias (muestra) y obtenemos la altura media de esta muestra (estadistico x).
ˆ

1.1.2

Uno de los primeros pasos en la decisión de qué método estadísitico usar es determinar qué tipo de variables tenemos. Cuando hablemos de variable haremos referencia a un símbolo (X, Y, A, B, ...) que puede tomar cualquier modalidad (valor) de un conjunto determinado, que llamaremos dominio de la variable o rango. En función del tipo de dominio, las variables las clasicamos del siguiente modo: V.Cualitativas (o variables categóricas) Nominales: categorías son orden. Ej: Género, Genotipo, Fenotipo. Ordinales: categorías con orden. Ej: Mejoría de un tratamiento, Grado de satisfacción, Intensidad del dolor. V.Cuantitativas (o variables numéricas) Discretas: números enteros. Ej: número de colonias de bacterias en una caja de Petri , número de vértebras en una lechuza. Continuas: números reales. Ej: Altura, Peso, Presión, Densidad.
Ejemplos
ˆ http://udel.edu/~mcdonald/statvartypes.html

Tipos de variables

10

Problemas: Cuando tenemos una variable con un número pequeño de valores, puede no ser muy claro cómo clasicarla (¾es una variable cuanti o cualitativa?). No existe una regla tácita (rule of thumb ) para solucionar este conicto, y el trato que le des a la variable dependerá en parte de las preguntas a responder y las caracterísiticas de la investigación. Por ejemplo, si nuestra hipótesis es diferentes concentraciones de nutrientes tienen diferentes tasas de crecimiento bacterial deberemos tratar a la concentración de nutrientes como una variable cualitativa. Sin embargo, si nuestra hipótesis es las bacterias crecen más rápido al aumentar la concentración de nutrientes deberemos considerar la concentración de nutrientes como una variable cuantitativa. Es decir, podemos eliminar la ambiguedad cuando estamos diseñando el experimento a desarrollar.
1.1.3 ¾Cómo realizar un análisis estadístico con nuestros datos? Paso a paso.

McDonal (2009) ha sugerido utilizar la siguiente aproximación sistemática, paso a paso: 1. Especicar la pregunta biológica que queremos responder. 2. Formular la pregunta en términos de hipótesis nula y alternativa. 3. Formular la pregunta en términos de hipótesis estadísiticas nula y alternativa. 4. Determinar qué variables son relevantes a nuestro problema. 5. Determinar qué tipo de variables son cada una. 6. Diseñar un experimento que controle o aleatorice las posibles variables de confusión. 7. Debemos elegir el mejor test estadístico basado en el número de variables, el tipo de variables y el ajuste esperado de los supuestos paramétricos y las hipótesis que serán puestas a prueba. 8. Si es posible, haz un análisis de potencia para determinar un buen tamaño muestral para el experimento. 9. Haz el experimento. 10. Analizar los datos para ver si satisfacen los supuestos del test estadístico que elegimos (normalidad, homocedasticidad, indpendencia, etc.). Si no lo hace, elige un test más apropiado. 11. Aplicar las pruebas estadísticas elegidas e interpretar los resultados. 12. Comunicar los resultados de manera efectiva, con grácos o tablas. Pueden encontrar ejemplos de aplicación en la web http://udel.edu/~mcdonald/ statstep.html. 11

Figure 1: Página ocial de r-project ( http://www.r-project.org/ )

1.2
ˆ

¾Qué es R? R es un lenguaje y entorno (o ambiente) con un conjunto integrado de programas para la manipulación de datos, cálculo y grácos. R es un proyecto GNU similar al lenguaje S (J. Chambers et al., Bell Labs.), pero que se distribuye bajo la General Public License (GPL, Open Sourse). Esta licencia no tiene restricciones de uso, sólo obliga a que la distribución sea siempre GPL.
R es un lenguaje Orientado a Objetos: signica que las variables, datos, funciones, resultados, etc., se guardan en la memoria activa del computador en forma de objetos con un nombre especíco. El usuario puede modicar o manipular estos objetos con operadores (aritméticos, lógicos, y comparativos) y funciones (que a su vez son objetos). Mientras que programas más clásicos muestran directamente los resultados de un análisis, R guarda estos resultados como un objeto, de tal manera que se puede hacer un análisis sin necesidad de mostrar su resultado inmediatamente. Esto puede ser un poco extraño para el usuario, pero esta característica suele ser muy útil. Otras características de los lenguajes orientados a objetos son la herencia: las subclases heredan las características de las superclases, y el polimorsmo la misma operación aplicada a diferentes objetos resulta en diferentes implementaciones. R es un lenguaje interpretado (como Java) y no compilado (como Fortran, Pascal, . . . ), lo cual signica que los comandos escritos en el teclado son ejecutados directamente sin necesidad de construir ejecutable 12

ˆ

ˆ

Figure 2: Robert Gentleman y Ross Ihaka (también conocidos como R & R) liberaron el código R como software libre en 1996.
http://www.nytimes.com/2009/01/07/technology/business-computing/ 07program.html?pagewanted=all

Permite
ˆ ˆ ˆ ˆ ˆ

Almacenamiento y manipulación efectiva de los datos. Operadores para cálculo sobre variables indexadas (arrays) y matrices. Amplia, coherente e integrada colección de herramientas para análisis de datos. Grandes posibilidades gracas. Lenguaje de programación orientado a objetos bien desarrollado, simple y efectivo. Es un ambiente o entorno de trabajo, es decir, presenta herramientas muy exibles que pueden extenderse fácilmente mediante paquetes (packages; http://cran.r-project.org/mirrors.html ) y permite crear nuestras propias funciones. Grácos de alta calidad exportables en diversos formatos: PostScript, pdf, A bitmap, pictex (L TEX), png, jpeg, etc. Comunidad muy dinámica de desarrolladores de paquetes que cuenta con estadísticos de prestigio Lenguaje orientado a objetos 13

Ventajas
ˆ

ˆ ˆ ˆ

ˆ ˆ

Consume pocos recursos informáticos Puede ejecutarse remotamente (telnet) Sintaxis exigente Documentación muy amplia y dispersa, que puede resultar difícil. Algunos paquetes no han sido muy contrastados. Utiliza la línea de comandos y no un interfaz gráco, esto lleva mucho tiempo de adaptación y práctica.
Instalación de R

Desventajas
ˆ ˆ ˆ ˆ

1.3

Depende del sistema operativo, pero todo se puede encontrar en http://cran. r-project.org/bin. o Windows: bajar ("download") el ejecutable desde http: //cran.r-project.org/bin/windows/base . (por ejemplo, http://cran.r-project. org/bin/windows/base/rw1070.exe ). o Ejecutar el chero. Instalará el sistema base y los paquetes recomendados. o GNU/Linux: dos opciones: o Obtener el R-x.y.z.tar.gz y compilar desde las fuentes, y también bajar los paquetes adicionales e instalar. (Buena forma de comprobar que el sistema tiene development tools). o Obtener binarios (ej., *.deb para Debian, *.rpm para RedHat, SuSE, Mandrake).
1.4

Windows:
ˆ ˆ ˆ

¾Cómo trabajar con R?

Hacer click dos veces en el icono. Se abrirá "Rgui" (Gui, Graphical User Interface), con un mensaje de inicio. Iniciar R desde Tinn-R. Desde una "ventana del sistema" ejecutar "Rterm"; parecido a "R" en Unix o Linux. Teclear "R" en una shell. Iniciar R desde Tinn-R.

GNU/Linux:
ˆ ˆ

Sistema de ventanas Ventanas

14

Figure 3: Sistema de ventanas para Unix, Windows y MacOS X, respectivamente. 15

Figure 4: Tinn-R

16

¿

1.4.2

Acceder a R

ˆ debemos hacer doble clic en el ícono correspondiente. ˆ o podemos recurrir al sistema de menú. ˆ o podemos acceder vía Tinn-R o RStudio.

1.4.3

Sintaxis básica de R
+ # Continuartion promt: indica una orden incompleta. ; # separa órdenes en la misma línea. , # separa argumentos entre paréntesis. # #para realizar comentarios. q() # para salir del programa. <- o = #operador para la asignación de objetos.

Símbolos básicos > # R cursor (prompt): símbolo del sistema.

Flechas verticales del teclado ( ^_) recorren el historial de ordenes. Flechas horizontales () permiten el movimiento dentro de la línea El operador de asignación <- permite crear objetos en R. El nombre de un objeto debe: Comenzar con una letra (A-Z y a-z), puede incluir letras, dígitos (0-9), y puntos (.). R discrimina entre letras mayúsculas y minúsculas para el nombre de un objeto, de tal manera que x y X se reere a objetos diferentes. R no interpreta los espacios excepto para la asignación (bien: <- , mal: < -)

Ser ordenado. Se recomienda crear una carpeta para cada nuevo análisis, donde subdividir las áreas en:
1. datos 2. scripts 3. imagenes 4. historias 5. grácos 6. anotaciones

18

Directorio de trabajo Antes de comenzar a trabajar en R conviene observar nuestro directorio de trabajo, es decir, aquella carpeta donde guardaremos nuestros resultados. Como comentábamos anteriormente, se recomienda crear una nueva carpeta cada vez que comencemos un trabajo nuevo. Para observar en qué carpeta estamos trabajando utilizaremos la función getwd, mientras que para cambiar o seleccionar un nuevo directorio utilizaremos la función setwd.
¾Cómo especicar rutas (paths) en R para Windows? El caracter \ tiene que ser doble \\ o utilizar /, como en Linux. Por ejemplo:
setwd(E:\\ROSANA\\clase1) setwd(E:/ROSANA) # como en Linux

getwd() # observar en qué directorio estamos trabajando setwd("E:/ROSANA/clase1") # seleccionar el directorio donde queremos trabajar

Área de trabajo Todos los objetos creados se guardan en el workspace o área de trabajo. Para ver qué objetos están disponibles en el entorno (workspace) se usa la función ls(). Si quisiéramos obtener la relación de objetos disponibles en una librería, utilizaríamos ls(package=) o ls(library=). Por ejemplo, creamos un vector X y observamos que se ha incluido en nuestra área de trabajo. Asimismo, observamos los objetos de la librería spatial.
X<-1:10 ls() # para ver los objetos del workspace ls(package=spatial) # para ver los objetos de un paquete; también se puede utilizar (library:__).

Para borrar un objeto o una lista de ellos, utilizamos la función rm. Continuando con nuestro ejemplo, eliminaremos el vector X creado anteriormente y volveremos a observar el workspace.
rm(X) #para borrar objetos __. ls() rm(list=ls()) #borra todos los objetos.

Podemos observar los elementos de un objeto utilizando la función str, y con la función attach/detach acceder/no acceder a los elementos que contiene dicho objeto. Por ejemplo, utilizaremos los datos iris (de Fisher o Anderson), que nos dan las mediciones en centímetros de distintas variables de 50 ores de 3 especies de la familia Iris: Iris setosa, versicolor y virginica .

data(iris) #esta función nos permite acceder a los datos iris str(iris) # nos permite ver como esta formado el objeto iris attach(iris) #permite trabajar con los elementos de iris sin nombrar a iris

Ahora sabemos que el objeto iris es un dataframe (que lo deniremos más adelante), y podemos acceder directamente a cada uno de sus elementos solamente nombrándolo.
Sepal.Length Species dettach(iris) #vuelve a unir los componentes de iris

19

Para escribir representaciones externas de los objetos de R podemos especicar un archivo. De este modo, podremos guardar y acceder a estos objetos siempre que nos sea necesario.

x <- runif(20) #crea un objeto de 20 número aleatorios uniformes y <- list(a = 1, b = TRUE, c = "oops") #crea un objeto lista save(x, y, file = "xy.RData") #guarda los anteriores objetos en un archivo xy.Rdata save.image() # realiza lo mismo que antes, pero sin especificar el nombre del archivo ni los objetos a guardar, es decir, nos guarda todo lo que tengamos en el workspace.

Vayamos a la carpeta de trabajo y observemos que se han creado dos archivos de extensión RData. Si quisiéramos acceder posteriormente a estos objetos, basta con utilizar la función load, con el nombre del archivo (y la ruta donde se encuentra).

load("xy.RData"). # .RData es la extensión que usa R para un archivo de objetos

Si lo que queremos guardar es el historial de órdenes que hemos ejecutado en R, utilizaremos la función savehistory, y loadhistory para cargar este archivo en R.

savehistory() #guarda el trabajo de una sesión. loadhistory() #recupera el trabajo de una sesión. # la extensión .RHistory indica un archivo de historia de órdenes.

Salir de R Para salir de R podemos utilizar el comando q(), donde nos preguntará si queremos guardar el workspace (también podemos utilizar
q(save=no)).

Librerías o paquetes R consta de un sistema base (vienen con la instalación del programa) y un sistema adicional (deben ser instalados por el usuario) de paquetes, que extienden las funciones del programa. Los paquetes son una colección de funciones programadas previamente sobre temas esepcícos. Para instalar un paquete adicional en R, desde Windows, podemos: 1. Instalación y descarga manual: podemos descargar un paquete zipeado en la página de R (www.r-project.org) seleccionando en CRAN el servidor (e.g. Madrid, España) y luego el paquete que queremos obtener. Posteriormente, en la barra de herramientas de la consola (o GUI) de R seleccionamos Paquetes->Instalar paquete(s) a partir de archivos zip locales y seleccionamos el archivo en la ruta donde lo hemos guardado. 2. Instalación y descarga dentro de R: este método instala cualquier paquete automáticamente (debemos tener acceso a internet para que conecte con el repositorio de paquetes de R). Desde la barra de herramientas accedermos a Paquetes->Seleccionar espejo CRAN o Instalar paquete(s); luego seleccionamos el servidor que nos corresponda y se despliega una lista con

20

los paquetes disponibles. Desde la consola podemos utilizar cualquiera de las siguientes funciones:

update.packages("vegan") #ofrece para descargar e instalar las últimas versiones de un paquete. install.packages("spatial") # instala el paquete solicitado
Finalmente, para cualquiera de los dos procedimientos anteriores, los paquetes deben ser cargados o activados para volverlos disponibles por el programa; esto se realiza desde la barra de herramientas con Paquetes->Cargar paquete o desde la consola con la función

library. Hay que library(vegan) # Carga o activa (loading) el paquete vegan require(vegan) # lo mismo que antes
Además, disponemos de las siguientes funciones:

library() #da una lista de todos los paquetes disponibles en nuestro programa search() # da una lista de todos los paquetes activados library(help=spatial) # nos aporta información del paquete objects(grep("spatial",search())) # indica la lista completa de los contenidos del paquete.
Desde GNU/Linux: R CMD INSTALL paquete-x.y.z.tar.gz, permite instalar aunque uno no sea root (especicando el directorio); o más cómodo, desde R, con las mismas funciones que antes

install.packages(), update.packages(),

etc., que también permite instalar no siendo root (especicar lib.loc).

Cambios en la consola de R
la consola de R, basta con seleccionar:

Si quisiéramos cambiar la apariencia de

Editar-> Preferencias de la interfaz gráfica (o Edit-> GUI preferences).

¾Cómo pedir ayuda?

R contiene una interfaz de ayuda muy útil, basta

con seleccionar cualquiera de las siguientes opciones:

help(summary) ?summary help.search("median") # lista de funciones o paquetes donde aparece una palabra help.start() # abre la ayuda en html demo(graphics) # lista las demostraciones disponibles data() #relación de todas las hojas de datos (data.frame) de todas las librerías disponibles data(package=car) #relación de los data.frame de la librería ... data(car) #carga en la memoria en uso el objeto car ?summary ??summary find(lowesss) # indica qué paquete tiene la función lowess apropos(lm) # retorna los nombres de todos los objetos que coinciden con la lista de búsqueda que le slicitamos. example(lm) # nos da un ejemplo de cómo trabaja la función lm

21

vignette("sandwich") # descarga un pdf del paquete sandwich RSiteSearch("logistic residuals") # necesita acceso a internet

R como calculadora: aritmética y funciones básicas. Todas aquellas funciones que alguna vez necesitaste están aquí. ˆ R puede operar sobre vectores enteros de un vez ˆ Regla del reciclado ˆ Operaciones de asignación: <, >, <-, <=, $, @, [, [[, :, etc. Prueba con help(Syntax)). ˆ Operaciones aritméticas: +, -, *, /, ^, %%, %/% ,sqrt, log, log10, log2, log(x, base), exp, sin, cos, tan. Podemos consultarlas en help(Arithmetic). ˆ Otras operaciones con vectores: max, min, range, mean, var, sum, prod,
which.max, which.min, cumsum, cumprod, ...

Operaciones comparativas y lógicas: <, >, <=, >=, ==, ½= , ½, &, |, xor() y los parecidos &&, ||. Prueba con help(Comparison) y help(Logic). ˆ Generacion de secuencias regulares: seq, :, rep. Ejemplo:
ˆ
x<-10*log(2) w<-rnorm(100)+10*log(2) mean(w) summary(w)

tipos de objetos: ˆ Vector colección ordenada de elementos del mismo tipo. Ejemplo:

R como lenguaje: objetos (Casi) todo en R es un objeto. Existen distintos

x<-c(1,2,3) #concatenación "c" y<-c("a", "b", "c") z<-c(TRUE, TRUE, FALSE) is.vector(x); is.vector(y); is.vector(z) x[1] ; y[2]; z[3] # permite acceder a los elementos del vector (indexación).

Matrices y Array: generalización multidimensional del vector. Elementos del mismo tipo. Varias columnas (o las) de vectores. Ejemplo:
ˆ
is.array(x) a<-array(9,dim=c(5,4)); a; a[1,]; a[1drop=FALSE] b<-matrix(1:20,nrow=5); b; b[1,2]

22

Data frame: similar al array, pero con columnas de diferentes tipos. Ejemplo:
ˆ

dates<-data.frame(ID=c("gen0","genB","genZ"),subj1=c(10,25,33),subj2=c(NA,34,15),oncogen=c(TRUE,TRU loc=c(1,30,125)) data(iris); iris # carga la hoja de datos "iris"

Factor: tipo de vector para datos cualitativos (o categóricos). Ejemplo:
ˆ
x<-factor(c(1,2,2,1,1,2,1,2,1))

List: vector generalizado. Sus componentes pueden ser también listas, o pueden ser de distinto tipo. No tienen estructura. Ejemplo:
ˆ
una.lista<-c(un.vector=1:10,una.palabra="hola",una.matriz=matrix(rnorm(20),ncol=5),lista2=c(1=5, b=factor(c("a","b"))))

Funciones código Ejemplo:
ˆ
f1<-function(x) {return(2*x)} #crea una función que ha de devolver siempre el doble de aquel elemento que le demos. La función return nos devuelve el vector formado. f1(1:10) # llama a la función anterior, dándole un vector desde 1 a 10. is.function(f1) # pregunta lógica. funcion1<-function(A,B,C) {x1<-A*B/C; x1} #crea una función que aplica la relación A*B/C y devuelve el objeto formado. args(funcion1) #argumentos de la función funcion1(1,2,3) #aplica la función creada con los argumentos A=1, B=2, C=3.

Control de ejecución (condicionales, loops, etc.). Ejemplo:
f = factor(sample(letters[1:5], 10, replace=TRUE)) for( i in unique(f) ) print(i) x<-1:5; if(x==5) {x<-x+1} else {x<-x+2}; x x<-1:5; ifelse(x %% 2 == 1, "Odd", "Even") while(length(x)<=10) {x<-c(x,1)}

Control de errores: traceback, browser, debug Ejemplo:
foo <- function(x) { print(1); bar(2) } bar<-function(x){x+a.variable} foo(2) # da un error extraño traceback() #nos dice cuál es el error

23

require(stats) centre <- function(x, type) { switch(type, mean = mean(x), median = median(x), trimmed = mean(x, trim = .1)) } x <- rcauchy(10); centre(x, "mean") debug(centre) centre(x, "mean") undebug(centre)

Control de la duración de la operación: Ejemplo:

unix.time(centre(rnorm(10),"mean")) #unix.time, Rprof require(stats) system.time(for(i in 1:100) mad(runif(1000)))

Atributos de los objetos Ejemplo:
x <- cbind(a=1:3, pi=pi) # matriz de 3x2 (filasxcolumnas)con nombres en las columnas (a y pi). attributes(x) #nos indica los atributos de x, nos dice que tiene dimensión 3x2, que no tiene nombres en las filas ($dimnames[[1]]) y que si tiene nombres en las columnas ($dimnames[[2]]). x<-1:15; y<-matrix(5,3,4); z<-c(TRUE, FALSE) attributes(x); attributes(y); attributes(z) w<-list(a=1:3,b=5); attributes(w) f1<-function(x) {return(2*x)} ; attributes(f1); is.function(f1)

ˆ

Modo (mode): lógico, entero, real, carácter, etc.

Ejemplo:
x<-1:15; y<-matrix(5,3,4); z<-c(TRUE, FALSE) mode(x); mode(y); mode(z)

ˆ

Tipo (typeof): double, character...

Ejemplo:
x1<-1:5, x2<-c(1,2,3,4,5); x3<-"patata" typeof(x1); typeof(x2); typeof(x3)

ˆ

Nombres (names): etiquetas. #Poner un nombre en minúscula no es lo mismo que ponerlo en mayúscula (R es "case-sensitive": x!=X) #Hay nombres reservados, por lo que hay que evitarlos (ej: "function", "if").

Ejemplo:
z <- list(a=1, b="c", c=1:3) names(z)

24

Dimensiones (dim): número de las y columnas (puede ser cero) Ejemplo:
ˆ
length(x) dim(y)

Nombres de las dimensiones de los arrays (dimnames) Ejemplo:
ˆ
y<-matrix(5,3,4) dimnames(y)[[1]]<-c("8am","9am","10am") # [[1]] parafilas y [[2]] para columnas colnames(y)<-c("lunes", "martes", "miércoles", "jueves") # alternativa

Clase (class): lista de las clases del objeto (vector alfa-numérico) Ejemplo:
ˆ
x <- 10 class(x) # "numeric"
Indexación o referenciación Para acceder a los elementos de un objeto podemos utilizar distintas funciones: [, [[, $, @. Ejemplo:

data(iris) iris iris[,1] # igual que iris[[1]] iris[1,] iris[2:4, ] iris[1, 1:2] iris$Sepal.Length # referencia a la columna "Sepal.Length" utilizando el formato dataframe$columna attach(iris); mean(Sepal.Length); detach(iris) # referencia a los nombres de las variables (columnas) mediante la función attach iris$Sepal.Length
Valores ausentes: NA (not available); NaN (not a number); Inf (innite).

Ejemplo:

x<-c(1:3,NA); is.na(x); which(is.na(x)) x[is.na(x)]<-0 #sustituir NA por 0 is.na(5/0) is.nan(0/0) is.infinite(-5/0) mean(x,na.rm=TRUE) #quitar NA al evaluar la media x<-c(1:3,NA); y<-na.omit(x); y #para funciones de modelado como lm es mejor usar "na.omit" o "na.exclude", que eliminan los NA

25

Ordenar vectores

Ejemplo:

x<-c(5,1,8,3) order(x); order(x,decreasing=TRUE) sort(x) rank(x) x[order(x)] x[order(x,decreasing=TRUE)]

Secuencias aleatorias Ejemplo: sample(5) sample(5,3) x<-1:10;sample(x); sample(x,replace=TRUE) probs<-x/sum(x); sample(x,prob=probs) ˆ Secuencias discretas y continuas Ejemplo: x<-c(1,2,3,4,5) x<-1:5 x<-seq(from=1,to=5,by=1) ˆ Secuencias con repeticiones Ejemplo:
ˆ
rep(1,5) x<-1:4; rep(x,2) gl(3,5) #como rep(1:3, rep(5,3)) expand.grid(1:3,4:6,7:10)

Generación de secuencias

Discretizar vectores o matrices

Ejemplo:

v<-1:9 cut1<-cut(v,3); cut1 # cut categoriza valores numéricos cut2<-cut(v,quantile(v,c(0, 1/3, 2/3, 1)),include.lowest=TRUE); cut2 cut3<-cut(v,quantile(v,c(0, 1/3, 2/3, 1)),include.lowest=TRUE); cut3 g <- airquality$Month l <- split(airquality, f=g) # split divide los datos del vector x en grupos definidos por f l <- lapply(l, transform, Oz.Z = scale(Ozone)) aq2 <- unsplit(l, g) #unsplit revierte las operaciones de split head(aq2) x<-"Hola mundo" strsplit(x," ") #split los elementos del vector de caracteres x en subconjuntos segun split

26

Combinar vectores o matrices Ejemplo:
rbind(1:5,1:10) cbind(1:5,1:10) a<-matrix(rnorm(20),ncol=5) mediai<-media<-NULL; for(i in 1:4){mediai<-mean(a[i,]); media<-c(media,mediai)} # loop apply(a,1,mean,na.rm=TRUE) # aplica una función a filas, columnas o ambas. Hay que especificar el "margin" sapply(a,mean,na.rm=TRUE) # simplifica el resultado a un vector o una matriz lapply(a,mean,na.rm=TRUE) # devuelve una lista require(stats) tapply(PlantGrowth$weight, PlantGrowth$group, mean) aggregate(PlantGrowth$weight, list(PlantGrowth$group), mean) paste("Today is", date()) # concatenador de vectores luedo de convertirlos en caracteres paste("A", 1:6, sep = "") require(stats) formula(PlantGrowth) # indica la fórmula de los datos levels(PlantGrowth$group) # indica los niveles del factor group pg <- unstack(PlantGrowth) # unstack según la fórmula de los datos pg stack(pg) # vuelve a unirlo stack(pg, select=-ctrl) # elimina el grupo control ctrl reshape melt cast erge, union y intersect

-Importar datos desde Excel La manera más fácil de importar datos desde excel incluye varios pasos: 1) preparar los datos en Excel, 2) exportarlos en archivo ascii detilimatos por tabulación, 3) cerrar excel y 4) leer los datos utilizando la función read.table en R. Con un archivo ascii delimitado por tabulación, sin celdas en blanco ni espacios entre lo snombres, podemos importar los datos a R con la siguiente orden: Este comando lee los datos del archivo squid.txt y los guarda en el objeto Squid, manteniendo los nombres de las variables del archivo original. En el caso de que los decimales estén determinados por una coma, debemos especicarlo en R, ya que R lee los decimales con puntos. 27

1.4.4 Importar y exportar datos

Squid<-read.table(file="D:\\Carpeta de Trabajo\\squid.txt", header=TRUE)

funciones especícas para leer y escribir objetos xls.

Squid<-read.table(file="D:\\Carpeta de Trabajo\\squid.txt", header=TRUE, dec=",") También existe un paquete (library(xlsReadWrite)) que permite utilizar

-Importar y exportar datos de R (formato .Rdata). ˆ Formato .RData (workspace de R):
save(__, __ , file="___.Rdata") save.image(file="___.RData") # guarda todo el directorio de trabajo load("__.RData")

ˆ

Formato ASCCI. Archivos .r (archivo de sintaxis -órdenes o comandos de R-) Formato ASCCI. Archivos .txt (hojas de datos en formato texto)

dump("__", "__", "___.r", append=_T ó F_) source("__.r") # ejecuta las órdenes de R que están en el archivo __.r

ˆ

write.table(_data.frame_, "___.txt", sep="\t", quote=F) #el argumento sep nos permite especificar el tipo de tabulación: "\t" para tabulación, " " es el valor por defecto read.table("__.txt", header=T, , sep="\t")

ˆ

Formato CSV. Archivos

read.csv(file, header = TRUE, sep = ",", quote="\"", dec=".", fill = TRUE, comment.char="", ...) # utilizar sep = "," para datos separados por coma y para datos separados por ; utilizar sep = ";" (o la función read.csv2).

ˆ

Desde internet:

read.table(url("http://tinyurl.com/lzco8s"), row.names=1, dec=",")

ˆ

Consideraciones sobre los datos

-Las tablas de datos deberán tener siempre las variables en las columnas y las observaciones en las las. -Eliminar todos los espacios no necesarios. -Poner nombres cortos tanto en variables como en observaciones. En estas últimas, todas deberán ser del mismo tamaño. -Eliminar todo símbolo inútil (@, ˆ, \, #, &, %, $,. . . ) -Comprobar que no hay celdas vacías. Para asegurarnos eliminar todas las las y columnas sobrantes. Los datos que tienes en excel han de ser guardados en documentos de texto delimitados por tabulaciones. Y los huecos deben ser rellenados con NA (No Available) en mayúsculas. 28

Lo que sucede es que en ocasiones lo reconoce como una matriz en lugar de como un data frame, por lo que si lo detectas haciendo str(data), tienes que decirle al programa que se trata de un data frame para ello:

data01<-as.data.frame(data01) # se le dice que considere a data como un data.frame data01$var01<-as.factor(data01$var01) # estamos diciendo que considere la variable01 como un factor de la variable01.

-Importar datos desde otros programas estadísticos (e.g. Minitab, S-PLUS, SAS, SPSS, Stata, Systat, etc.) También podemos escribir información en R que pueda ser leída por otros programas estadísticos: -Acceder a una base de datos library(RODBC) # el paquete utiliza Open DataBase Connectivity (ODBC) -Otras funciones de interés
library(foreign) ?read.ntp # ayuda para leer datos desde archivos Minitab

write.foreign(df, datafile, codefile, package = c("SPSS", "Stata", "SAS"), ...)

library(MASS) attach(bacteria) #vuelve accesible las variables del objeto bacteria fix(bacteria) # para editar este dataframe detach(bacteria) #vuelve inaccesible las variables del objeto bacteria, pero no borra el objeto. x<-matrix(1:10,5) edit(x) # para editar esta matriz objects() # para observar los objetos que hemos creado search() # para ver las librerías y dataframes que están cargadas rm(x) #remueve el objeto x

1.5

Paquetes

vignette(all = FALSE) # nos da una lista de toda la información pdf disponible de los paquetes activados vignette(all = TRUE) # nos da una lista de toda la información pdf disponible de los paquetes instalados vignette("grid") # abre un archivo pdf de introducción al paquete grid.

Como hemos mencionado anteriormente, R consta de un sistema base de paquetes y un conjunto adicional de paquetes que extienden su funcionalidad. Puedes acceder a ellos en la dirección: http://cran.es.r-project.org/ src/contrib/PACKAGES.html . Además, puedes acceder a información sobre los paquetes utilizando la función vignette:

1.6

Citando R

citation() #Muestra los datos de R y como éste ha de ser citado. citation("pkgname") #Indica cómo se han de citar los paquetes empleados.

29

1.7

Michael J. Crawley. 2007. The R Book. John Wiley & Sons Ltd. ˆ Michael J. Crawley. 2005. Statistics: An Introduction using R. Wiley. ISBN 0 470 02297 3. ˆ John Verzani. 2005. Using R for Introductory Statistics. Chapman & Hall CRC, Boca Raton, FL, ISBN 1 584 88450 9. http://www.r-project.
ˆ

Documentación sobre R

org/doc/bib/R-books.html

ˆ

Emmanuel Paradis. 2002. R for Beguinners.
org/doc/contrib/rdebuts_es.pdf

http://cran.r-project.

En español: ˆ R para Principiantes, la versión en español de R for Beginners, traducido por Jorge A. Ahumada (PDF). ˆ Versión en español de An Introduction to R por Andrés González y Silvia González (PDF). ˆ Estadística Básica con R y R-Commander. Libro libre ( http://knuth. uca.es/ebrcmdr). ˆ Introducción a R y R-Commander. Curso libre ( http://knuth.uca.es/ moodle/course/view.php?id=51 ). ˆ Grácos Estadísticos con R por Juan Carlos Correa y Nel González (PDF). ˆ Cartas sobre Estadística de la Revista Argentina de Bioingeniería por Marcelo R. Risk (PDF). ˆ Introducción al uso y programación del sistema estadístico R por Ramón Díaz-Uriarte, transparencias preparadas para un curso de 16 horas sobre R, dirigido principalmente a biólogos y especialistas en bioinformática (PDF). ˆ Lista de correo R-help-es en español. Lista de correo ocial de R en español.
1.8

Vamos a trabajar con el ejemplo de Zuur et. al. (2009), que es una pequeña tabla de datos (aún no publicados, de Chris Elphick) que contienen medidas de cuerpo de 1100 del Gorrión de Cola Aguda ( Ammodramus caudacutus ). Se tienen medidas de tamaño de cabeza (Head), largo de la pata (Tarsus), de las alas (Wingerd) y peso (Wt). Para este ejemplo solo utilizaremos los datos de ocho individuos. 30

Ejemplos

Ahora debemos combinar estos datos de las cuatro variables con la función de unión de columnas cbind: También podríamos haber utilizado la función data.frame: Dfrm <- data.frame(WC = Wingcrd, TS = Tarsus, HD = Head, W = Wt) Podemos consultar las características de la matriz formada:
dim(Z) names(Z) mean(Z[,3],na.rm=TRUE) summary(Z,na.rm=TRUE) Z <- cbind(Wingcrd, Tarsus, Head, Wt) Z

Wingcrd <- c(59, 55, 53.5, 55, 52.5, 57.5, 53, 55) Tarsus <- c(22.3, 19.7, 20.8, 20.3, 20.8, 21.5, 20.6, 21.5) Head <- c(31.2, 30.4, 30.6, 30.3, 30.3, 30.8, 32.5, NA) Wt <- c(9.5, 13.8, 14.8, 15.2, 15.5, 15.6, 15.6, 15.7) Observemos qué ocurre con el valor perdido ( NA): sum(Head) La opción por defecto na.rm=FALSE causa un error en la suma de por ello, habrá que permitir que existan valores NA. sum(Head, na.rm = TRUE)

Creamos cada variable en R mediante vectores con la concatenación c:

los valores,

write.table(Z,file="Z2.txt", col.names=TRUE) #guarda la matriz Z en el archivo Z2.txr, en la ruta que tengamos asignada en R (sino agregar "C:\\ruta\\Z2.txt"). La opción col.names indica si han de incluirse los nombres de las variables en la primer fila. write.tables(Dfrm, file="Dfrm.txt", col.names=TRUE) # guarda el dataframe Dfrm en el archivo Dfrm.txt.

Finalmente, vamos a guardar el objeto creado:

Ahora cerremos el programa e intentemos abrir los datos cerando un nuevo objeto. Para ello, seleccionamos el directorio de trabajo ( setwd()) y ejecutamos:
datosDfrm<-read.table("Dfrm.txt",head=TRUE) datosDfrm datosZ2<-read.table("Z2.txt",head=TRUE) datosZ2

Accederemos ahora a las variables que forman nuestro objeto 31

datosDfrm str(datosDfrm) datosDfrm$WC str(datosZ2) datosZ2$Wingcrd colnames(datosZ2) datosZ2[,3]

1.9

Ejercicios para resolver

1. Construye un vector de edades con los números {1, 3, 5, 2, 11, 9, 3, 9, 12, 3} y un vector de pesos con {4.4, 5.3, 7.2, 5.2, 8.5, 7.3, 6, 10.4, 10.2, 6.1}. Consulta el largo de ambos vectores y, en caso de que sea posible, construye una matriz con los datos. Consulta los estadísticos de resumen de ambas variables. Guarda los datos en un archivo txt en la carpeta de trabajo y las órdenes con las que has trabajado. 2. Instala el paquete vegan, actívalo y solicita ayuda para conocerlo. Realiza un ejemplo de lo que el paquete permite. Observa los datos que contiene el paquete, cárgalos y mira su encabezado. 3. Leer los datos Cuadro I.1.V.csv y seleccionar las variables de interés "Temperatura", "Conductividad", "pH", "Nitrato", "Nitrito", "Amonio", "Fosfato", "Silicato"; y las variables de identicación "Laguna" y "Estación". Luego construir un archivo solo con esta información. 4. *Cuando trabajamos con factores, a veces nos interesa conocer cuantos hay de cada clase o categora. La frecuencia de cada una de las categoras se puede obtener facilmente con la funcion table(). Crear un factor de 30 elementos con tres categoras (1, 2 y 3). Etiquetar las categoras como Castellon, Valencia y Alicante. Utilizar la funcion table() para comprobar que realmente hay 10 de cada categora. 5. *Utilizar el siguiente codigo para construir una matriz simetrica de numeros enteros: Am<-matrix(sample(1:10,100,re=T),10,10); Ad<-Am+t(Am) 6. *Con los siguientes numeros: 7.3, 6.8, 0.005, 9, 12, 2.4, 18.9, .9 a) Calcula la media. b) Calcula la raz cuadrada de los numeros. c) Obten los numeros que son mayores que su raz cuadrada. d) >Cuantos valores son mayores que 1? e) Obten la raz cuadrada de los numeros redondeados con dos cifras decimales. f ) >Cuanto dieren los numeros redondeados de los originales? 7. *Utiliza las funciones rep() y seq() para producir un vector que contenga: a) los valores: 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, b) los valores: 4, 4, 4, 4, 3, 3, 3, 3, 2, 2, 2, 2, 1, 1, 1, 1, c) los valores: 1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5. 8. *Uso de la funcion sample(). Obten una muestra de tamaño 5 del un vector 1:20, con probabilidades proporcionales al valor del vector.

32

Sign up to vote on this title
UsefulNot useful