Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad


Manual R, Apuntes de Matemáticas

Asignatura: Matemáticas III, Profesor: , Carrera: Ingeniería Informática, Universidad: UHU

Tipo: Apuntes

2014/2015

Subido el 27/10/2015

h1796454
h1796454 🇪🇸

1 documento

1 / 61

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
R para Principiantes
Emmanuel Paradis
Institut des Sciences de l’ ´
Evolution
Universit Montpellier II
F-34095 Montpellier cdex 05
France
traducido por
Jorge A. Ahumada
RCUH/ University of Hawaii &
USGS/ National Wildlife Health Center
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30
pf31
pf32
pf33
pf34
pf35
pf36
pf37
pf38
pf39
pf3a
pf3b
pf3c
pf3d

Vista previa parcial del texto

¡Descarga Manual R y más Apuntes en PDF de Matemáticas solo en Docsity!

R para Principiantes

Emmanuel Paradis

Institut des Sciences de l’ ´Evolution Universit Montpellier II F-34095 Montpellier cdex 05 France

E-mail: [email protected]

traducido por

Jorge A. Ahumada

RCUH/ University of Hawaii & USGS/ National Wildlife Health Center E-mail: [email protected]

Quiero agradecerle a Julien Claude, Christophe Declercq, ´Elodie Gazave, Friedrich Leisch y Mathieu Ros por sus comentarios y sugerencias en versiones anteriores de este documento. Tambi´en estoy muy agradecido con los miembros del grupo nuclear de programadores de R por sus esfuerzos considerables en el desarrollo de R y su ´animo en la lista de discusi´on ‘rhelp’. Gracias a todos los usuarios de R cuyas preguntas y comentarios me ayudaron a escribir ’R para prinicpiantes’.

©c 2002, Emmanuel Paradis (3 de marzo de 2003)

1. Pr ´ologo

El objetivo de este documento es proporcionar un punto de partida para personas interesadas en comenzar a utilzar R. He escogido hacer ´enfasis en el funcionamiento de R, con el objeto de que se pueda usar de una manera b´asica. Dado que R ofrece una amplia gama de posibilidades, es ´util para el principiante adquirir algunas nociones y conceptos y asi avanzar progresivamente. He tratado de simplificar las explicaciones al m´aximo para hacerlas lo m´as comprensivas posibles, pero al mismo tiempo proporcionando detalles ´utiles, algunas veces con la ayuda de tablas. R es un sistema para ´analisis estad´ısticos y gr´aficos creado por Ross Ihaka y Robert Gentle- man^1. R tiene una naturaleza doble de programa y lenguaje de programaci´on y es considerado como un dialecto del lenguaje S creado por los Laboratorios AT&T Bell. S est´a disponible como el programa S-PLUS comercializado por Insightful^2. Existen diferencias importantes en el dise˜no de R y S: aquellos interesados en averiguar m´as sobre este tema pueden leer el art´ıculo publicado por Ihaka & Gentleman (1996) o las Preguntas M´as Frecuentes en R^3 , que tambi´en se distribuyen con el programa. R se distribuye gratuitamente bajo los t´erminos de la GNU General Public Licence^4 ; su desa- rrollo y distribuci´on son llevados a cabo por varios estad´ısticos conocidos como el Grupo Nuclear de Desarrollo de R. R est´a disponible en varias formas: el c´odigo fuente escrito principalmente en C (y algunas rutinas en Fortran), esencialmente para m´aquinas Unix y Linux, o como archivos binarios pre- compilados para Windows, Linux (Debian, Mandrake, RedHat, SuSe), Macintosh y Alpha Unix. Los archivos necesarios para instalar R, ya sea desde las fuentes o binarios pre-compilados, se distribuyen desde el sitio de internet Comprehensive R Archive Network (CRAN)^5 junto con las instrucciones de instalaci´on. Para las diferentes distribuciones de Linux (Debian,... ), los binarios est´an disponibles generalmente para las versiones m´as actualizadas de ´estas y de R; visite el sitio CRAN si es necesario. R posee muchas funciones para an´alisis estad´ısticos y gr´aficos; estos ´ultimos pueden ser vi- sualizados de manera inmediata en su propia ventana y ser guardados en varios formatos (jpg, png, bmp, ps, pdf, emf, pictex, xfig; los formatos disponibles dependen del sistema operativo). Los resultados de an´alisis estad´ısticos se muestran en la pantalla, y algunos resultados interme- dios (como valores P -, coeficientes de regresi´on, residuales,... ) se pueden guardar, exportar a un archivo, o ser utilizados en an´alisis posteriores. El lenguaje R permite al usuario, por ejemplo, programar bucles (’loops’ en ingl´es) para ana- lizar conjuntos sucesivos de datos. Tambi´en es posible combinar en un solo programa diferentes funciones estad´ısticas para realizar an´alisis m´as complejos. Usuarios de R tienen a su disponibi- lidad un gran n´umero de programas escritos para S y disponibles en la red;^6 la mayor´ıa de estos pueden ser utilzados directamente con R. Al principio, R puede parecer demasiado complejo para el no-especialista. Esto no es cierto necesariamente. De hecho, una de las caracter´ısticas m´as sobresalientes de R es su enorme flexibi- lidad. Mientras que programas m´as cl´asicos muestran directamente los resultados de un an´alisis, R guarda estos resultados como un “objeto”, de tal manera que se puede hacer un an´alisis sin ne- cesidad de mostrar su resultado inmediatamente. Esto puede ser un poco extra˜no para el usuario, pero esta caracter´ıstica suele ser muy ´util. De hecho, el usuario puede extraer solo aquella parte de los resultados que le interesa. Por ejemplo, si uno corre una serie de 20 regresiones y quiere

