1.- empezando con r -...

39
GENÉTICA DE POBLACIONES CON R, FACULTAD DE CIENCIAS, UNAM ENRIQUE SCHEINVAR, 2014 1.- EMPEZANDO CON R En esta práctica, se indica en  texto blanco sobre fondo negro las instrucciones que debes de escribir en la consola de R. El símbolo  > de la consola de R se conoce como “prompt” y es un indicador de que el programa R está listo para recibir órdenes. Se indica en texto blanco sobre fondo gris, los textos de salida que muestra la consola de R (y que no necesitamos ingresar); en fondo gris con relieve blanco, se muestran las teclas teclas a escribir. Antes de empezar, el curso, es necesario que generes una carpeta llamada “genpobs” en la que vas a copiar todos los archivos que se te vayan dando a lo largo del curso y en donde vas a realizar todas las prácticas. Si estás en sistema Unix (linux / Mac), genera la carpeta en tu home:  $ mkdir ~/genpobs . Si estás en windows, abre el navegador de archivos y genera la carpeta en C:/genpobs . Revisa que tengas permiso de lectura escritura y ejecución sobre esa carpeta (  $ chmod u+rwx ~/genpobs/ ). A partir de ahora, esta carpeta va a ser tu “ruta de trabajo QES R http://www.r-project.org/ R is a language and environment for statistical computing and graphics. It is a GNU project (http://www.gnu.org) which is similar to the S language and environment which was developed at Bell Laboratories (formerly AT&T, now Lucent Technologies) by John Chambers and colleagues. R can be considered as a different implementation of S. There are some important differences, but much code written for S runs unaltered under R. R provides a wide variety of statistical (linear and nonlinear modelling, classical statistical tests, time-series analysis, classification, clustering, ...) and graphical techniques, and is highly extensible. The S language is often the vehicle of choice for research in statistical methodology, and R provides an Open Source route to participation in that activity. One of R's strengths is the ease with which well-designed publication-quality plots can be produced, including mathematical symbols and formulae where needed. Great care has been taken over the defaults for the minor design choices in graphics, but the user retains full control. R is available as Free Software under the terms of the Free Software Foundation 's GNU General Public License in source code form. It compiles and runs on a wide variety of UNIX platforms and similar systems (including FreeBSD and Linux), Windows and MacOS. DESCARGAR E INSTALAR R R se puede descargar a partir de varios servidores repartidos al rededor de todo el mundo llamados The Comprehensive R Archive Network ” alias CRAN. En teoría, todos los servidores tienen la misma información en el mismo idioma (inglés) por lo que se recomienda utilizar cualquiera de ellos. DESCARGAR PARA WINDOWS (NO RECOMENDADO)... Windows es un sistema pesado, caro, de código fuente cerrado (no puedes leer el código fuente), y 1.- Empezando con R Pg. 1

Upload: hadang

Post on 06-Aug-2019

214 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 1.- EMPEZANDO CON R - evolucion.fciencias.unam.mxevolucion.fciencias.unam.mx/images/maestros/gabriela/00_Todo.pdf · GENÉTICA DE POBLACIONES CON R, FACULTAD DE CIENCIAS, UNAM ENRIQUE

GENÉTICA DE POBLACIONES CON R, FACULTAD DE CIENCIAS, UNAM ENRIQUE SCHEINVAR, 2014

1.- EMPEZANDO CON R

En esta práctica, se indica en  texto blanco sobre fondo negro  las instrucciones quedebes de escribir en la consola de R. El símbolo  >  de la consola de R se conoce como “prompt”y es un indicador de que el programa R está listo para recibir órdenes. Se indica en texto blancosobre fondo gris, los textos de salida que muestra la consola de R (y que no necesitamosingresar); en fondo gris con relieve blanco, se muestran las teclas teclas a escribir.

Antes de empezar, el curso, es necesario que generes una carpeta llamada “genpobs” en la que vas acopiar todos los archivos que se te vayan dando a lo largo del curso y en donde vas a realizar todaslas prácticas. Si estás en sistema Unix (linux / Mac), genera la carpeta en tu home:  $ mkdir~/genpobs  . Si estás en windows, abre el navegador de archivos y genera la carpeta enC:/genpobs . Revisa que tengas permiso de lectura escritura y ejecución sobre esa carpeta ( $chmod u+rwx ~/genpobs/  ). A partir de ahora, esta carpeta va a ser tu “ruta de trabajo”

QUÉ ES Rhttp://www.r-project.org/

R is a language and environment for statistical computing and graphics. It is a GNUproject (http://www.gnu.org) which is similar to the S language and environment which was developed atBell Laboratories (formerly AT&T, now Lucent Technologies) by John Chambers and colleagues. R can beconsidered as a different implementation of S. There are some important differences, but much code writtenfor S runs unaltered under R.R provides a wide variety of statistical (linear and nonlinear modelling, classical statistical tests, time-seriesanalysis, classification, clustering, ...) and graphical techniques, and is highly extensible. The S language is

often the vehicle of choice for research in statistical methodology, and R provides an Open Sourceroute to participation in that activity.One of R's strengths is the ease with which well-designed publication-quality plots can be produced, includingmathematical symbols and formulae where needed. Great care has been taken over the defaults for the minordesign choices in graphics, but the user retains full control.

R is available as Free Software under the terms of the Free SoftwareFoundation's GNU General Public License in source code form. It compiles and runson a wide variety of UNIX platforms and similar systems (including FreeBSD and Linux), Windows andMacOS.

DESCARGAR E INSTALAR RR se puede descargar a partir de varios servidores repartidos al rededor de todo el mundo llamados“The Comprehensive R Archive Network” alias CRAN. En teoría, todos losservidores tienen la misma información en el mismo idioma (inglés) por lo que se recomiendautilizar cualquiera de ellos.

DESCARGAR PARA WINDOWS (NO RECOMENDADO)...

Windows es un sistema pesado, caro, de código fuente cerrado (no puedes leer el código fuente), y

1.- Empezando con R Pg. 1

Page 2: 1.- EMPEZANDO CON R - evolucion.fciencias.unam.mxevolucion.fciencias.unam.mx/images/maestros/gabriela/00_Todo.pdf · GENÉTICA DE POBLACIONES CON R, FACULTAD DE CIENCIAS, UNAM ENRIQUE

GENÉTICA DE POBLACIONES CON R, FACULTAD DE CIENCIAS, UNAM ENRIQUE SCHEINVAR, 2014

lleno de virus. Te recomendamos ampliamente instalar una máquina virtual (i.e. VirtualBox),descargar un sistema linux (www.ubuntu.com ó www.linuxmint.com o cualquier otro de los cientosque existen) e instalarlo en la máquina virtual (no necesitas desinstalar windows; desde windowsejecutas el programa VirtualBox y luego le dices al programa que ejecute Linux mientras siguestrabajando en windows) para que pruebes y en un futuro te cambies a linux (recuerda que mientrasesté prendida la máquina virtual, tu máquina va a trabajar un poco más lento, pues tu máquina va aestar trabajando a lo doble cargando el tedioso windows, la máquina virtual y el linux)

Para instalar en windows:

Ir a la página de R: http://www.r-project.org/ hacer click en la opción “CRAN” delmenú de la izquierda y seleccionar cualquiera de los servidores. Hacer click en “Download Rfor Windows”, luego haz click en la opción “base” y luego en “Download R #.#.#for Windows” y guarda el archivo R-#.#.#-win.exe en alguna carpeta (si windows no tepreguntó donde se guardó, es posible que esté en la carpeta Descargas). Se usa el mismo archivopara máquinas de 32 o 64 bits.

Haz doble click sobre el archivo R-#.#.#-win.exe que descargaste y sigue las instrucciones deinstalación.

DESCARGAR PARA MAC (RECOMENDADO A MEDIAS)...

Mac no es la panacea. antes decían que “lo mejor de mac era son sus procesadores y sus sistemaMacOs, eran bonitas y nunca fallaban”; pues resultó que era “tan buenos” que Mac sustituyó su“super sistema MacOs” por uno tipo Unix (la misma base que ya usaba linux), pero los usuarios deMac seguían diciendo que “lo mejor de mac son sus procesadores”; igualmente, resultó que eran“tan buenos” que sustituyeron sus “super procesadores” por unos marca intel (los mimos que usacualquier otra de las computadoras “no tan buenas”). Hoy en día “lo mejor de mac es que sonbonitas, fáciles de usar y no tienen virus”.

Mac, lo que te ofrece es una marca (sin duda, bonita, fácil y sobre todo, cara). Para instalar en mac:

Ir a la página de R: http://www.r-project.org/ hacer click en la opción “CRAN” delmenú de la izquierda y seleccionar cualquiera de los servidores. Hacer click en “Download Rfor (Mac) OS X”. Selecciona la versión de mac que tienes (snow lepard, maverick, etc..).

DESCARGAR PARA LINUX (EL MÁS RECOMENDADO)

Aunque linux no es “bonita ni fácil”, su sistema tipo Unix (al igual que mac) permite aprovechar alo máximo los recursos de la computadora (linux es multi-usuario, multi-tarea y multi-proceso).Como su código fuente es abierto (Open Source)(la gente de linux inventó lalicencia GNU bajo la cual también está R), ha podido ser mejorada por TODA la gente del mundo(igual que R): cuando un programa presenta un error cualquier programador de cualquier parte delmundo puede leer el programa, corregir el error, mejorar el programa y colocarlo gratuito (o no)para que cualquier persona lo pueda utilizar. Como es gratuito, mucha gente lo utiliza (ymuchas empresas como Mac o Windows, lo atacan) y existen cientos de miles de manuales, ayudas,tutoriales y cursos en línea completamente gratuitos en prácticamente cualquier idioma del mundo.Debido a que es el sistema preferido por los hackers, su diseño (desde el núcleo) está realizado paraser compatible con diversos lenguajes de programación (como R). Comoestá basado en el sistema UNIX, todos los archivos están protegidos, por lo que no puedes seratacado por ningún virus ( salvo que lo guardes, ejecutes y autorices su uso – igual que mac- ), etc...

1.- Empezando con R Pg. 2

Page 3: 1.- EMPEZANDO CON R - evolucion.fciencias.unam.mxevolucion.fciencias.unam.mx/images/maestros/gabriela/00_Todo.pdf · GENÉTICA DE POBLACIONES CON R, FACULTAD DE CIENCIAS, UNAM ENRIQUE

GENÉTICA DE POBLACIONES CON R, FACULTAD DE CIENCIAS, UNAM ENRIQUE SCHEINVAR, 2014

etc... etc... etc... Linux es el sistema del futuro :-). Linux es copyleft. Además, R es parte demuchas distribuciones de Linux.

PARA LINUXES SABOR UBUNTU VÍA REPOSITORIOS

Este método de instalación, se recomienda porque es específico para el sistema y baja toooooodoslos archivos necesarios para una instalación completa, los instala y configura.

Abre una consola de texto y escribe:$ sudo gedit /etc/apt/sources.list 

Esto va a abrir el archivo sources.list desde el editor de textos. Ve al final del documento y añande la siguiente línea:deb http://cran.cnr.berkeley.edu/bin/linux/ubuntu/ version/ En donde dice versión debes escribir tu versión de ubuntu (lucid, precise, quantal, saucy, trusty). Guarda y cierra el editor de texto.En la consola escribe SOLO UNA de estas dos líneas:$ gpg ­­keyserver keyserver.ubuntu.com ­­recv­key E084DAB9

$ gpg ­­hkp://keyserver keyserver.ubuntu.com:80 ­­recv­key E084DAB9

Y luego escribe: $ gpg ­a ­­export E084DAB9 | sudo apt­key add ­ $ sudo apt­get update $ sudo apt­get install R­base 

PARA LINUXES, INSTALACIÓN MANUAL

Ir a la página de R: http://www.r-project.org/ hacer click en la opción “CRAN” delmenú de la izquierda y seleccionar cualquiera de los servidores. Hacer click en “Download Rfor Linux” luego selecciona el sabor de tu linux (debian | redhat | suse | ubuntu),luego selecciona la versión particular de tu sabor; finalmente, descarga el archivo r-base-core en su versión más reciente (número más grande), ya sea para computadoras de 64bits (amd64) o de 34 bits (i386). Guarda el archivo y luego hazle doble click y sigue lasinstrucciones.

DESCARGAR E INSTALAR MANEJADOR DE R (OPCIONAL)Ya que tengas instalado el sistema R, puedes optar por utilizar un manejador de R. R funciona víaconsola, sin embargo, existen muchos manejadores de R (Rstudio, Rcomander, Rgedit, RKward,etc...), que aunque siguen siendo de consola (los buenos), tienen varias accesorios que te facilitan eluso de R(aunque gastan recursos como el ram). Recuerda que si quieres aprender R NO TE VAS ASALVAR DE LA CONSOLA, y no solo eso... te aseguramos que vas a aprender a preferir laconsola por sobre los botones y el mouse, ya que termina siendo más eficiente y rápido. En esteejemplo, vamos a instalar

Descarga el archivo de Rstudio : https://www.rstudio.com/

pica en Download now y luego en Download RStudio Desktop, haz click en

1.- Empezando con R Pg. 3

Page 4: 1.- EMPEZANDO CON R - evolucion.fciencias.unam.mxevolucion.fciencias.unam.mx/images/maestros/gabriela/00_Todo.pdf · GENÉTICA DE POBLACIONES CON R, FACULTAD DE CIENCIAS, UNAM ENRIQUE

GENÉTICA DE POBLACIONES CON R, FACULTAD DE CIENCIAS, UNAM ENRIQUE SCHEINVAR, 2014

donde esté tu sistema operativo (windwos, mac, ubuntu), descarga el archivo. Cuando finalice ladescarga, haz doble click sobre el ícono de instalación e instala.

Ejercicio 1. Instala R en tu máquina.

INICIAR R

Si estás en windows o mac, haz click sobre el ícono de R: o del manejador que estés usando.

Si estás en linux, abre una consola y escribe: $ R , si tienes el manejador de R, escribe su nombre:$ rstudio  ó haz doble click sobre el ícono del manejador (ej. Rstudio).

El símbolo   >   se conoce como “prompt” y es indicador de que R está listo para recibirinstrucciones.

GENERANDO OBJETOS (GUARDAR VARIABLES)R funciona a base de los llamados “objetos” de R, es decir, que todo “lo que le metemos” a R quedaguardado en distintos objetos (que pueden ser de muchos tipos: vectores, matrices, dataframes,funciones, etc...).

Para generar un objeto se utiliza los símbolos:  <­  (menor que y ralla media) y la sintaxis:

> NombreDelObjeto <- ContenidoDelObjetoNota: R también puede usar el símbolo = como alias de <-. pero NO TE LO RECOMENDAMOS,ya que muchísimos paquetes usan el símbolo = = como IGUALDAD matemática y si teacostumbras a utilizarlo, puedes llegar a COMETER ERRORES mejor usa <- .

De esta forma, podemos guardar los datos de un niño de 3 años llamado Camilo en diferentesvariables:

> nombre <­ “Camilo”   # las variables de tipo caracter se indican entre comillas. Si no lasescribes entre comillas, entonces R entiende que se trata del objetocuyo nombre el Camilo.

> nombre  # solicita el contenido del objeto nombre

> copiaNombre <­ nombre  # si indicas nombre sin comillas, entonces R guarda el objetollamado nombre en el objeto llamado copiaNombre (hace unacopia del objeto)

> copiaNombre  # solicita el contenido del objeto copiaNombre

> copiaNombre <­ “nombre”  # si utilizas el mismo nombre de objeto, R sobreescribeel anterior.

> copiaNombre  # solicita el contenido del objeto copiaNombre

> edad <­ 3  # las variables numéricas no se indican entre comillas.> edad 

> masculino <­ TRUE   # las variables lógicas utilizan TRUE, FALSE> masculino 

> ls ( )   # El comando ls (con argumento vacío) enlista todos los objetos generados en la

1.- Empezando con R Pg. 4

Page 5: 1.- EMPEZANDO CON R - evolucion.fciencias.unam.mxevolucion.fciencias.unam.mx/images/maestros/gabriela/00_Todo.pdf · GENÉTICA DE POBLACIONES CON R, FACULTAD DE CIENCIAS, UNAM ENRIQUE

GENÉTICA DE POBLACIONES CON R, FACULTAD DE CIENCIAS, UNAM ENRIQUE SCHEINVAR, 2014

sesión.

El principio básico de R es que se pueden hacer operaciones matemáticas con las variables:> edad * 10 

> resultado <­ (edad * 10) + ( (4 – 1) / 1.5 ) 

> resultado 

> edad == 4  # la operación de igualdad se indica con doble igual> edad < 5 

> nombre == “Camilo” | nombre == “Ernesto” & edad < 5   # la operación lógica ó(OR) se indica con elsímbolo | (pipe) y elsímbolo Y (AND) seindica con & (and)

Para borrar objetos del sistema se usa rm (remove):

> ls ( )  # para ver los objetos creados.[1] "copiaNombre" "edad"  "masculino"   "nombre"     

[5] "resultado" > rm ( “resultado” , “copiaNombre” , “masculino” )  # borra los objetos enlistados.

Siempre van entre comillas yseparados por comas.

> ls ( ) 

Ejercicio2. Escribe los comandos para generar los siguientes objetos (no escribas el símbolo de prompt y escribe un solo comando en cada línea): a) objeto “nombre” en el que introduzcas tu nombre; b) objeto “apellido” donde introduzcas tu primer apellido; c) objeto “nace” en el que introduzcas el año de tu nacimiento. d) objeto “edad” en donde se calcule tu edad a partir del objeto nace. e) objeto “mayoria1” donde se calcule, a partir del objeto edad, si eres (TRUE) o no eres (FALSE) mayor a 17 años pero menor a 20; f) objeto “mayoria2” donde se calcule, a partir del objeto edad, si eres mayor o igual a 20 años pero menor a 22; g) objeto “mayoria3” donde calcule, a partir del objeto edad, si eres mayor o igual a 22 años; h) objeto “freqH” que calcule la frecuencia de hombres de un salón con 15 hombres y 24 mujeres

TERMINAR Rdesde la consola de R, escribe:> q () 

Save workspace image? [y/n/c]:  # en esta opción te está preguntando si quieres guardartoda tu sesión (sí/no/cancelar). En caso de queindiques y, genera un archivo oculto en la carpeta detrabajo y si vuelves a ejecutar R desde esa carpeta,entonces recuperas todo lo que habías hecho)

1.- Empezando con R Pg. 5

Page 6: 1.- EMPEZANDO CON R - evolucion.fciencias.unam.mxevolucion.fciencias.unam.mx/images/maestros/gabriela/00_Todo.pdf · GENÉTICA DE POBLACIONES CON R, FACULTAD DE CIENCIAS, UNAM ENRIQUE

GENÉTICA DE POBLACIONES CON R, FACULTAD DE CIENCIAS, UNAM ENRIQUE SCHEINVAR, 2014

COMANDOS GENERALES ÚTILES

A continuación enlistamos algunos comandos generales del sistema que te van a ser útiles siempreque uses R.

> help ( )  # help muestra la ayuda del comando indicado dentro del paréntesis. Si no seindica nada, muestra la ayuda del comando “help”. Pica la tecla q q para salir de laayuda.

> help ( lm )  # muestra la ayuda del comando “lm”

> ? lm  # ? es sinónimo de help.

> example ( lm )  # muestra y ejecuta un ejemplo del comando indicado. En este caso, el de elcomando lm (linear model)

> data ( )  # Cuando data se ejecuta vacío, genera el listado de todos los datos de ejemploque tiene cargado R. Pica la tecla q q para salir.

> data ( women )  # Cuando se ejecuta con el nombre de uno de los datos de ejemplo, cargalos datos en un objeto de R con el mismo nombre.

> ls ( )  # ls muestra el listado de objetos de R guardados en el sistema.

> women  # luego de cargar data, se pueden ver los datos invocándolos con su nombre.

> vignette ( )   # Cuando vignette se ejecuta vacío, muestra un listado con todos losdistintos tutoriales de cada uno de los paquetes.

> R.Version ( )  # R.Version muestra todas las características del sistema y de R

> history ( )  # history muestra el historial de todos los comandos que se han escrito en lasesión de R.

> savehistory ( “ArchivoConHistorial_clase1.txt” )  <- savehistory guarda elhistorial en un archivo de texto simple en lacarpeta de trabajo.

flecha arriba flecha arriba y flecha abajoflecha abajo # las flechas hacia arriba y hacia abajo van mostrando loscomandos previamente utilizados en la sesión de R.Son muy útiles para no estar escribiendo varias veces elmismo comando.

TabuladorTabuladorTabuladorTabulador. R, tiene un sistema inteligente de predicción de escritura. Cuandopicas tabulador dos veces, el sistema busca predecir lo que le quieresescribir, por ejemplo, vamos a buscar el comando mahalanobis:

> mTabTabTabTab # escribe m y luego pica dos veces tabulador. R comprende que estás buscando uncomando que inicia con m, así que te muestra todos los que inician con m.

> maTabTabTabTab # escribe ma y luego pica dos veces tabulador.

> mahTabTab TabTab # escribe mah y luego pica dos veces tabulador.

> mahalanobis ( TabTabTabTab # escribe el comando completo, abre paréntesis y luego dos vecestabulador. R comprende que ya escribiste el comando y ahora lo

1.- Empezando con R Pg. 6

Page 7: 1.- EMPEZANDO CON R - evolucion.fciencias.unam.mxevolucion.fciencias.unam.mx/images/maestros/gabriela/00_Todo.pdf · GENÉTICA DE POBLACIONES CON R, FACULTAD DE CIENCIAS, UNAM ENRIQUE

GENÉTICA DE POBLACIONES CON R, FACULTAD DE CIENCIAS, UNAM ENRIQUE SCHEINVAR, 2014

que quieres es ver las opciones del comando.

> getwd ( )  # getwd muestra la carpeta de tu computadora en la que estás ejecutando R, esdecir, muestra la ruta activa de ejecución de R. Generalmente es la carpetadesde la que iniciaste tu sesión de R. pero puede ser otra.

> setwd (“../ruta/donde/quiero/ejecutar/R/”) # setwd cambia la ruta de ejecuciónde la sesión de R por la nueva que se le indique (si usasTabTab dentro de las comillas, R predice y te muestra lasopciones de ruta; usa doble punto .. para subir un nivelde carpeta.)

> list.files()  # muestra la lista de archivos y carpetas de la ruta activa.

Ejercicio. Revisa el comando help de los siguientes comandos e indica: a) para qué sirve elcomando b) cual es la sintaxis para su uso (usage) y c) cuales son los argumentos que se le tienenque indicar:

sink(),

INSTALANDO Y ACTIVANDO LIBRERÍAS

Una de las grandes ventajas de R, es que cualquier persona puede escribir un conjunto deinstrucciones en un archivo y construir una función que puede compartir con cualquier otra persona.Estas funciones (escritas en formato especial) se almacenan en archivos llamados librerías. Laslibrerías suelen estar disponibles en el CRAN de R y cualquier usuario puede descargarlas,instalarlas, activarlas y utilizarlas. Por ejemplo, la librería “raster” le “enseña” a R funciones paraprocesar imágenes SIG tipo raster, la librería “ape” le “enseña” a R funciones filogenéticas, etc...etc.. etc....

Las librerías son archivos que se instalan en una carpeta predeterminada de R y que cuando serequiera, se le puede solicitar a R que las “active” o “desactive”, de esta forma no todas las libreríasestán activas todo el tiempo y no saturamos la memoria de R.

> search ( )   # este comando (con argumento vacío) muestra la lista de paquetes activos(cargados y listos para usarse)

> library ( )  # este comando (con argumento vacío) muestra la lista de todos los paquetesinstalados en R (activos o no)

Muchas librerías están escritas directamente en R, por lo que no necesitan nada más que el mismosistema R para ser instaladas, pero existen muchas otras que están escritas en otros lenguajes deprogramación o utilizan librerías no incluidas en R que necesitas instalar en tu computadora primeroindependientemente de R, por ejemplo, muchas de ellas requieren C++, algunas otras utilizanfortran, etc... Para eso necesitar ir al CRAN y revisar, en la página específica de la librería, lasdependencias que require (en Depends) y que si no tiene, vas a tener que instalar, así como lasfunciones (y/o programas) que va a requerir importar (en Imports) e igualmente, si no las tienes,vas a tener que instalar primero. En algunos casos, viene otro apartado “SystemRequirements” quetambién debes de revisar.

Ejercicio3. Entra a la página: http://www.cran.r-project.org/ y luego en la opción CRAN -> Task Views. Revisa las secciones: Genetics, Phylogenetics, Spatial y una

1.- Empezando con R Pg. 7

Page 8: 1.- EMPEZANDO CON R - evolucion.fciencias.unam.mxevolucion.fciencias.unam.mx/images/maestros/gabriela/00_Todo.pdf · GENÉTICA DE POBLACIONES CON R, FACULTAD DE CIENCIAS, UNAM ENRIQUE