(^1) Ihaka R. & Gentleman R. 1996. R: a language for data analysis and graphics. Journal of Computational and Graphical Statistics 5: 299–314. (^2) v´ease http://www.insightful.com/products/splus/default.html para m´as informaci´on (^3) http://cran.r-project.org/doc/FAQ/R-FAQ.html (^4) para mayor informaci´on: http://www.gnu.org/ (^5) http://cran.r-project.org/ (^6) por ejemplo: http://stat.cmu.edu/S/

funciones y operadores

?

“datos” objetos

?

6  )

XXX XXXXz

“resultados” objetos

.../library/base/ /ctest/ ...

librer´ıa de funciones



datos archivos

 (^) -

 internet

PS JPEG^...

teclado rat´on

comandos -

pantalla

Memoria activa Disco duro

Figura 1: Una visi´on esquem´atica del funcionamiento de R.

comparar los coeficientes de regresi´on, R le puede mostrar ´unicamente los coeficientes estimados: de esta manera los resultados se pueden resumir en una sola l´ınea, mientras que un programa cl´asi- co le puede abrir 20 ventanas de resultados. M´as adelante, veremos otros ejemplos que ilustran y comparan la flexibilidad de R con programas de estad´ıstica m´as tradicionales.

2. Algunos conceptos antes de comenzar

Una vez instale R en su computador, el programa se puede iniciar corriendo el archivo ejecu- table correspondiente. El cursor, que por defecto es el s´ımbolo ‘>’, indica que R est´a listo para recibir un comando. En Windows, algunos comandos pueden ser ejecutados a trav´es de los menus interactivos (por ej. buscar ayuda en l´ınea, abrir archivos,... ). En este punto, un nuevo usuario de R probablemente estar´a pensando “Y ahora que hago?”. De hecho, cuando se utiliza R por primera vez, es muy ´util tener una idea general de como funciona y eso es precisamente lo que vamos a hacer ahora. Como primera medida, veremos brevemente como funciona R. Posteriormente, des- cribir´e el operador “asignar” el cual permite crear objetos en R, miraremos como manejar estos objetos en memoria, y finalmente veremos c´omo usar la ayuda en l´ınea, la cual a diferencia de las ayudas en otros programas estad´ısticos, es bastante ´util e intuituva.

2.1. C ´omo funciona R