GENÉTICA DE POBLACIONES CON R, FACULTAD DE CIENCIAS, UNAM ENRIQUE SCHEINVAR, 2014

cuarta más que elijas. De cada una de las secciones, busca una librerías que creas que valga la pena instalar. Explica para qué sirven.

A continuación vamos a aprender a instalar una librería desde el CRAN. Por ejemplo, la librería“adegenet”.

> install.package ( “adegenet” )   #install.package se usa para instalar unpaquete. Eentra a internet, baja el archivo delpaquete y lo instala.

Installing package into ‘/usr/local/R/linux­gnu­library/3.1’ 

(as ‘lib’ is unspecified) 

­­­ Please select a CRAN mirror for use in this session ­­­ 

Va a salir una ventana con un listado de todos los servidores CRAN de R. Selecciona uno cualquieraal azar. Cualquiera de ellos debe tener los mismos paquetes en el mismo idioma (no creas que losservidores de México -que, se encuentran en el ITAM o en el Colegio de Posgraduados- tienen lospaquetes en español). Todos los paquetes están en inglés.

Revisa que la instalación no indique ningún error. Felicidades, ya tienes instalado el paqueteadegenet!!!

Nota: Muchos paquetes requieren que tu máquina tenga instalado algún compilador de C++ ymuchos otros requieren de la instalación previa de otros paquetes, revisa la página de informacióndel CRAN. Por ejemplo, adegenet, requiere de la instalación previa de ade4.

Para activar un paquete ya instalado se usa el comando equire ó library:> require ( “adegenet” )  # activa la librería indicada

Para ver el manual de comandos del paquete:> help ( package = ”adegenet” )  

Para ver cómo citar el paquete:> citation ( “adegenet” ) 

Ejercicio4. En caso de no tenerlos instalados (revisa si ya están instalados), instala los paquetes: ape, pegas, adegenet, Geneland, phangorn, hierfstat. Para cada uno, reporta: a) para qué sirve; b) cómo se cita; c) si viene o no con ejemplos. d) si viene o no con vignette (tutorial); e) describe un comando importante de la librería (nombre, para qué sirve, sintaxis)

1.- Empezando con R Pg. 8

Page 9: 1.- EMPEZANDO CON R - evolucion.fciencias.unam.mxevolucion.fciencias.unam.mx/images/maestros/gabriela/00_Todo.pdf · GENÉTICA DE POBLACIONES CON R, FACULTAD DE CIENCIAS, UNAM ENRIQUE

GENÉTICA DE POBLACIONES CON R, FACULTAD DE CIENCIAS, UNAM ENRIQUE SCHEINVAR, 2014

2.- ENTORNO DE R

En esta práctica, se indica en  texto blanco sobre fondo negro  las instrucciones que debes de escribir en la consola de R. El símbolo  >  de la consola de R se conoce como “prompt” y es un indicador de que el programa R está listo para recibir órdenes. Se indica en texto blancosobre fondo gris, los textos de salida que muestra la consola de R (y que no necesitamos ingresar).

En primera instancia, establecemos la carpeta de trabajo: > setwd ( “C:/Genpobs” )  # Si tu máquina está en windows > setwd ( “~/Genpobs” )  # Si tu máquina está en linux ó mac (el símbolo ~ quiere decir: “/home/usuario/”).

Dentro de la ruta de trabajo, genera una carpeta llamada “~/Genpobs/prac2/”.

INICIAR R

Si estás en windows o mac, haz click sobre el ícono de R: o del manejador que estés usando.

Si estás en linux, abre una consola y escribe: $ R , si tienes el manejador de R, escribe su nombre:$ rstudio  ó haz doble click sobre el ícono del manejador (ej. Rstudio)

DATOS EN RR tiene diversas estructuras de datos:

a) Vectores: “listado” de elementos -una sola dimensión-, ya sean numéricos, de texto o lógicos(todos los elementos tienen que ser del mismo tipo); por ejemplo de texto: “Gaby”,“Jaime”,”Enrique”, “Lev” o numérico: 1,5,3,5,7,3,6 o lógico:TRUE,FALSE,TRUE,TRUE

b) Matríces: “tabla” de elementos, ya sean numéricos, de texto o lógicos ordenados en columnasy renglones – 2 dimensiones- (todos los elementos tienen que ser del mismo tipo):

alumno sexo edad

1 1 26

2 1 25

3 2 25

4 1 27

5 2 20

c) Arreglos: conjunto de “matrices” de elementos, ya sean numéricos, de texto o lógicosordenados en columnas y renglones – 3 dimensiones- (todos los elementos de todaslas matrices tienen que ser del mismo tipo):

salon1:

sexo edad

1 1 25

2 1 26

2.- Entorno de R Pg. 9

Page 10: 1.- EMPEZANDO CON R - evolucion.fciencias.unam.mxevolucion.fciencias.unam.mx/images/maestros/gabriela/00_Todo.pdf · GENÉTICA DE POBLACIONES CON R, FACULTAD DE CIENCIAS, UNAM ENRIQUE

GENÉTICA DE POBLACIONES CON R, FACULTAD DE CIENCIAS, UNAM ENRIQUE SCHEINVAR, 2014

salon2:

sexo edad

1 2 27

2 1 20

d) DataFrames: “tabla” en el que cada columna puede ser de un tipo distinto, ya seanuméricos, de texto o lógicos ordenados en columnas del mismo largo.

ID Nombre Edad Recursa

1 “Pepito” 25 FALSE

2 “Josefita” 47 TRUE

3 “Miguelito” 19 FALSE

e) Listas: Variable que guarda uno o más de cualquiera de los elementos anteriores: vector(es),matríz(ces), arreglo(s), dataframe(s) u otra(s) lista(s).

Tomado de Kabacoff RI (2011). R in Action. Data analysis and graphics with R. Edit. Manning Publications.

A continuación, vamos a aprender a generar y manipular cada uno de estos elementos.

VECTORES

Para generar un vector, se utiliza la función combine: c ( ) > a <­ c ( 4, 6, 3, ­6, 0)  #genera un objeto con un vector numérico.> a 

> b <­ c ( “Enrique”, “Gaby”,  “Jaime”, “Lev” )  # genera un objeto con un vectorde caracteres

> b 

> c <­ c ( TRUE, TRUE, FALSE, FALSE, TRUE)  # genera un objeto con un vector lógico> c 

> d <­ c (4, 5, 3, 4, 10, ­3, “a”, 5, 3, 23, ­9, 0)  # genera un objeto con unvector de caracteres> d 

> e <­ c ( b, “azul”, “blanco”, “verde” )  # genera un vector con el vector b.

2.- Entorno de R Pg. 10

Page 11: 1.- EMPEZANDO CON R - evolucion.fciencias.unam.mxevolucion.fciencias.unam.mx/images/maestros/gabriela/00_Todo.pdf · GENÉTICA DE POBLACIONES CON R, FACULTAD DE CIENCIAS, UNAM ENRIQUE

GENÉTICA DE POBLACIONES CON R, FACULTAD DE CIENCIAS, UNAM ENRIQUE SCHEINVAR, 2014

> e 

Para describir el contenido del objeto vector:

> class ( a )  # el comando class muestra el tipo de elementos que contiene el objeto.

> length ( b )  # length muestra el número de elementos que contiene el objeto

> is.numeric ( a )  # pregunta si el objeto es numérico (devuelve TRUE o FALSE)

> is.character ( a )  # pregunta si el objeto es caracter (devuelve TRUE o FALSE)

> f <­ as.character ( a )  # lo trata como si fuera caracter.> f 

Se pueden generar secuencias de números de manera muy simple:

> seq1 <­ c ( 1:5, 9, 3, 1:­2 )  # va a generar el vector: 1,2,3,4,5,9,3,1,0,-1,-2

> seq2 <­ seq(from=4, to=10, by=2)  # va a generar el vector: 4,6,8,10

> seq3 <­ rep(4, times=5)  # va a generar el vector: 4,4,4,4,4

Los elementos de un vector están numerados de uno hasta length(vector). Para solicitar elementosparticulares de un vector, se indica el número de elemento que se desea solicitar dentro de corchetesvector [ ] :

> seq <­ seq ( from = 1, to = 10, by = 0.1 )  # Generamos un vector.> length ( seq ) 

> seq 

> seq [ 2 ] 

> seq [ 7 ] 

> seq [ length (seq ) ] 

Dentro de los corchetes se puede indicar un vector que solicite varias posiciones:> seq 

> seq [ c( 2, 7:9, 14 ) ] 

Si se utiliza el símbolo menos dentro de los corchetes, se excluye el elemento negativo:> seq [  c ( ­1 :  ­80  )  ] 

También se puede hacer alguna proposición lógico/matemática dentro del corchete:> seq [ seq > 7.5 ]  

> seq [ seq > 1.5 & seq < 2.6 ] 

Ejercicio 1. Genera tres vectores: uno de caracteres con los nombres de los integrantesdel grupo, un segundo vector lógico en el que indiques si son mujeres o no (TRUE,FALSE), y un tercer vector numérico en el que indiques sus edades. Los datos de lostres vectores deben estar en el mismo orden (una posición por cada individuo).Finalmente, escribe el código para un cuarto vector que solo muestre, a partir de losvectores anteriores, los nombres de las mujeres mayores a 23 años.

2.- Entorno de R Pg. 11

Page 12: 1.- EMPEZANDO CON R - evolucion.fciencias.unam.mxevolucion.fciencias.unam.mx/images/maestros/gabriela/00_Todo.pdf · GENÉTICA DE POBLACIONES CON R, FACULTAD DE CIENCIAS, UNAM ENRIQUE

GENÉTICA DE POBLACIONES CON R, FACULTAD DE CIENCIAS, UNAM ENRIQUE SCHEINVAR, 2014

MATRICES

Para generar una matríz, se utiliza el comando matrix y se utiliza la siguiente sintaxis:

matrix ( valores , nrow = #deRenglones, ncol = #deColumnas, byrow = TRUE )> valores <­ c (“hora1”,  “bicho1”, “hora2”, “bicho2”, “hora3”, “bicho3”)

# genero el vector con los valores.> ja <­ matrix ( valores, nrow = 3, ncol = 2, byrow = FALSE ) 

> ja 

> ja <­ matrix ( valores, nrow = 3, ncol = 2, byrow = TRUE ) 

> ja 

Podemos ver algunas características de la matríz:

> class ( ja )  # nos muestra el tipo de objeto

> ncol ( ja )  # muestra el número de columnas

> nrow ( ja )  # muestra el número de renglones

> length ( ja )  # muestra el número de celdas

> colnames ( ja )  # colnames muestra un vector con los nombres de lass columnas

> colnames ( ja ) <­ c (“Hora”, “Bicho”)   # le asignamos un vector de valores > ja 

> intermedio <­ c ( 1 : nrow (ja) )  # genero un vector con números desde 1 hasta 3

> rownames ( ja ) <­ intermedio  # asigno nombres a los renglones> ja 

También se pueden generar matrices vacías:> je <­ matrix (nrow = 5, ncol = 4) 

> je 

Los valores de una matríz están organizados en coordenadas (igual que excel) en el formato:(renglón, columna). Para solicitar elementos particulares de una matríz, solo se tiene que indicar lascoordenadas entre corchetes: [ renglón , columna ] .> ja 

> ja [1,2]  # solicita renglón uno columna dos

> ja [2,1]  # solicita renglón dos, columna uno

También puedes usar vectores dentro de este sistema:

> ja [ c(1,3) , 1 ]  # solicita los renglones uno y tres de la columna uno

Si no indicas la columna o el renglón, R entiende que quieres todos:

> ja [ , 1 ]  # toda la columna uno

> ja [ 1 , ]  # todo el renglón uno.

Si las columnas o renglones tienen nombre, puedes solicitarlos por su nombre:

>  ja [ 2, “Bicho” ]  # solicita renglón dos de columna “Bicho”

2.- Entorno de R Pg. 12

Page 13: 1.- EMPEZANDO CON R - evolucion.fciencias.unam.mxevolucion.fciencias.unam.mx/images/maestros/gabriela/00_Todo.pdf · GENÉTICA DE POBLACIONES CON R, FACULTAD DE CIENCIAS, UNAM ENRIQUE

GENÉTICA DE POBLACIONES CON R, FACULTAD DE CIENCIAS, UNAM ENRIQUE SCHEINVAR, 2014

De la misa manera, se puede asignar o modificar el valor de una matríz:> je 

> je [ 3 , 2 ]  <­ 456 

> je 

> je [ , 1 ]  <­ c(38,405,49,0,23) 

> je 

> je [ 4, 1 ] <­ 567 

> je 

Ejercicio 2. Investiga para qué es y como funciona el comando sample. Escribe un comando que genere una matríz nombrada “MyDatos” de 5 columnas por 10 renglonescon números aleatorios entre uno y 20. Escribe un comando que reescriba con NA todas las celdas de “MyDatos” con valores menores a 6. Escribe un comando que genere una nueva matríz nombrada “MyDatos2” con las columnas uno, tres y cinco multiplicadas por 10 de la matríz “MyDatos”.

DATA.FRAME

Los dataframe son muy parecidos a las matrices pero tienen la ventaja de que cada columna puedetener elementos diferentes (aunque dentro de la columna no se permite mezclar). Los datos de SNP(Single Nucleotide Polymorphisms) suelen venir en data.frames.

Para generar un dataframe, se utiliza el comando data.frame:> ja <­ data.frame ( 

ID= c(1:5),  # genera una columna llamada ID con números 1 a 3Nombre = c(“Miguel”, “Francisco”, “Julieta”, “Ana”, “Raul”), 

Hombre = c (rep(TRUE,2),rep(FALSE,2),TRUE),  Puntos = c( 47, 53, 20, 45, 38 ), 

Tareas = c( 10, 12, 6, 9, 7 ), 

Puntualidad = c (F,T,T,F,T)  # se puede usar F y T en lugar de TRUE y FALSE.) 

> ja 

Para ver características:> class ( ja ) 

> nrow ( ja ) 

> ncol ( ja ) 

> length ( ja ) 

> rownames ( ja ) 

> colnames ( ja ) 

> names ( ja )  # en data.frames, es sinónimo de colnames

2.- Entorno de R Pg. 13

Page 14: 1.- EMPEZANDO CON R - evolucion.fciencias.unam.mxevolucion.fciencias.unam.mx/images/maestros/gabriela/00_Todo.pdf · GENÉTICA DE POBLACIONES CON R, FACULTAD DE CIENCIAS, UNAM ENRIQUE

GENÉTICA DE POBLACIONES CON R, FACULTAD DE CIENCIAS, UNAM ENRIQUE SCHEINVAR, 2014

Para solicitar o referirse a una columna en específico, se usa el símbolo $ :> names ( ja ) 

> ja$Nombre 

> ja$Puntos 

O también puedes usar el mismo sistema que en las matrices:> ja [ 1, 4 ] 

> ja [ , 2 ] 

> ja [ 2 , ] 

> ja [ 4 , “Puntos”] 

> ja [ c(3,4), c(2,3) ] 

> ja [ 5, 2 ] <­ “Julio” 

> ja 

Ejercicio 3. Genera un data.frame nombrado “grupo” en el que cada renglónrepresente a un miembro del grupo y donde incluyas los campos: ID, nombre, apellido,sexo, estatura, edad, y presencia (TRUE) o ausencia (FALSE) de los siguientescaracteres: pico de viuda, taco de lengua, y lobulo de oreja pegado.

LISTAS

Primero generamos dos vectores y dos data.frames > estado <­ c ( “GRO”,  “HGO” ) 

> TamMtra <­ c ( 340, 506, 320, 456, 672 ) 

> tratamiento <­ matrix ( c(1:4),  nrow=2, ncol=2 ) 

> mtras <­ matrix( c(15:4), nrow=3, ncol=4) 

Genero la lista:> Mylista <­ list (Edo=estado, N=TamMtra, 

trat=tratamiento, mtras=matras ) 

> Mylista 

describo la lista:> class( Mylista )  

> names ( Mylista ) 

> length ( Mylista ) 

solicito datos:> Mylista 

> Mylista [ [ 2 ] ] 

> Mylista [ [ 2 ] ] [ 3 ] 

> Mylista$Edo  

2.- Entorno de R Pg. 14

Page 15: 1.- EMPEZANDO CON R - evolucion.fciencias.unam.mxevolucion.fciencias.unam.mx/images/maestros/gabriela/00_Todo.pdf · GENÉTICA DE POBLACIONES CON R, FACULTAD DE CIENCIAS, UNAM ENRIQUE

GENÉTICA DE POBLACIONES CON R, FACULTAD DE CIENCIAS, UNAM ENRIQUE SCHEINVAR, 2014

> Mylista$Edo[ 1 ] 

> names(Mylista) 

> Mylista$mtras 

> Mylista[ [ 4 ] ] [ 2, 4 ] 

SCRIPTS

Cierra R. Abre un editor de texto simple (como “Block de Notas”, “Word Pad”, “Gedit” “emacs”“vi”, etc... PERO NUNCA WORD!!!! ), escribe el texto que esgtá en el recuadro de abajo (tenmucho cuidado en copiarlo EXACTAMENTE IGUAL!!!! ) y guárdalo en un archivo llamado:~/GenPobs/prac2/MyPrimerPrograma.R

MyPrimerPrograma.R:

########################################### Inicio de script

# toda linea que inicie con símbolo de número no se lee!!!

print ("Hola Mundo!!!");

nombre <- readline(prompt="Escribe tu nombre:")

edad <- readline(prompt="Escribe tu edad:")

edad<- as.numeric(edad)

fechaHoy<-Sys.time()

YearHoy <- format(fechaHoy,"%Y")

YearHoy <- as.numeric(YearHoy)

nace<-YearHoy-edad

print( paste("Hoy es:",fechaHoy,sep=" ") )

print( paste("Hola ",nombre,", naciste en ",nace,sep="") )

############################################ Termina el script

Entra a R y ve a la ruta de trabajo:

> setwd ( “C:/GenPobs” )  # Si tu máquina está en windows> setwd ( “~/Genpobs” )  # Si tu máquina está en linux ó mac> help ( source )   # Revisa qué hace el comando source.

Ejecuta el comando source para ejecutar el archivo que acabas de escribir: > source ( “./prac2/MyPrimerPrograma.R” )  # “./” quiere decir, “en esta carpeta”

Felicidades !!! acabas de escribir tu primer código fuente y de ejecutar tu primer programa de cómputo!!!!!.

Ejercicio4. Investiga qué hacen las funciones: print, readline, Sys.time, format, paste

2.- Entorno de R Pg. 15

Page 16: 1.- EMPEZANDO CON R - evolucion.fciencias.unam.mxevolucion.fciencias.unam.mx/images/maestros/gabriela/00_Todo.pdf · GENÉTICA DE POBLACIONES CON R, FACULTAD DE CIENCIAS, UNAM ENRIQUE

GENÉTICA DE POBLACIONES CON R, FACULTAD DE CIENCIAS, UNAM ENRIQUE SCHEINVAR, 2014

LEYENDO ARCHIVOS CSV

Seguramente te va a interesar saber cómo leer archivos CSV. Los CSV son archivos de textosimple con campos en columnas y renglones separados por algún delimitador de campo (suele seralguno de los siguiente: coma, tabulador, espacio o punto y coma). Todos los documentos de excel,pueden exportarse a CSV (en Archivo -> Guardar como -> Guardar como tipo: CSV ó Guardarcomo tipo: texto).

Se usa el comando read.table. En este ejemplo, vamos a leer un archivo llamado"~/GenPobs/basesdedatos/PotvinEtal1990_CO2Plantas.csv” (Potvin, C., Lechowicz, M. J. andTardif, S. 1990. Ecology, 71:1389–1400). Primero, abre un editor de textos simple (Block de notas,gedit, emacs, vi, etc...) y revisa el contenido y estructura del archivo, luego en Excel y abre elmismo archivo; finalmente, ve a R y ejecuta:

> help (read.table) 

> Mytabla <­  read.table ( 

file = “~/Genpobs/basesdedatos/PotvinEtal1990_CO2Plantas.csv” ,

header = TRUE ,  # como viste, el archivo sí trae cabecera

sep = “,” ,  # como viste, el archivo está separado por comas (para tabulador, usa “\t”)

quote = FALSE ,  # para que no ponga en comillas el texto.

na.strings = NA ,  # símbolo de NA ) 

> Mytabla 

> names ( Mytabla ) 

> colnames ( Mytabla ) 

> rownames ( Mytabla ) 

ESCRIBIENDO ARCHIVOS CSV

Para escribir una matriz, data.frame, o casi cualquier tabla en un archivo de texto simple tipo csv, seutiliza el comando write.table:> help ( write.table ) 

Primero generamos una matriz:

> ja <­ matrix(sample(1:100,200,replace=TRUE),nrow=20,ncol=10) #genero matriz

> rownames(ja)<­ paste("Ind",1:nrow(ja),sep="") # le pongo nombres a los renglones

> colnames(ja)<­ paste("Var",1:ncol(ja),sep="_")  # le pongo nombres a las columnas

Escribo la matriz ja en un archivo:> write.table ( 

x = ja , 

file = "~/GenPobs/prac2/MyMatriz.csv" ,  # ruta y nombre del archivo

quote = FALSE ,  # No queremos que ponga comillas al texto

2.- Entorno de R Pg. 16

Page 17: 1.- EMPEZANDO CON R - evolucion.fciencias.unam.mxevolucion.fciencias.unam.mx/images/maestros/gabriela/00_Todo.pdf · GENÉTICA DE POBLACIONES CON R, FACULTAD DE CIENCIAS, UNAM ENRIQUE

GENÉTICA DE POBLACIONES CON R, FACULTAD DE CIENCIAS, UNAM ENRIQUE SCHEINVAR, 2014

sep = "\t" ,  # queremos que use tabulador como delimitador de campo

row.names = FALSE  # no queremos que escriba nombre de renglones.) 

Ejercicio5. Guarda un archivo llamado “~/GenPobs/prac2/Datos_Grupo.csv” que contenga el data.frame que generaste en la sección Data.frame de arriba.

DESCRIPTIVOS Y GRÁFICOS BÁSICOS

A continuación, vamos a aprender a hacer algunos descriptivos estadísticos básicos. Vamos autilizar el set de datos “trees” del paquete “datasets” (medidas de diámetro, altura y volumen de 31árboles de cereza; Ryan TA, Joiner BL, Ryan BF. 1976. The Minitab Student Handbook. DuxburyPress.)

Primero cargamos los datos:> data ( trees )  

> trees  

> names( trees ) 

> class ( trees ) 

> nrow ( trees ) 

> ncol ( trees ) 

Calculamos algunos estadísticos básicos:

> summary ( trees )  # calcula descriptivos básicos.

> max ( trees$Volume, na.rm = TRUE )  # calcula valor máximo

> min ( trees$Volume, na.rm = TRUE )  # calcula valor mínimo

> mean ( trees$Volume, na.rm = TRUE )  # calcula valor promedio

> sd ( trees$Volume, na.rm = TRUE )  # calcula desviación estándard

> var(trees, na.rm = TRUE )  # calcula matríz de varianzas

> cov (trees, use="everything", method="pearson")  # calcula matr. de covarianzas.

> cor (trees, use="everything", method="pearson")  # calcula matríz de varianzas.

Hacemos algunas gráficas básicas> help ( hist ) 

> hist( trees$Girth ) 

> hist( trees$Height ) 

> hist( trees$Volume ) 

> help ( boxplot ) 

> boxplot (trees$Girth, trees$Height, trees$Volume, names = 

c("Circ","Alt","Vol") ) 

> help ( plot ) 

2.- Entorno de R Pg. 17

Page 18: 1.- EMPEZANDO CON R - evolucion.fciencias.unam.mxevolucion.fciencias.unam.mx/images/maestros/gabriela/00_Todo.pdf · GENÉTICA DE POBLACIONES CON R, FACULTAD DE CIENCIAS, UNAM ENRIQUE

GENÉTICA DE POBLACIONES CON R, FACULTAD DE CIENCIAS, UNAM ENRIQUE SCHEINVAR, 2014

> plot (trees$Girth,trees$Height)

> plot (trees$Girth,trees$Volume)

> plot (trees$Height,trees$Volume)

Podemos enviar algunas gráficas a jpg, tiff, png, pdf o postscript:> pdf ( "~/GenPobs/prac2/Trees1.pdf" )  # abre el pdf en la ruta y nombre indicados> plot ( trees$Girth , trees$Volume )  # manda esta gráfica al pdf> boxplot (trees$Girth , trees$Volume )  # manda esta gráfica al pdf> dev.off ( )  # finaliza el pdf

> png ( "~/GenPobs/prac2/Trees1.png" )> plot ( trees$Girth , trees$Volume ) > dev.off ( ) 

> jpeg ( "~/GenPobs/prac2/Trees1.jpg" ) > plot ( trees$Girth , trees$Volume ) > dev.off ( ) 

> postscript ("~/GenPobs/prac2/Trees1.ps" ) > plot ( trees$Girth , trees$Volume ) > dev.off ( ) 

Ejercicio6. Lee el archivo “~/GenPobs/prac2/Datos_Grupo.csv” que tu mismo generaste en la sección “Escribiendo archivos csv”. Calcula parámetros estadísticos básicos, genera las gráficas necesarias y describe los datos. Revisa para qué sirve la funcion sink.

2.- Entorno de R Pg. 18

Page 19: 1.- EMPEZANDO CON R - evolucion.fciencias.unam.mxevolucion.fciencias.unam.mx/images/maestros/gabriela/00_Todo.pdf · GENÉTICA DE POBLACIONES CON R, FACULTAD DE CIENCIAS, UNAM ENRIQUE

GENÉTICA DE POBLACIONES CON R, FACULTAD DE CIENCIAS, UNAM ENRIQUE SCHEINVAR, 2014

3.- BASES DE DATOS DE GENÉTICA DE POBLACIONES

En esta práctica, se indica en  texto blanco sobre fondo negro  las instrucciones que debes de escribir en la consola de R. El símbolo  >  de la consola de R se conoce como “prompt” y es un indicador de que el programa R está listo para recibir órdenes. Se indica en texto blancosobre fondo gris, los textos de salida que muestra la consola de R (y que no necesitamos ingresar); en fondo gris con relieve blanco, se muestran las teclas teclas a escribir.

En primera instancia, establecemos la carpeta de trabajo: > setwd ( “C:/Genpobs” )  # Si tu máquina está en windows > setwd ( “~/GenPobs” )  # Si tu máquina está en linux ó mac (el símbolo ~ quiere decir:

“/home/usuario/”).

Dentro de la ruta de trabajo, genera una carpeta llamada “~/Genpobs/prac3/”.

En genética de poblaciones existen muchos formatos (quizá demasiados) para guardar informaciónde genotipos (prácticamente, cada programa utiliza uno propio): genepop, arlequin, fstat, beast,mrbayes, tffpga, etc... En esta sección vamos a aprender a generar bases de datos genotípicas apartir de un gel electroforético (a formato genepop y arlequín), de secuencia a partir de uncromatograma (a formato fasta) y de SNP a partir de un data.frame. Luego vamos a aprender cómoingresar estos formatos a R.

También existen muchas formas de ingresar esta información a R. En esta sección vamos a vercómo ingresar la información de formato Genepop y fasta y también vamos a ver como convertirlaen otros formatos útiles para algunas otras librerías y/o programas de genética de poblaciones.

EL FORMATO GENEPOP

El formato genepop, fue desarrollado para el ser utilizado en el programa Genepop(http://kimura.univ-montp2.fr/~rousset/Genepop.htm) escrito por Raymond & Rousset (J Hered.1995. 86:248-249 y Mol. Ecol. 2008. 8:103-106). Es un formato muy sencillo, escrito en unarchivo de texto simple (ej. block de notas, gedit o emacs) que permite describir datos genotípicosde individuos en poblaciones (no se utiliza para secuencias).

El formato Genepop (http://genepop.curtin.edu.au/help_input.html) tiene las siguientes características:

- Primer línea: Texto libre con información sobre los datos.- Segunda línea: Nombre del primer locus Tercera línea: Nombre del segundo locus etc...- palabra “POP” par indicar inicio de primer población- nombre del individuo una coma y luego los genotipos de c/loci separados por espacios: individuo1, 0202 4546 0102 5757 <-se genotiparon cuatro loci para el individuo1.

Si por algún motivo no se puede tener los datos de algún loci (missing data), se indica como 00. A

3.- Bases de datos de Genética de Poblaciones Pg. 19

Page 20: 1.- EMPEZANDO CON R - evolucion.fciencias.unam.mxevolucion.fciencias.unam.mx/images/maestros/gabriela/00_Todo.pdf · GENÉTICA DE POBLACIONES CON R, FACULTAD DE CIENCIAS, UNAM ENRIQUE

GENÉTICA DE POBLACIONES CON R, FACULTAD DE CIENCIAS, UNAM ENRIQUE SCHEINVAR, 2014

continuación, te presentamos un ejemplo de formato gene pop.

“minipop.gen” :

Cinco loci, 2 poblaciones con 5 individuos en cada unaLoc1 Loc2Loc3Loc4 Y-linked

POP AA8, 0405 0711 0304 0000 0505 AA9, 0405 0609 0208 1010 0505 A10, 0205 0609 0101 1010 0305 A11, 0405 0606 0102 1010 0504 A12, 0202 0609 0105 0000 0507 PopAF, 0000 0000 0000 1010 0505 AF, 0205 0307 0102 0000 0505 AF, 0202 0609 0202 0000 0505 AF, 0205 0909 0000 0000 0505 AF, 0205 0307 0202 1010 0505

Ejercicio 1. Para los datos contenidos en el recuadro anterior “minipop.gen”, determina el número de poblaciones y número de loci; para cada loci de cada población calcula (a mano): número de alelos, frecuencias genotípicas observadas y frecuencias alélicas observadas.

Los archivos de entrada para los programas de genética de poblaciones (como Genepop) sonarchivos de texto simple, por lo que pueden ser generados, editados, y/o visualizados con unprograma de texto simple como Block de notas o Word pad (en windows), gedit, emacs, vi (enlinux) o textedit (mac). NUNCA se debe usar word para editar, abrir o guardar un archivo deentrada, pues word (o cualquier otro equivalente) guarda en el archivo caracteres ocultos de formato(tipo de hoja, tipo de letra, tamaño, etc.. etc..).

Ejercicio 2. Con el objeto de conocer los niveles de variación genética de las poblaciones de Bicho bola (diploides) localizadas en Tehuacán Puebla (18° 25' 50'' N y97° 30' 13'' O) y en Metztitlán Hidalgo (20° 34' 10'' N y 98° 45' 00'' O) , mediante PCRse amplificaron cuatro loci de microsatélite (marcador que segrega de manera codominante) desarrollados ex-profeso para el estudio: Ag24 [AC], Ag27 [TC], Ag49 [TGA] y Ag53 [GC]. En cada una de las poblaciones se colectaron 20 individuos. Losgeles electroforéticos finales se muestran en el archivo: “~/GenPobs/basesdedatos/MicrosBichoBola_2pobs.pdf”. Genera el archivo genepop de este experimento en: “~/GenPobs/prac3/MicrosBichoBola_2pobs.gen”)

3.- Bases de datos de Genética de Poblaciones Pg. 20

Page 21: 1.- EMPEZANDO CON R - evolucion.fciencias.unam.mxevolucion.fciencias.unam.mx/images/maestros/gabriela/00_Todo.pdf · GENÉTICA DE POBLACIONES CON R, FACULTAD DE CIENCIAS, UNAM ENRIQUE

GENÉTICA DE POBLACIONES CON R, FACULTAD DE CIENCIAS, UNAM ENRIQUE SCHEINVAR, 2014

INGRESAR A R DESDE FORMATO GENEPOP {ADEGENET}Existen varias librerías diseñadas para leer y entender el formato GenePop en R. En esta practica vamos a usar la librería adegenet. Si no la tenemos instalada, entonces la instalamos:> install.packages ( “adegenet”, dependencies=TRUE )   # instala el paquete

adegenet y todos lodemás paquetes querequiere adegenet

Nota: revisa http://cran.r-project.org/web/packages/adegenet/index.html; adegenet, requiere lainstalación previa del paquete ade4.

Ejercicio 3. Abre un editor de texto simple y revisa el contenido del archivo “~/GenPobs/basesdedatos/Agaves_genepop.gen”. ¿Cuántos loci tiene? ¿cuantas poblaciones? ¿cuántos individuos en cada población? ¿cuántos alelos tienen los loci?

Para leer un archivo de genepop con la librería adegenet, usamos el comando read.genepop:

> require (adegenet)  #cargar la librería

> help ( adegenet )  # ver manual del paquete

> help (read.genepop)  # ver manual del comando

Ejercicio 4. ¿Qué función tiene la opción missing del comando read.genepop?.

> gen <­ read.genepop (file="~/GenPobs/basesdedatos/Agaves_genepop.gen", 

missing=NA)   # Leemos el archivo tipo genepop ygeneramos un objeto de R tipo genind (tipo especial delpaquete adegenet)

> class ( gen ) 

> gen 

Los objetos genind son objetos especiales de R generados y leídos por la libreríaadegenet que contienen toda la información (y de hecho un poco más) contenida en el archivogenepop; para ver toda la información de un objeto de este tipo, usamos el símbolo “@” precedidopor el nombre del objeto del que queremos obtener la información:

> gen@tab  # contiene la matriz de frecuencias alélicas; Si se ingresan individuos,la matríz muestra la frecuencia del alelo por individuo (si son diploides:1=homócigo; 0.5= heterócigo); cada columna es un alelo de un locus, porejemplo: L01.1 (Locus1.alelo1). Si se ingresan poblaciones, muestra lasfrecuencias alélicas por población.

> gen@tab[1:5,1:10]  # Matriz de frecs. alelics. solo pedimos los renglones uno a cinco y lascolumnas uno a diez

[email protected]  # muestra el número de alelos totales por población

> gen@type  # Indica el tipo de datos codominantes o dominates (pres/aus)

3.- Bases de datos de Genética de Poblaciones Pg. 21

Page 22: 1.- EMPEZANDO CON R - evolucion.fciencias.unam.mxevolucion.fciencias.unam.mx/images/maestros/gabriela/00_Todo.pdf · GENÉTICA DE POBLACIONES CON R, FACULTAD DE CIENCIAS, UNAM ENRIQUE

GENÉTICA DE POBLACIONES CON R, FACULTAD DE CIENCIAS, UNAM ENRIQUE SCHEINVAR, 2014

Para ver el TOODA la información contenida en el objeto, usamos el comando attributes: > gen 

> attributes ( gen ) 

Otros comandos para solicitar Y EDITAR información de un objeto tipo genind son:

> nInd(gen)  # muestra el número total de individuos

> nLoc(gen)  # muestra el número de loci

> indNames(gen)  #muestra el nombre de los individuos

> locNames(gen)  # muestra el nombre de cada uno de los loci

> alleles(gen)  # muestra una lista con los nombres de cada uno de los alelos para cada uno delos loci

> alleles(gen)[[ 1 ]]  # llamamos los nombres de cada uno de los alelos del primer locus

> ploidy(gen)  # muestra la ploídía

> pop (gen)  # Indica la población de cada uno de los individuos

Si deseas cambiar alguno de estos elementos (por ejemplo, el nombre de los loci):> locNames(gen) 

> locNames(gen)  <­  c( “micro1”, “micro2”, “micro3”,  “micro4”, 

“micro5”, “micro6”, “micro7”, “micro8”, 

“micro9”, “micro10” ) 

> locNames(gen) 

Para cambiar el nombre de los individuos, podemos usar indNames(gen) <­ c(nuevos valores ).> indNames (gen) 

> pop ( gen )  <­  c( rep(“Pob1”, 30 ) , rep(“Pob2” 30),  ....  ) 

Ejercicio 5. Genera un objeto genind con el archivo formato genepop "~/GenPobs/prac3/MicrosBichoBola_2pobs.gen" que generaste en el ejercicio 2. Modifica el nombre de los loci (“loci1”, “loci2”...etc..) y de las poblaciones y escribe los comandos para describir los datos (poblaciones, número de loci, número de alelos, ploidía, etc... ).

EL FORMATO ARLEQUÍN

Arlequin es otro programa de amplio uso en genética de poblaciones. Fue escrito por LaurentExcoffier (Mol. Ecol Res. 2010. 10:564-567) y se puede descargar de manera gratuita en :http://cmpg.unibe.ch/software/arlequin35/. El formato de arlequín tiene mas opciones que elformato genepop (como ingresar datos de estructura, matrices de distancia, etc...) y se puede utilizarpara datos de tipo genotípico o de secuencias. Para conocer el formato Arlequín con detenimiento,te invitamos a revisar el manual del programa. En esta ocasión no vamos a analizar el formatoArlequín, sin embargo, basta mencionar que desde R puedes convertir un archivo en formato

3.- Bases de datos de Genética de Poblaciones Pg. 22

Page 23: 1.- EMPEZANDO CON R - evolucion.fciencias.unam.mxevolucion.fciencias.unam.mx/images/maestros/gabriela/00_Todo.pdf · GENÉTICA DE POBLACIONES CON R, FACULTAD DE CIENCIAS, UNAM ENRIQUE

GENÉTICA DE POBLACIONES CON R, FACULTAD DE CIENCIAS, UNAM ENRIQUE SCHEINVAR, 2014

genepop con extensión (*.gen) en un archivo formato Arlequín (extensión *.arp).

De momento, te ponemos un ejemplo del formato:

[profile]

Title = “Formato de Arlequin”

NbSamples = 3

DataType = STANDARD

GenotypicData = 1

LocusSeparator = WHITESPACE

GameticPhase = 0

RecessiveData = 0

[Data]

[[Samples]]

SampleName=”Pob1”

SampleSize = 3

SampleData = {

tipo1 2 10 29 43

10 30 45

tipo2 1 10 30 43

10 30 45

}

SampleName=”Pob2”

SampleSi....

.....

[[Structure]]

StructureName =”Norte-Sur”

NbGroups = 2

Group={

Pob1 Pob2

}

Group={

Pob3

}

[[Mantel]]

MatrixSize=3

MatrixNumber= 2

YMatrix= Fst

YMatrixLabels = {

Pop1 Pop2 Pop3

##################### Inicia sección profile

# Poner cualquier título

# Número de poblaciones

# (DNA, RFLP, MICROSAT, STANDARD óFREQUENCY)

# 1=genotipos 0= No genotipos

#TAB, NONE o algún caracter que no sea: #

# 0= no se conoce 1= si se conoce

#0 = datos codominantes, 1=datos dominantes

##################### Inicia sección de datos

############## Sub-sección de definición de poblaciones

# nombre de la poblacion uno

# tamaño de muestra de la población

# inicia población “Pob1”

# nombre, frecuencia , genotipos (tipo1 está dos veces, y eshomócigo10, heterócigo 29-30 y heterócigo 43-45

#termina “Pob1”

# Inicia siguiente población

############### Defino estructura de pobs.(OPCIONAL)

# le pongo un nombre a mi estructura

# número de grupos de la estructura

# defino las poblaciones del primer grupo

#nombres EXACTAMENTE IGUALES a como los definíarriba

############### Si deseo hacer mantel (OPCIONAL)

#Tamaño de la matríz de distancias (# de renglones)

# No. de matrices a usar (2 para “normal”, 3 o mas paraparciales)

3.- Bases de datos de Genética de Poblaciones Pg. 23

Page 24: 1.- EMPEZANDO CON R - evolucion.fciencias.unam.mxevolucion.fciencias.unam.mx/images/maestros/gabriela/00_Todo.pdf · GENÉTICA DE POBLACIONES CON R, FACULTAD DE CIENCIAS, UNAM ENRIQUE

GENÉTICA DE POBLACIONES CON R, FACULTAD DE CIENCIAS, UNAM ENRIQUE SCHEINVAR, 2014

}

DistMatMantel={

0.00

3.20 0.00

0.47 0.76 0.00

}

UsedYMatrixLabels={

Pop1 Pop2 Pop3

}

# tipo de distancia de una de las matrices (log_fst,custom,etc.)

# etiquetas a usar en las matrices

#Matriz de distancias (en este caso, distancia lineal -enKm- entre las poblaciones)

#Etiquetas para la segunda matriz

Vamos a convertir el archivo genepop: “~/GenPobs/basesdedatos/Agaves_genepop.gen” en unarchivo formato de programa Arlequín utilizando el comando convert de la libreríaPopGenKit :> install.packages ( “PopGenKit” ) 

> require ( PopGenKit ) 

> convert (“~/GenPobs/basesdedatos/Agaves_genepop.gen”) 

Se acaba de crear el archivo: ~/GenPobs/basesdedatos/Agaves_genpob.arp” de Arlequín. Pásalo ala carpeta “~/GenPobs/prac3/” Ábrelo con un editor de texto simple y revísalo. Si tienes muchacuriosidad, ábrelo desde el programa Arlequín y ejecútalo.

Ejercicio 6. Convierte el archivo de formato genepop “~/GenPobs/prac3/MicrosBichoBola_2pobs.gen” en formato Arlequín y agrégale la sección de estructura poblacional (inventa una estructura).

EL FORMATO FASTA

El formato fasta es el formato de secuencias más simple para guardar la información de DNA, RNAo aminoácidos. Las secuencias de DNA o RNA se obtienen mediante los métodos desecuenciación. La secuenciación es un conjunto de metodologías que se encuentra en constantecambio y desarrollo, sin embargo, uno de los formatos de salida más comunes en la secuenciaciónclásica tipo sanger es el formato ABIF. El formato ABIF ó también conocido como AB1 es unarchivo binario (con ceros y unos pero solo leíble por la computadora, no por el ojo humano), quecontiene, entre muchas otras cosas, las longitudes de onda de cada una de las letras que se leyeronen la muestra de DNA durante el proceso de secuenciación. Para poder visualizar un cromatograma,requieres de un programa específico (puedes ser BioEdit, Consed ó algún otro programa diseñadopara leer cromatogramas).

Leer cromatogramas {sangerseqR}

Para que R pueda leer un cromatograma, requiere de instalar la librería “sangerseqR” que seencuentra en el repositorio de “bioconductor”. Para instalar sangerseqR desde bioconductor:> source("http://bioconductor.org/biocLite.R") 

3.- Bases de datos de Genética de Poblaciones Pg. 24

Page 25: 1.- EMPEZANDO CON R - evolucion.fciencias.unam.mxevolucion.fciencias.unam.mx/images/maestros/gabriela/00_Todo.pdf · GENÉTICA DE POBLACIONES CON R, FACULTAD DE CIENCIAS, UNAM ENRIQUE

GENÉTICA DE POBLACIONES CON R, FACULTAD DE CIENCIAS, UNAM ENRIQUE SCHEINVAR, 2014

> biocLite(“sangerseqR”) > require (sangerseqR) 

Leemos el archivo ab1 de secuenciación sanger “~/GenPobs/basesdedatos/L02_02_ShawNa.ab1” con el comando read.abif: > archAb1 <­ read.abif( filename = "basesdedatos/L02_02_ShawNa.ab1") Generamos un segundo objeto basado en el anterior, pero particular para la librería sangerseq:> data <­ sangerseq( archAb1 ) > data 

Guardamos un objeto con la secuencia leída por el secuenciador en formato DNAstring:> seq <­ primarySeq( data ) > seq Vemos las letras de la secuencia leída por el secuenciador:> primarySeq( data, string=TRUE ) vemos el reverso complemento de la secuencia:> reverseComplement( seq ) > reverse( seq ) > complement( seq ) 

Imprimmos el cromatograma para realmente ver la calidad de lo que leyó el secuenciador:> chromatogram ( data, width=50, 

filename="~/GenPobs/prac3/cromato_L02_02_ShawNa.pdf") 

Se va a generar un archivo pdf en la carpeta de trabajo.

Ejemplo de cromatograma:

Recuerda que las primeras y últimas letras de una secuenciación suelen tener muchos errores. Revisa el código IUPAC para ácidos nucléicos: se suele utilizar la letra N para indicar una letra desconocida (cualqier letra), R para una purina cualquiera (A o G), Y para una purimidina 3.- Bases de datos de Genética de Poblaciones Pg. 25

Page 26: 1.- EMPEZANDO CON R - evolucion.fciencias.unam.mxevolucion.fciencias.unam.mx/images/maestros/gabriela/00_Todo.pdf · GENÉTICA DE POBLACIONES CON R, FACULTAD DE CIENCIAS, UNAM ENRIQUE

GENÉTICA DE POBLACIONES CON R, FACULTAD DE CIENCIAS, UNAM ENRIQUE SCHEINVAR, 2014

cualquiera (C, T, U).

Ejercicio 7: Lee el archivo “~/GenPobs/basesdedatos/L02_3_ShawNa.ab1”, genera un cromatograma e identifica los errores de secuenciación así como las lecturas correctas. Investiga qué hace la función pairwiseAlignment()

Generar un archivo fasta

El formato fasta es el formato de secuencias más simple. Tiene dos elementos: cabecera ysecuencia. La cabecera va a estar en una sola línea y se identifica porque inicia con el símbolo >(mayor que) y contiene el nombre de la secuencia. En la línea inmediata siguiente inicia el texto dela secuencia de DNA, RNA o aminoáciodos; la secuencia termina en cuanto se ingrese una nuevacabecera (>) o termine el archivo. Te recomendamos AMPLIAMENTE que el nombre de tucabecera sea lo más corto posible y evites utilizar cualquier símbolo (!”#$%&/()-@,etc..) o espacio;está estrictamente prohibido usar > como parte del nombre.

Ejemplo de formato fasta de dos secuencias de 10 pares de bases cada una:

> SecUnoACACTGAACT>SecDosA C A - N GTATG

Ejercicio 8: Lee el archivo “~/GenPobs/basesdedatos/L02_36_ShawNa.ab1”, genera un cromatograma, lee únicamente las 150 primeras posiciones y corrige y escribe las letras de secuencia en formato fasta en un archivo nombrado “~/GenPobs/prac3/L02_36ShawNa.fasta”.

INGRESAR SECUENCIAS A R DESDE FORMATO FASTA {APE}Existen varias librerías diseñadas para leer y entender el formato de secuencias fasta (sequinr, ape, etc...). En esta practica vamos a usar la librería ape. Si no la tenemos instalada, entonces la instalamos:> install.packages ( “ape” )  # instala el paquete ape

Ejercicio 9. Abre un editor de texto simple y revisa el contenido del archivo “~/GenPobs/basesdedatos/Agaves_psbA.fasta”. ¿Cuántos loci tiene? ¿cuantos individuos? ¿Qué largo tienen?. Investiga qué es y donde está la región psbA.

Para leer un archivo fasta con la librería ape, usamos el comando read.fasta. Este comandogenera objetos tipo DNAbin (Dna binario)

> secs <­ read.FASTA( "~/GenPobs/basesdedatos/Agaves_psbA.fasta" )  # guarda el fasta en el objeto DNAbin

3.- Bases de datos de Genética de Poblaciones Pg. 26

Page 27: 1.- EMPEZANDO CON R - evolucion.fciencias.unam.mxevolucion.fciencias.unam.mx/images/maestros/gabriela/00_Todo.pdf · GENÉTICA DE POBLACIONES CON R, FACULTAD DE CIENCIAS, UNAM ENRIQUE

GENÉTICA DE POBLACIONES CON R, FACULTAD DE CIENCIAS, UNAM ENRIQUE SCHEINVAR, 2014

> class (secs ) 

> secs 

> names ( secs )  # muestra las cabeceras

> length ( secs )  # muestra el número de secuencias

> length ( secs [[ 1 ]] )  # muestra el largo de la primer secuencia

> sectres <­ secs [ 3 ]  # extrae la tercer secuencia y la guarda en un nuevo objeto.> sectres 

> potatorum <­  secs$Apotatorum_psbA_trnH  # guarda en un nuevo obj. la secuenciallamada “Apotatourm_psbA_trnH”

> potatorum 

> as.character (potatorum) 

Ejercicio 10. Investiga la función cat y sin ejecutarla, deduce qué haría la función: > cat ( as.character(secs)[[1]], sep="" )

Para escribir un nuevo archivo en formato fasta usamos el comando write.dna :> write.dna ( sectres, 

file="~/GenPobs/prac3/juego1.fasta", format="fasta" ) 

Ejercicio11. Lee el archivo “~/GenPobs/basesdedatos/Agaves_psbA.fasta” y genera un nuevo archivo tipo fasta con las secuencias de Agave potatorum, A. nizandensis, A. gentryi y A. lechuguilla. Busca la forma de cambiar el nombre de las secuencias por “uno”, “dos”, “tres” y “cuatro” desde el objeto DNAbin y escribe el nuevo archivo como “~/GenPobs/prac3/Agave_psbA_seleccion.fasta”

INGRESAR SECUENCIAS A R DESDE EL GENEBANK {APE}La librería ape, permite descargar secuencias del genebank (“http://www.ncbi.nlm.nih.gov/”) tansolo ingresando los números de accesión (generalmente aparecen en los artículos) mediante elcomando read.GenBank :

Vamos a descargar las secuencias cuyas claves de accesión son: KJ137197, KJ137196 y KJ137195:> secs<­c("KJ137197","KJ137196","KJ137195") 

> bajadas <­ read.GenBank( secs ) 

> attributes ( bajadas ) 

> write.dna ( bajadas, file="~/GenPobs/prac3/FouquieriaShrevei.fasta", 

  format="fasta" ) 

Ejercicio12. Entra al genebank y descarga las misma secuencias desde el servidor (“http://www.ncbi.nlm.nih.gov/”) en el archivo "~/GenPobs/prac3/FouquieriaShrevei_Manual.fasta". Luego, busca un artículo de

3.- Bases de datos de Genética de Poblaciones Pg. 27

Page 28: 1.- EMPEZANDO CON R - evolucion.fciencias.unam.mxevolucion.fciencias.unam.mx/images/maestros/gabriela/00_Todo.pdf · GENÉTICA DE POBLACIONES CON R, FACULTAD DE CIENCIAS, UNAM ENRIQUE

GENÉTICA DE POBLACIONES CON R, FACULTAD DE CIENCIAS, UNAM ENRIQUE SCHEINVAR, 2014

genética de poblaciones con secuencias y descarga sus secuencias.

INGRESAR SNP COMO DATA.FRAME {BASE}

Un data.frame es una tabla en la que cada columna puede ser de distinto tipo (numérica, lógica,de texto, etc...) aunque dentro de cada columna, todos los elementos son del mismo tipo y todas lascolumnas tienen el mismo número de registros. Las columnas requieren de un nombre y losrenglones pueden o no tenerlo.Los datos de SNP, se guardan en formato tipo data.frame (tablas).

Ejemplo de un data.frame de 4 SNP en cinco individuos:

Individuo1 Individuo2 Individuo3 Individuo4 Individuo5

locus1 AB AA AA AA AB

locus2 AB BB BB BB AB

locus3 BB AB AB BB BB

locus4 BB AB AB BB AB

Para generar un data.frame se usa el comando data.frame. Vamos a generar un dataframe de dedos renglones y tres columnas. Hay muchas formas de hacer un data.frame:

>   Mydata   <­   data.frame(   SNP1=c("AB","AB"),   SNP2=c("AA","BB"),SNP3=c("AA","AA") ) 

> Mydata 

ó:> SNP1<­c(“AB”, “AB”) 

> SNP2 <­ c(“AA”,”BB”) 

> Mydata2 <­ data.frame ( SNP1,  SNP2 ) 

> Mydata2 

> Mydata2$SNP3 <­ c(“AA”, “AA”)  # agreagamos de último momento> Mydata2 

> rownames ( Mydata2 ) <­ c( "uno", "dos" )

> Mydata2 

ó vía una matrix:> Mydata3 <­ matrix(nrow=2, ncol=2) 

> Mydata 

> Mydata3[,1] <­ SNP1 

> Mydata3[,2] <­ SNP2 

> Mydata3 

> colnames(Mydata3) <­ c("SNP1","SNP2") 

> rownames(Mydata3) <­ c("uno","dos") 

> Mydata3 <­ as.data.frame (Mydata3) 

> Mydata3 

3.- Bases de datos de Genética de Poblaciones Pg. 28

Page 29: 1.- EMPEZANDO CON R - evolucion.fciencias.unam.mxevolucion.fciencias.unam.mx/images/maestros/gabriela/00_Todo.pdf · GENÉTICA DE POBLACIONES CON R, FACULTAD DE CIENCIAS, UNAM ENRIQUE

GENÉTICA DE POBLACIONES CON R, FACULTAD DE CIENCIAS, UNAM ENRIQUE SCHEINVAR, 2014

y podemos guardarlo como archivo csv usando el comando write.table:> help ( write.table ) 

> write.table(Mydata3, file="~/GenPobs/prac3/JuegoSNP.csv", quote=FALSE,sep="\t", ,row.names=FALSE)  # acabamos de generar un archivo llamado “JuegoSNP.csv”donde el texto NO tiene comillas (quote=FALSE), el separador de campos es tabulador (sep=” \t”) yno queremos que imprima el nombre de los renglones.

También podemos leerlo desde un archivo. Por ejemplo, vamos a leer la base de datos“~/GenPobs/basesdedatos/BichoBola_SNP.csv”, pero primero, ábrelo con un editor de textossimple para ver su contenido.

Nota: los archivos csv también se pueden abrir con el programa EXCEL. En caso de que lo hagas,ten cuidado de no cambiar el formato del archivo (a xls u algún otro). Mejor ábrelos con un editorde texto simple.

> Mydata4 <­ read.table ( "~/GenPobs/basesdedatos/BichoBola_SNP.csv", 

 header=T, sep="\t") 

> class ( Mydata4 ) 

> ncol ( Mydata4 ) 

> nrow ( Mydata4 ) 

> colnames ( Mydata4 ) 

> rownames ( Mydata4 ) 

> Mydata4[ , 1 ] 

> rownames (Mydata4) <­ Mydata4 [ , 1 ] 

> rownames ( Mydata4 ) 

3.- Bases de datos de Genética de Poblaciones Pg. 29

Page 30: 1.- EMPEZANDO CON R - evolucion.fciencias.unam.mxevolucion.fciencias.unam.mx/images/maestros/gabriela/00_Todo.pdf · GENÉTICA DE POBLACIONES CON R, FACULTAD DE CIENCIAS, UNAM ENRIQUE

GENÉTICA DE POBLACIONES CON R, FACULTAD DE CIENCIAS, UNAM ENRIQUE SCHEINVAR, 2014

4.- MEDIDAS DE VARIACIÓN Y EQUILIBRIO DE HARDY-WEINBERG

En esta práctica, se indica en  texto blanco sobre fondo negro  las instrucciones que debes de escribir en la consola de R. El símbolo  >  de la consola de R se conoce como “prompt” y es un indicador de que el programa R está listo para recibir órdenes. Se indica en texto blancosobre fondo gris, los textos de salida que muestra la consola de R (y que no necesitamos ingresar); en fondo gris con relieve blanco, se muestran las teclas teclas a escribir.

En primera instancia, establecemos la carpeta de trabajo: > setwd ( “C:/Genpobs” )  # Si tu máquina está en windows > setwd ( “~/GenPobs” )  # Si tu máquina está en linux ó mac (el símbolo ~ quiere decir:

“/home/usuario/”).

Dentro de la ruta de trabajo, genera una carpeta llamada “~/Genpobs/prac4/”.

VER MAPA DE POBLACIONES EN GOOGLE MAPS {RGOOGLEMAPS}Aunque formalmente no es un análisis de genética de poblaciones, si se cuenta con las coordenadasgeográficas de las poblaciones y/o individuos, siempre puede ser útil visualizarlas en un mapa. Eneste caso, vamos a utilizar la extensión RgoogleMaps. (para análisis más formales, es másrecomendable usar el paquete sp).> install.packages ("RgoogleMaps") 

Para generar el mapa, necesitamos un vector con la latitud en sistema decimal de las poblaciones,otro vector con la longitud en sistema decimal.

En un estudio de conservación de la zorra gris (Urocyon cinereoargenteus), se capturaron 6individuos para su genotipificación con SNP; sus datos se encuentran en el archivo“~/GenPobs/basesdedatos/ZorraGris_SNP.csv”)

1.- Primero, cargamos los datos en forma de data.frame:> Mydatos<­ read.table ( "~/GenPobs/basesdedatos/ZorraGris_SNP.csv", 

header=T, sep=",")

> names(Mydatos) 

> Mydatos 

2.- Cargamos la librería:> require(RgoogleMaps) 

> help (bbox) 

> help (GetMap) 

> help (PlotOnStaticMap) 

3.- Determinamos el área que queremos dibujar con el comando qbbox:> area <­ qbbox (lat=Mydatos$lat, lon=Mydatos$lon) 

> area 

4.- Generamos una variable con los datos de los puntos que queremos graficar:

4.- Medidas de variación y equilibrio de Hardy-Weinberg Pg. 30

Page 31: 1.- EMPEZANDO CON R - evolucion.fciencias.unam.mxevolucion.fciencias.unam.mx/images/maestros/gabriela/00_Todo.pdf · GENÉTICA DE POBLACIONES CON R, FACULTAD DE CIENCIAS, UNAM ENRIQUE

GENÉTICA DE POBLACIONES CON R, FACULTAD DE CIENCIAS, UNAM ENRIQUE SCHEINVAR, 2014

> puntos <­ cbind.data.frame (lat=Mydatos$lat, lon=Mydatos$lon, 

 size="big", color="red" ) 

> puntos 

5.- Descargamos el mapa en un objeto y en un archivo (Revisa la diferencia entre maptype=”satellite”, “terrain”, “mobile” ó “roadmap”)> mapaGoogle <­ GetMap.bbox( lonR=area$lonR , latR=area$latR , 

markers=puntos , maptype="hybrid",

destfile= "~/GenPobs/prac4/MapaZorraGris.png" ) 

6.- Lo imprimimos: > PlotOnStaticMap (mapaGoogle, mar=c(2,2,2,2), axes=T, axis.cex=0.5) 

Investiga lo que sucede si indicas mar=c(0,0,0,0) o mar=c(3,3,1,0)

7.- Le agregamos texto: > TextOnStaticMap(mapaGoogle , lat=Mydatos$lat , lon=Mydatos$lon ,

 labels=Mydatos$ind) 

Fig. Localización de muestras.

Ejercicio 1. Genera el mapa de los datos del ejercicio 2 del capítulo 3 “Bases de datos de Genética de poblaciones” .

4.- Medidas de variación y equilibrio de Hardy-Weinberg Pg. 31

Page 32: 1.- EMPEZANDO CON R - evolucion.fciencias.unam.mxevolucion.fciencias.unam.mx/images/maestros/gabriela/00_Todo.pdf · GENÉTICA DE POBLACIONES CON R, FACULTAD DE CIENCIAS, UNAM ENRIQUE

GENÉTICA DE POBLACIONES CON R, FACULTAD DE CIENCIAS, UNAM ENRIQUE SCHEINVAR, 2014

INGRESAR DATOS GENOTÍPICOS {GSTUDIO}

En la práctica 3 ya vimos como ingresar datos en formato genepop vía la librería adegenet;te recomendamos revisar el tutorial introducción al paquete: http://dyerlab.github.io/gstudio/; En esta ocasión, vamos a leer el mismo archivo de formato genepop: “~/GenPobs/basesdedatos/Agaves_genepop.gen”pero utilizando la función read_poplation de la librería gstudio (en lugar de la función read.genpop de adegenet); la función read_population, lee el archivo genepop y genera un simple data.frame manteniendo siempre en memoria el tipo de datos que posee cada posición de columna.

> require(gstudio)  # activamos la librería> help (read_population)  # vemos el manual del comando para leer archivos genepop.> datos <­ read_population("~/GenPobs/basesdedatos/Agaves_genepop.gen", 

 type = "genepop" )  # cargamos los datos> class (datos) > datos[1:3 , ]  # vemos los primeros 3 renglones del data.frame > names(datos)  # vemos los campos cargados> datos$Population > datos$ID > datos$locus2 Le podemos preguntar qué columnas contienen los alelos de loci:> help (column_class) > column_class(datos, class = "locus", mode="label")  # nos regresa el nombre de

las columnas con datos de loci.> column_class(datos, class = "locus", mode="index")  # en lugar de dar el

nombre, nos regresa el número de columna con datos de loci.

> summary(datos) > summary(datos$locus1) 

ANÁLISIS DE FRECUENCIAS ALÉLICAS {GSTUDIO}Para ver las frecuencias alélicas con la librería gstudio, usamos frequencies:> require(gstudio)  # activamos la librería> datos <­ read_population("~/GenPobs/basesdedatos/Agaves_genepop.gen", 

 type = "genepop" )  # cargamos los datos> frequencies(datos) > frequencies(datos$locus1) > frequencies(datos$locus2) 

Si queremos analizar por población (o cualquier otro campo que tengamos en la matríz de datos), gstudio utiliza partition:> help (partition) > names(datos) > pobla <­ partition (datos, stratum="Population") # dividimos la base de datos

“datos” en tantas bases como elementos hay en la columna llamada “Population”. Es decir, pobla va a contener un listado de matrices, una por cada población.

> pobla 

4.- Medidas de variación y equilibrio de Hardy-Weinberg Pg. 32

Page 33: 1.- EMPEZANDO CON R - evolucion.fciencias.unam.mxevolucion.fciencias.unam.mx/images/maestros/gabriela/00_Todo.pdf · GENÉTICA DE POBLACIONES CON R, FACULTAD DE CIENCIAS, UNAM ENRIQUE

GENÉTICA DE POBLACIONES CON R, FACULTAD DE CIENCIAS, UNAM ENRIQUE SCHEINVAR, 2014

> class (pobla) > names(pobla)  #vemos el nombre de cada elemento de la lista> pobla [[ 3 ]]  # pedimos ver la matríz de la segunda población> frequencies( pobla [[ 3 ]] )  # pedimos las frecuencias alélicas de la población 3> frequencies(pobla[[3]]$locus5)  # pedimos las frecs aléls del locus5 de la pob 3

En R, si queremos aplicar una función a TODOS los elementos de una lista (por ejemplo, nuestra lista de poblaciones), se puede utilizar el comando lapply: > FrecsPorPob<­ lapply(pobla, frequencies)  # en lugar de frequencies(pobla[[1]]) ;

frequencies(pobla[[2]]); frequencies(pobla[[etc...]])> FrecsPorPob > names(FrecsPorPob) > FrecsPorPob$[[1]]  Podemos hacer unas gráficas simples:> plot(datos$locus1)   # graficamos las frecuencias del locus 1 en todas las poblaciones> plot(datos$locus2) > plot(datos$locus2, mode="pie")> plot(pobla[[1]]$locus2)  # graficamos la frec. Del locus2 en la población uno> plot(pobla[[4]]$locus2)  

Fig. Frecuencias alélicas delocus uno.

Fig. Frecuencias alélicas dellocus dos.

Fig. Frecuencias alélicas dellocus dos en forma de pie.

Ejercicio.

ANÁLISIS MULTIVARIADOS DE FRECUENCIAS ALÉLICAS {GSTUDIO Y ADEGENET}

El paquete gstudio también nos permite hacer análisis multivariados con las tablas de frecuenciasalélicas; para convertir la matriz de datos genotípicos en una matríz de datos multivariados, se usael comando to_mv (genera una matríz con las frecuencias alélicas por individuo, por ejemplo encaso de diploides, un homócigo tendría una frecuencia de 1 y un heterócigo de 0.5):

> require(gstudio)  # activamos la librería> datos <­ read_population("~/GenPobs/basesdedatos/Agaves_genepop.gen", 

 type = "genepop" )  # cargamos los datos> datos2 <­ to_mv (datos, ploidy=2)  # convertimos la base de datos “datos”> datos2 

4.- Medidas de variación y equilibrio de Hardy-Weinberg Pg. 33

Page 34: 1.- EMPEZANDO CON R - evolucion.fciencias.unam.mxevolucion.fciencias.unam.mx/images/maestros/gabriela/00_Todo.pdf · GENÉTICA DE POBLACIONES CON R, FACULTAD DE CIENCIAS, UNAM ENRIQUE

GENÉTICA DE POBLACIONES CON R, FACULTAD DE CIENCIAS, UNAM ENRIQUE SCHEINVAR, 2014

> datos2[1:3,]  # pedimos ver solo las 3 primeras líneas

Componentes principales

Podemos realizar un análisis multivariado de componentes principales mediante el comandoprincomp. Para comprender lo que es un análisis de componentes principales, te sugerimosrevisar cualquier libro de estadística multivariada (ej. Manly.1986. Multivariate Statistical Methods,a primer. O cualquie otro )

> help (princomp) #función de la librería básica “stats”

> pca<­princomp(datos2)  # realizamos el análisis de componentes principales.

> summary(pca)  # vemos el porcentaje de explicación de cada componente

> names(pca)  # vemos el nombre de todos los elementos de la salida del análisis

> comps <­ pca$scores  # guardamos en “comps” los valores de las componentes.> plot(comps[,1], comps[,2], 

col=as.numeric(factor(datos$Population)))  # graficamos el componente uno contra el componente dos y le pedimos que los coloree con los valores (en forma de número) de la columna “Population” (tratada como factores).

> help (legend) 

> legend("bottomright", legend = unique(datos$Population),

fill=1:6, ncol = 3)  # le agregamos una leyenda ala gráfica para identificar los colores.

> biplot(pca)  <- o de plano, le pedimos la gráfica de compoente 1vs 2 más la dirección decada uno de los vectores de las variables.

Fig. Análisis de componentes principales de lasfrecuencias alélicas

4.- Medidas de variación y equilibrio de Hardy-Weinberg Pg. 34

Page 35: 1.- EMPEZANDO CON R - evolucion.fciencias.unam.mxevolucion.fciencias.unam.mx/images/maestros/gabriela/00_Todo.pdf · GENÉTICA DE POBLACIONES CON R, FACULTAD DE CIENCIAS, UNAM ENRIQUE

GENÉTICA DE POBLACIONES CON R, FACULTAD DE CIENCIAS, UNAM ENRIQUE SCHEINVAR, 2014

Agrupamientos jerárquicos

También podemos hacer un análisis multivariado jerárquico de agrupamientos mediante el comandohclust. Para comprender lo que es un análisis jerárquico de agrupamientos (clustering analysis)componentes principales, te sugerimos revisar cualquier libro de estadística multivariada (ej.Manly.1986. Multivariate Statistical Methods, a primer. O cualquie otro)

> help(hclust)  #función de la librería básica “stats”> help(dist) #función de la librería básica “stats”

> distancias<­dist(datos2)  # Calculamos matríz de distancias euclidianas. Más adelante,convendrá calcular distancias genéticas.

> agrupa<­ hclust(distancias, method="average")  # hacemos el análisis de cluster.

> plot(agrupa, cex=0.6)  # graficamos el dendograma.

Fig. 5. Dendograma UPGMA del análisis deagrupoamientos jerárquicos de las distanciaseuclidianas de las frecuencias alélicas.

ANÁLISIS DE DIVERSIDAD GENÉTICA {GSTUDIO}En R existen muchas librerías que de una u otra forma, realizan análisis de diversidad genética:vegan (ecología), diveRsity (diversidad genética, pero difícil de instalar), gstudio, adegenet, etc.. Enesta práctica,vamos a utilizar el paquete gstudio> require (gstudio) 

> datos <­ read_population("~/GenPobs/basesdedatos/Agaves_genepop.gen",  type = "genepop" )  # cargamos los datos

> help (genetic_diversity) 

> NumAlels<­ genetic_diversity(datos, mode="A")  # Cuenta el número de alelos> NumAlels 

>   NumEfecAlel   <­  genetic_diversity(datos,   mode="Ae")   # calcula el númeroefectivo de alelos

4.- Medidas de variación y equilibrio de Hardy-Weinberg Pg. 35

Page 36: 1.- EMPEZANDO CON R - evolucion.fciencias.unam.mxevolucion.fciencias.unam.mx/images/maestros/gabriela/00_Todo.pdf · GENÉTICA DE POBLACIONES CON R, FACULTAD DE CIENCIAS, UNAM ENRIQUE

GENÉTICA DE POBLACIONES CON R, FACULTAD DE CIENCIAS, UNAM ENRIQUE SCHEINVAR, 2014

> NumEfecAlel 

> HeteroEspe<­ genetic_diversity(datos, mode="He")   # Calcula la heterocigosisesperada

> HeteroEspe 

> HeteroObse<­ genetic_diversity(datos, mode="Ho")   # Calcula la heterocigosisobservada

> HeteroObse 

> Polimor<­ genetic_diversity(datos, mode="Pe")  # Calcula el polimorfismo> Polimor 

Podemos hacer algunas gráficas con las medidas de variación:> plot(Polimor$Ae, HeteroEspe$He, xlab="Polimorfismo", 

ylab="Heterocigosis")  #graficamos el polimorfismo contra la heterocigosis

> cor.test(Polimor$Ae, HeteroEspe$He)  #vemos si hay correlación entre He y P

> fit<­lm(HeteroEspe$He ~ Polimor$Ae)  #hacemos una regresión lineal entre He y P

> summary(fit)  # vemos los valores de la regresión

> abline(fit)  #agregamos la línea de regresión a la gráfica

Podemos graficar heterocigosis observada y esperada, en este caso por locus:> plot (x=c(1:nrow(HeteroEspe)), y=HeteroEspe$He, 

xlab="Locus", ylab="He", 

pch=21, col="black", bg="red", cex=1.5)   # hacemos gráfica> points(x=c(1:nrow(HeteroEspe)), y=HeteroObse$Ho, 

pch=22, col="blue", bg="green", cex=1)  # Le agregamos los puntos de la otra> legend(x=1, y=0.15, legend=c("He","Ho"), 

pch=c(21,22), cex=0.7, 

pt.bg=c("red","green"), ncol = 2)  # le agregamos una leyenda

4.- Medidas de variación y equilibrio de Hardy-Weinberg Pg. 36

Page 37: 1.- EMPEZANDO CON R - evolucion.fciencias.unam.mxevolucion.fciencias.unam.mx/images/maestros/gabriela/00_Todo.pdf · GENÉTICA DE POBLACIONES CON R, FACULTAD DE CIENCIAS, UNAM ENRIQUE

GENÉTICA DE POBLACIONES CON R, FACULTAD DE CIENCIAS, UNAM ENRIQUE SCHEINVAR, 2014

Fig. Correlación (r² =1.0; p<<0.05) entre polimorfismo y Heterocigosis.

Fig. Heterocigosis observada (cuadros verdes) yesperada (círculos rojos) por loci.

ANÁLISIS DE DISTANCIAS GENÉTICAS {GSTUDIO}Existen muchos tipos de distancia y varias librerías que las calculan: diveRsity (diversidad genética,pero difícil de instalar), hierfstat, gstudio, adegenet, etc.. Nosotros vamos a calcular las distanciaseuclidianas (distancias que se calculan mediante el teorema de pitágoras) distancia genética de neicon la librería gstudio:> require(gstudio) > datos <­ read_population("~/GenPobs/basesdedatos/Agaves_genepop.gen", 

 type = "genepop" )  # cargamos los datos