R es un lenguaje Orientado a Objetos : bajo este complejo t´ermino se esconde la simplicidad y flexibilidad de R. El hecho que R es un lenguaje de programaci´on puede desaminar a muchos usuarios que piensan que no tienen “alma de programadores”. Esto no es necesariamente cierto por dos razones. Primero R es un lenguaje interpretado (como Java) y no compilado (como C, C++, Fortran, Pascal,... ), lo cual significa que los comandos escritos en el teclado son ejecutados directamente sin necesidad de construir ejecutables. Como segunda medida, la sint´axis de R es muy simple e intuitiva. Por ejemplo, una regresi´on lineal se puede ejecutar con el comando lm(y ˜x). Para que una funci´on sea ejecutada en R debe estar siempre acompa˜nada de par´entesis, inclusive en el caso que no haya nada dentro de los mismos (por ej., ls()). Si se escribe el nombre de la funci´on sin los par´entesis, R mostrar´a el contenido (c´odigo) mismo de la funci´on. En este documento, se escribir´an los nombres de las funciones con par´entesis para distinguirlas de otros objetos, a menos que se indique lo contrario en el texto.

2.2. Creaci ´on, listado y remoci ´on de objetos en memoria

Un objeto puede ser creado con el operador “assignar” el cual se denota como una flecha con el signo menos y el s´ımbolo “>” o “<” dependiendo de la direcci´on en que asigna el objeto:

n <- 15 n [1] 15 5 -> n n [1] 5 x <- 1 X <- 10 x [1] 1 X [1] 10

Si el objeto ya existe, su valor anterior es borrado despu´es de la asignaci´on (la modificaci´on afecta solo objetos en memoria, no a los datos en el disco). El valor asignado de esta manera puede ser el resultado de una operaci´on y/o de una funci´on:

n <- 10 + 2 n [1] 12 n <- 3 + rnorm(1) n [1] 2.

La funci´on rnorm(1) genera un dato al azar muestrado de una distribuci´on normal con media 0 y varianza 1 (p. 16). Note que se puede escribir una expresi´on sin asignar su valor a un objeto; en este caso el resultado ser´a visible en la pantalla pero no ser´a guardado en memoria:

(10 + 2) * 5 [1] 60

La asignaci´on ser´a omitida de los ejemplos si no es necesaria para la comprensi´on del mismo. La funci´on ls simplemente lista los objetos en memoria: s´olo se muestran los nombres de los mismos.

name <- "Carmen"; n1 <- 10; n2 <- 100; m <- 0. ls() [1] "m" "n1" "n2" "name"

Note el uso del punto y coma para separar comandos diferentes en la misma l´ınea. Si se quiere listar solo aquellos objetos que contengan un caracter en particular, se puede usar la opci´on pattern (que se puede abreviar como pat):

ls(pat = "m") [1] "m" "name"

Para restringir la lista a aquellos objetos que comienzan con este caracter:

ls(pat = "ˆm")

[1] "m"

La funci´on ls.str() muestra algunos detalles de los objetos en memoria:

ls.str() m : num 0. n1 : num 10 n2 : num 100 name : chr "Carmen"

La opci´on pattern se puede usar de la misma manera con ls.str(). Otra opci´on ´util en esta funci´on es max.level la cual especifica el nivel de detalle para la visualizaci´on de obje- tos compuestos. Por defecto, ls.str() muestra todos los detalles de los objetos en memoria, incluyendo las columnas de los marcos de datos (“data frames”), matrices y listas, lo cual pue- de generar una gran cantidad de informaci´on. Podemos evitar mostrar todos estos detalles con la opci´on max.level = -1:

M <- data.frame(n1, n2, m) ls.str(pat = "M") M : ‘data.frame’: 1 obs. of 3 variables: $ n1: num 10 $ n2: num 100 $ m : num 0. ls.str(pat="M", max.level=-1) M : ‘data.frame’: 1 obs. of 3 variables:

Para borrar objetos en memoria, utilizamos la funci´on rm(): rm(x) elimina el objeto x, rm(x,y) elimina ambos objetos x y y, y rm(list=ls()) elimina todos los objetos en me- moria; las mismas opciones mencionadas para la funci´on ls() se pueden usar para borrar selec- tivamente algunos objetos: rm(list=ls(pat="ˆm")).

2.3. La ayuda en l´ınea

La ayuda en l´ınea de R proporciona informaci´on muy ´util de c´omo utilizar las funciones. La ayuda se encuentra disponible directamente para una funci´on dada. Por ejemplo:

?lm

mostrar´a dentro de R, ayuda para la funci´on lm() ( modelo lineal ). El comando help(lm) o help("lm") tiene el mismo efecto. Esta ´ultima funci´on se debe usar para acceder a la ayuda con caracteres no-convencionales:

?* Error: syntax error help("*") Arithmetic package:base R Documentation

Arithmetic Operators ...

3. Manejando Datos con R

3.1. Objetos

Hemos visto que R trabaja con objetos los cuales tienen nombre y contenido, pero tambi´en atributos que especifican el tipo de datos representados por el objeto. Para entender la utilidad de estos atributos, consideremos una variable que toma los valores 1, 2, o 3: tal variable podr´ıa ser un n´umero entero (por ejemplo, el n´umero de huevos en un nido), o el c´odigo de una variable categ´orica (por ejemplo, el sexo de los individuos en una poblaci´on de crust´aceos: macho, hembra, o hermafrodita). Es claro que los resultados de un an´alisis estad´ıstico de esta variable no ser´a el mismo en ambos casos: con R, los atributos del objeto proporcionan la informaci´on necesaria. En general, y hablando un poco m´as t´ecnicamente, la acci´on de una funci´on sobre un objeto depende de los atributos de este ´ultimo. Todo objeto tiene dos atributos intr´ınsecos : tipo y longitud. El tipo se refiere a la clase b´asica de los elementos en el objeto; existen cuatro tipos principales: num´erico, caracter, complejo^7 , y l´ogico (FALSE [Falso] or TRUE [Verdadero]). Existen otros tipos, pero no representan datos como tal (por ejemplo funciones o expresiones). La longitud es simplemente el n´umero de elementos en el objeto. Para ver el tipo y la longitud de un objeto se pueden usar las funciones mode y length, respectivamente:

x <- 1 mode(x) [1] "numeric" length(x) [1] 1 A <- "Gomphotherium"; compar <- TRUE; z <- 1i mode(A); mode(compar); mode(z) [1] "character" [1] "logical" [1] "complex"

Cuando un dato no est´a disponible se representa como NA ( del ingl´es ’not available’ ) inde- pendientemente del tipo del dato. Datos num´ericos que son muy grandes se pueden expresar en notaci´on exponencial:

N <- 2.1e N [1] 2.1e+

R representa correctamente valores num´ericos no-finitos como ±∞ con Inf y -Inf, o valores que no son num´ericos con NaN ( del ingl´es ’not a number’ ).

x <- 5/ x [1] Inf exp(x) [1] Inf exp(-x) [1] 0 (^7) El tipo complejo no ser´a muy mencionado en este documento.

x - x [1] NaN

Variables que necesitan ser representadas como caracteres se delimitan con comillas ". Es posible incluir la comilla misma dentro de la variable si est´a precedida por el s´ımbolo . Los dos caracteres juntos " pueden ser usados por funciones como cat para visualizaci´on en pantalla, o write.table para escritura en archivos (p. 13, v´ease la opci´on qmethod de esta funci´on).

cit <- "Ella dijo: "Las comillas se pueden incluir en textos en R."" cit [1] "Ella dijo: "Las comillas se pueden incluir en textos en R."" cat(cit) Ella dijo: "Las comillas se pueden incluir en textos en R."

La siguiente tabla resume los tipos de objetos y los datos que representan.

objeto tipos varios tipos posibles en el mismo objeto? vector num´erico, caracter, complejo o l´ogico No factor num´erico o caracter No arreglo num´erico, caracter, complejo o l´ogico No matriz num´erico, caracter, complejo o l´ogico No data.frame num´erico, caracter, complejo o l´ogico Si ts num´erico, caracter, complejo o l´ogico Si lista num´erico, caracter, complejo, l´ogico Si funci´on, expresi´on,...

Un vector es una variable en el significado comunmente asumido. Un factor es una variable categ´orica. Un arreglo es una tabla de dimensi´on k , y una matriz es un caso particular de un arreglo donde k = 2. Note que los elementos en un arreglo o una matriz son del mismo tipo. Un ’data.frame’ (marco o base de datos) es una tabla compuesta de uno o m´as vectores y/o factores de la misma longitud pero que pueden ser de diferentes tipos. Un ’ts’ es una serie temporal y como tal contiene atributos adicionales tales como frecuencia y fechas. Finalmente, una lista puede contener cualquier tipo de objeto incluyendo otras listas! Para un vector, su tipo y longitud son suficientes para describirlo. Para otros objetos es ne- cesario usar informaci´on adicional que es proporcionada por atributos no-intr´ınsecos. Dentro de estos atributos se encuentran por ejemplo dim , que corresponde a las dimensiones del objeto. Por ejemplo, una matriz con 2 filas y 2 columnas tiene como dim la pareja de valores [2, 2], pero su longitud es 4.