Calculamos varias matríces de distancia:> help(genetic_distance)  

Calculamos la distancia euclidiana:

> dist.euclidiana <­ genetic_distance(datos, stratum="Population",

 mode="Euclidean")  #calculamos las distacias por población (parámetro stratum, columna “Population”)

> dist.euclidiana 

> max(dist.euclidiana)  #vemos el volor máximo de distancia

Calculamos las distancias de Nei:> dist.nei78 <­ genetic_distance(datos, stratum="Population", 

mode="Nei")  

> dist.nei78

4.- Medidas de variación y equilibrio de Hardy-Weinberg Pg. 37

Page 38: 1.- EMPEZANDO CON R - evolucion.fciencias.unam.mxevolucion.fciencias.unam.mx/images/maestros/gabriela/00_Todo.pdf · GENÉTICA DE POBLACIONES CON R, FACULTAD DE CIENCIAS, UNAM ENRIQUE

GENÉTICA DE POBLACIONES CON R, FACULTAD DE CIENCIAS, UNAM ENRIQUE SCHEINVAR, 2014

> max(dist.nei78)  

También podemos graficar las distancias, utilizando métodos de agrupación jerárquica o mediante un árbol neighbor joining. Para graficar un dendograma de medias (UPGMA):> matrDist <­as.dist(dist.nei)  #convertimos la matriz en un objeto 