3.2. Leyendo datos desde un archivo

R utiliza el directorio de trabajo para leer y escribir archivos. Para saber cual es este directorio puede utilizar el comando getwd() ( get working directory ) Para cambiar el directorio de trabajo, se utiliza la fucni´on setwd(); por ejemplo, setwd(“C:/data”) o setwd(“/home/paradis/R”). Es necesario proporcionar la direcci´on (’path’) completa del archivo si este no se encuentra en el directorio de trabajo.^8

(^8) En Windows, es ´util crear un alias de Rgui.exe, editar sus propiedades, y cambiar el directorio en el campo “Co- menzar en:” bajo la lengueta “Alias”: este directorio ser´a entonces el nuevo directorio de trabajo cuando R se ejecuta usando el alias.

Las variantes de read.table son ´utiles ya que vienen con diferentes opciones por defecto:

read.csv(file, header = TRUE, sep = ",", quote=""", dec=".", fill = TRUE, ...) read.csv2(file, header = TRUE, sep = ";", quote=""", dec=",", fill = TRUE, ...) read.delim(file, header = TRUE, sep = "\t", quote=""", dec=".", fill = TRUE, ...) read.delim2(file, header = TRUE, sep = "\t", quote=""", dec=",", fill = TRUE, ...)

La funci´on scan es m´as flexible que read.table. A diferencia de esta ´ultima es posible especificar el modo de las variables:

misdatos <- scan("data.dat", what = list("", 0, 0))

En este ejemplo scan lee tres variables del archivo data.dat; el primero es un caracter y los siguientes dos son num´ericos. Otra distinci´on importante es la capacidad de scan() de crear diferentes objetos como vectores, matrices, marcos de datos, listas,... En el ejemplo anterior, misdatos es una lista de tres vectores. Por defecto, es decir si se omite el argumento what, scan() crea un vector num´erico. Si los datos leidos no corresponden al modo (o modos) esperado (s) (ya sea por defecto o especificado a trav´es de what), se genera un mensaje de error. Las opciones son las siguientes:

scan(file = "", what = double(0), nmax = -1, n = -1, sep = "", quote = if (sep=="\n") "" else "’"", dec = ".", skip = 0, nlines = 0, na.strings = "NA", flush = FALSE, fill = FALSE, strip.white = FALSE, quiet = FALSE, blank.lines.skip = TRUE, multi.line = TRUE, comment.char = "#")

file el nombre del archivo(entre “”), posiblemente incluyendo la direcci´on completa (el s´ımbolo \no es permitido y debe ser reemplazado por /, inclusive bajo Windows), o acceso remoto del tipoURL (http://...); si file=“”, los datos deben ser introducidos desde el teclado (la entrada se termina con una l´ınea en blanco) what especifica el tipo (s) de los datos (num´erico por defecto) nmax el n´umero m´aximo de datos a ser leido, o si what es una lista, el n´umero de l´ıneas por leer (por defecto, scan lee los datos hasta que encuentra el final del archivo) n el n´umero de datos por leer (por defecto no hay limite) sep el separador de campos usado en el archivo quote los caracteres usados para citar las variables de tipo caracter dec el caracter usado para el punto decimal skip el n´umero de l´ıneas ignorado antes de empezar a leer datos nlines el n´umero de l´ıneas a leer na.string el valor asignado a datos ausentes (convertido a NA) flush si es TRUE, scan va a la siguiente l´ınea una vez se han leido todas las columnas (el usuario puede agregar comentarios en el archivo de datos) fill agrega “blancos” si es TRUE y todas las l´ıneas no tienen el mismo n´umero de variables strip.white (condicional a sep) si es TRUE, elimina espacios extras antes y despues de variables de tipo caracter quiet si es FALSE, scan muestra una l´ınea indicando los campos que han sido leidos blank.lines.skip si es TRUE, ignora l´ıneas en blanco multi.line si what es una lista, especifica si las variables de un mismo individuo est´an en una sola l´ınea en el archivo (FALSE) comment.char un caracter que define comentarios en el archivo; aquellas l´ıneas que comiencen con este caracter son ignoradas

La funci´on read.fwf puede usarse para leer datos en archivos en formato fijo ancho :

read.fwf(file, widths, sep="\t", as.is = FALSE, skip = 0, row.names, col.names, n = -1)

Las opciones son las mismas que para read.table() con excepci´on de widths que especifica la anchura de los campos. Por ejemplo, si un archivo de nombre datos.txt tiene los datos mostrados a la derecha, esto se puede leer con el comando:

A1.501.

A1.551.

B1.601.

B1.651.

C1.701.

C1.751.

misdatos <- read.fwf("datos.txt", widths=c(1, 4, 3)) misdatos V1 V2 V 1 A 1.50 1. 2 A 1.55 1. 3 B 1.60 1. 4 B 1.65 1. 5 C 1.70 1. 6 C 1.75 1.

3.3. Guardando datos

La funci´on write.table guarda el contenido de un objeto en un archivo. El objeto es t´ıpicamente un marco de datos (’data.frame’), pero puede ser cualquier otro tipo de objeto (vector, matriz,... ). Los argumentos y opciones son:

write.table(x, file = "", append = FALSE, quote = TRUE, sep = " ", eol = "\n", na = "NA", dec = ".", row.names = TRUE, col.names = TRUE, qmethod = c("escape", "double"))

seq(length=9, from=1, to=5) [1] 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.

Tambi´en se pueden escribir los valores directamente usando la funci´on c:

c(1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5) [1] 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.

Si se quiere, tambi´en es posible introducir datos directamente desde el teclado usando la fun- ci´on scan sin opciones:

z <- scan() 1: 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5. 10: Read 9 items z [1] 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.

La funci´on rep crea un vector con elementos id´enticos:

rep(1, 30) [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 La funci´on sequence crea una serie de secuencias de n´umeros enteros donde cada secuencia termina en el n´umero (o n´umeros) especificado (s) como argumento (s):

sequence(4:5) [1] 1 2 3 4 1 2 3 4 5 sequence(c(10,5)) [1] 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 La funci´on gl ( generador de niveles ) es muy ´util porque genera series regulares de factores. La funci´on tiene la forma gl(k, n) donde k es el n´umero de niveles (o clases), y n es el n´umero de r´eplicas en cada nivel. Se pueden usar dos opciones: length para especificar el n´umero de datos producidos, y labels para especificar los nombres de los factores. Ejemplos:

gl(3, 5) [1] 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 Levels: 1 2 3 gl(3, 5, length=30) [1] 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 Levels: 1 2 3 gl(2, 6, label=c("Macho", "Hembra")) [1] Macho Macho Macho Macho Macho Macho [7] Hembra Hembra Hembra Hembra Hembra Hembra Levels: Macho Hembra gl(2, 10) [1] 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 Levels: 1 2 gl(2, 1, length=20) [1] 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 Levels: 1 2 gl(2, 2, length=20) [1] 1 1 2 2 1 1 2 2 1 1 2 2 1 1 2 2 1 1 2 2 Levels: 1 2

Finalmente, expand.grid() crea un marco de datos con todas las combinaciones de vec- tores o factores proporcionados como argumentos:

expand.grid(a=c(60,80), p=c(100, 300), sexo=c("Macho", "Hembra")) a p sexo 1 60 100 Male 2 80 100 Male 3 60 300 Male 4 80 300 Male 5 60 100 Female 6 80 100 Female 7 60 300 Female 8 80 300 Female

Distribuci´on/funci´on funci´on Gausse (normal) rnorm(n, mean=0, sd=1) exponencial rexp(n, rate=1) gamma rgamma(n, shape, scale=1) Poisson rpois(n, lambda) Weibull rweibull(n, shape, scale=1) Cauchy rcauchy(n, location=0, scale=1) beta rbeta(n, shape1, shape2) ‘Student’ ( t ) rt(n, df) Fisher–Snedecor ( F ) rf(n, df1, df2) Pearson (χ^2 ) rchisq(n, df) binomial rbinom(n, size, prob) geom´etrica rgeom(n, prob) hypergeom´etrica rhyper(nn, m, n, k) log´ıstica rlogis(n, location=0, scale=1) lognormal rlnorm(n, meanlog=0, sdlog=1) binomial negativa rnbinom(n, size, prob) uniforme runif(n, min=0, max=1) Estad´ıstico de Wilcoxon’s rwilcox(nn, m, n), rsignrank(nn, n)

3.4.2. Secuencias aleatorias

La posibilidad de generar datos aleatorios es bastante ´util en estad´stica y R tiene la capacidad de hacer esto para un gran n´umero de funciones y distribuciones. Estas funciones son de la forma r func (n, p1, p2, ...), donde func indica la disribuci´on, n es el n´umero de datos ge- nerado, y p1, p2,... son valores que toman los par´ametros de la distribuci´on. La tabla anterior muestra los detalles de cada distribuci´on, y los posibles valores por defecto de los par´ametros (si no se indica, significa que el par´ametro debe ser especificado por el usuario). Todas estas funciones se pueden usar reemplazando la letra r con las letras d, p o q para obtener, la densidad de probabilidad (d func (x, ...)), la densidad de probabilidad acumulada (p func (x, ...)), y el valor del cuartil (q func (p, ...), con 0 < p < 1) respectivamente.

ff <- factor(c(2, 4), levels=2:5) ff [1] 2 4 Levels: 2 3 4 5 levels(ff) [1] "2" "3" "4" "5"

Matriz. Una matriz es realmente un vector con un atributo adicional (dim) el cual a su vez es un vector num´erico de longitud 2, que define el n´umero de filas y columnas de la matriz. Una matriz se puede crear con la funci´on matrix:

matrix(data = NA, nrow = 1, ncol = 1, byrow = FALSE, dimnames = NULL)

La opci´on byrow indica si los valores en data deben llenar las columnas sucesivamente (por defecto) o las filas (if TRUE). La opci´on dimnames permite asignar nombres a las filas y columnas.

matrix(data=5, nr=2, nc=2) [,1] [,2] [1,] 5 5 [2,] 5 5 matrix(1:6, 2, 3) [,1] [,2] [,3] [1,] 1 3 5 [2,] 2 4 6 matrix(1:6, 2, 3, byrow=TRUE) [,1] [,2] [,3] [1,] 1 2 3 [2,] 4 5 6

Otra manera de crear una matriz es dando los valores apropiados al atributo dim (que ini- cialmente tiene valor NULL):

x <- 1: x [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 dim(x) NULL dim(x) <- c(5, 3) x [,1] [,2] [,3] [1,] 1 6 11 [2,] 2 7 12 [3,] 3 8 13 [4,] 4 9 14 [5,] 5 10 15

Marco de datos. Hemos visto que un marco de datos (’data.frame’) se crea de manera impl´ıcita con la funci´on read.table; tambi´en es posible hacerlo con la funci´on data.frame. Los vectores incluidos como argumentos deben ser de la misma longitud, o si uno de ellos es m´as corto que los otros, es “reciclado” un cierto n´umero de veces:

x <- 1:4; n <- 10; M <- c(10, 35); y <- 2: data.frame(x, n) x n 1 1 10 2 2 10 3 3 10 4 4 10 data.frame(x, M) x M 1 1 10 2 2 35 3 3 10 4 4 35 data.frame(x, y) Error in data.frame(x, y) : arguments imply differing number of rows: 4, 3

Si se incluye un factor en un marco de datos, el factor debe ser de la misma longitud que el vector (o vectores). Es posible cambiar el nombre de las columnas con data.frame(A1=x, A2=n). Tambi´en se pueden dar nombres a las filas con la opci´on row.names que debe ser, por supuesto, un vector de modo caracter con longitud igual al n´umero de l´ıneas en el marco de datos. Finalmente, note que los marcos de datos tienen un atributo similar al dim de las matrices.

Lista. Una lista se crea de manera similar a un marco de datos con la funci´on list. No existe nin- guna limitaci´on en el tipo de objetos que se pueden incluir. A diferencia de data.frame(), los nombres de los objetos no se toman por defecto; tomando los vectores x y y del ejemplo anterior:

L1 <- list(x, y); L2 <- list(A=x, B=y) L [[1]] [1] 1 2 3 4

[[2]] [1] 2 3 4

L $A [1] 1 2 3 4

$B [1] 2 3 4

names(L1)