formal tipo matríz de R.

> arbol_upgma <­ hclust(matrDist,method = "average") #utilizamos el comando hclust para hacer un análisis de agrupamientos jerárquicos.

> plot(arbol_upgma)  # graficamos el arbol

Para hacer un arbol mediante el método Neighbor-joining (vecino más cercano), utilizamos el comando nj de la librería ape:> require(ape) 

> help (nj)  # te recomendamos revisar la función (bionj)> arbol_nj <­ nj(matrDist)  

> plot(arbol_nj)

> add.scale.bar() #Agregamos la barra de escala de distancia.

Si por algún motivo necesitas guardar en un archivo la topología del árbol de vecino más cercano, puedes usar el comando write.tree de ape:> write.tree(arbol_nj,"~/GenPobs/prac4/Arbolito_nei_nj.nex")  

Fig. Dendograma upgma de las distancias genéticas de nei entre las poblaciones.

Fig. Árbol del vecino más cercano de las distancias genéticas de nei entre las poblaciones.

4.- Medidas de variación y equilibrio de Hardy-Weinberg Pg. 38

Page 39: 1.- EMPEZANDO CON R - evolucion.fciencias.unam.mxevolucion.fciencias.unam.mx/images/maestros/gabriela/00_Todo.pdf · GENÉTICA DE POBLACIONES CON R, FACULTAD DE CIENCIAS, UNAM ENRIQUE

GENÉTICA DE POBLACIONES CON R, FACULTAD DE CIENCIAS, UNAM ENRIQUE SCHEINVAR, 2014

ANÁLISIS DE EQUILIBRIO HARDY WEINBERG

#Hardy. Fis=1- ho/he

F<-Fis(datos,small.sample.correction = T)

4.- Medidas de variación y equilibrio de Hardy-Weinberg Pg. 39