Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Introduccion R 10
Introduccion R 10
Introducci on
Qu e es R? C omo descargar e instalar el programa. Formas de obtener ayuda. Algunas caracter sticas generales. Atributos
Gr acos con R
Comandos de alto y bajo nivel. Par ametros. Divisiones de la ventana gr aca. Dispositivos gr acos.
Introducci on a la programaci on en R
Funciones. Sentencias de control. C omo organizar las funciones.
Berrendero (UAM) R Febrero 10 1 / 50
Qu e es R?
El entorno R es un conjunto integrado de programas para manejo de datos, c alculo y gr acos. Incluye: R. Becker, J. Chambers y A. Wilks desarrollaron el lenguaje S en los AT&T Laboratories El lenguaje S tiene dos implementaciones: una comercial, llamada SPlus, y otra gratuita, llamada R. R fue escrito originalmente por Ross Ihaka y Robert Gentleman (R & R) en 1996. Actualmente, es desarrollado y mantenido por un equipo de unas 18 personas, el llamado R Development Core Team. La p agina principal de R es: http://www.r-project.org/ Comandos para manejar y almacenar conjuntos de datos Operadores para llevar a cabo c alculos con vectores y matrices Comandos para llevar a cabo diversos an alisis de datos Comandos para gr acos Un lenguaje de programaci on relativamente simple La aplicabilidad de R se puede extender mediante paquetes de funciones. La versi on base contiene aproximadamente 25 paquetes. La p agina web permite disponer de muchos m as.
Direcci on principal: http://www.r-project.org Entrar en CRAN (a la izquierda de la pantalla). Elegir una localizaci on conveniente. Elegir el enlace correspondiente al sistema operativo que nos interese y entrar en base. Bajar y ejecutar en nuestro ordenador el chero que aparece en Download R *.*.* for Windows (si hemos elegido windows).
Obtener ayuda
Mediante help(comando) se obtiene ayuda sobre cada comando o conjunto de datos. La funci on example(comando) proporciona ejemplos de uso del comando. El comando help.search(tema) proporciona una lista de comandos relacionados con tema. Para abrir una ventana de ayuda HTML, help.start(). Una lista de los paquetes disponibles se obtiene con library() y otra con los conjuntos de datos disponibles se obtiene con data().
Atributos
Cada objeto tiene unos atributos que determinan sus propiedades. > getwd() [1] "C:/Archivos de programa/R/R-2.9.2" Clases de objetos (atributo class) que contienen datos: vector, factor, array, matrix, data.frame, ts, list. class(objeto) Funciones gen ericas: el resultado depende de la clase. Podemos cambiar el directorio de trabajo en el men u Archivo, opci on Cambiar dir... Al salir, si respondemos armativamente a la pregunta, se guardan todos los objetos en el chero .RData, en el directorio de trabajo. Resulta conveniente tener un directorio de trabajo diferente para cada proyecto. Atributos intr nsecos: mode y length. Length: n umero de elementos de un objeto. length(objeto) Mode: tipo b asico de elementos de un objeto: numeric, character, complex, logical, function, expression. mode(objeto). Atributos no intr nsecos: Informaci on complementaria. attributes() Por ejemplo, una matriz tiene los atributos dim y dimnames
Ficheros de datos
Para crear un conjunto de datos fichero de R a partir de un chero de datos de texto datos.txt en el directorio de trabajo:
fichero <- read.table(datos.txt,header=F,sep= ,dec=.)
Vectores
Algunos ejemplos sobre c omo construir vectores y extraer informaci on sobre sus elementos:
> seq(1,5,0.5) [1] 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 > rep(1,10) [1] 1 1 1 1 1 1 1 1 1 1 > x = 1:10 > x [1] 1 2 3 4 5 6 7 8 9 10 > x[-2] [1] 1 3 4 5 6 7 8 9 10 > x[3:5] [1] 3 4 5 > x[x<=6] [1] 1 2 3 4 5 6 > x[x<=6] = 1 > x [1] 1 1 1 1 1 1 7 8 9 10
Tambi en se puede usar scan(datos.txt), pero en este caso el resultado es un vector y no un chero de datos. Una variable de un chero se identica como fichero$variable Si lo que queremos es generar fichero que incluya los vectores x, y, z de la misma longitud:
fichero <- data.frame(x,y,z)
Valores especiales
Las coordenadas de los vectores pueden tomar alguno de los siguientes valores especiales: NA, NaN, Inf NA: Signica Not Available. Es u til cuando nos falta alg un dato. NaN: Signica Not a Number. Aparece como resultado de operaciones cuyo resultado es ambiguo o inexistente en el conjunto de n umeros reales. Inf: Signica Innity. Las funciones is.na(x) y is.nan(x) detectan qu e coordenadas de un vector x son NA o NaN
Ejemplos: Dene x = c(NA,NaN,Inf,0,3) y efect ua las operaciones siguientes, tratando de entender el resultado: 1/x x-x 1/x - (x-x) is.na(x) y is.nan(x)
Matrices
El comando matrix(x,nrow=m,ncol=n) permite crear una matriz de n columnas y m las con los elementos de x: > matrix(1:10,ncol=5,nrow=2) [,1] [,2] [,3] [,4] [,5] [1,] 1 3 5 7 9 [2,] 2 4 6 8 10 > matrix(1:5,ncol=5,nrow=2) [,1] [,2] [,3] [,4] [,5] [1,] 1 3 5 2 4 [2,] 2 4 1 3 5
Extraer elementos.
> x[1,2] > [1] 3 > x[1,] [1] 1 3 5 2 4 > x[,1] [1] 1 2 > x[,-{2:4}] [,1] [,2] [1,] 1 4 [2,] 2 5 > x[,{2:4}] [,1] [,2] [,3] [1,] 3 5 2 [2,] 4 1 3
Pegar vectores.
> x <- 1:4 > y <- 5:8 > rbind(x,y) [,1] [,2] [,3] [,4] x 1 2 3 4 y 5 6 7 8 > cbind(x,y) x y [1,] 1 5 [2,] 2 6 [3,] 3 7 [4,] 4 8
Operaci on Producto matricial Producto elemento a elemento Calcular la traspuesta de A Resolver el sistema Ax = b Calcular la inversa de A Calcular los autovalores y autovectores de A Suma de los elementos de A Promedio de los elementos de cada columna de A
El comando apply
Un comando importante para operar matricialmente es: apply(x,n,comando) , donde x es una matriz n vale 1 (las) o 2 (columnas) comando es cualquier comando que opere sobre vectores Con apply(x,n,comando) se aplica comando a todas las las o columnas de la matriz x Ejemplo: Creamos una matriz: x = matrix(1:6,2) Qu e ocurre si hacemos mean(x)? Cu al es el resultado de apply(x,1,mean)? Cu al es el resultado de apply(x,2,mean)?
Factores
Los factores se usan para especicar los grupos a los que pertenecen elementos de otros vectores.
> x <- c(rep(0,5),rep(2,5)) > fx <- factor(x) > fx [1] 0 0 0 0 0 2 2 2 2 2 Levels: 0 2 > y <- c(rnorm(5),rnorm(5,mean=2)) > y [1] 0.4495409 1.0131287 0.4293730 0.5483923 0.7747539 3.4454587 2.3241129 [8] 3.7019041 1.3317599 1.8880221
El comando tapply se usa para aplicar un comando a unos datos por grupos denidos por un factor: > medias <- tapply(y,fx,mean) > medias 0 2 0.6430378 2.5382515 # calcula medias por grupos
Factores
Listas
Una lista es una colecci on de objetos de R que, por la raz on que sea conviene agrupar. Los objetos pueden tener distintos tipos y caracter sticas Para denir una lista: milista = list(nombre=Pepe,no.hijos=3, edades.hijos=c(4,7,9)) El comando anterior dene una lista llamada milista con tres elementos: nombre, no.hijos y edades.hijos. Para ver el contenido de un elemento escribe, por ejemplo, milista$nombre Los elementos tambi en est an numerados. El comando milista[[1]] (con doble corchete) equivale al anterior
Podemos recodicar una variable (transform andola en un factor) de la manera siguiente: > x <- rnorm(1000) > fx <- factor(cut(x,breaks=c(-6,0,6), labels=c(negativos,positivos))) > table(fx) # obtiene la tabla de frecuencias fx negativos positivos 486 514
El comando sapply
Podemos tambi en extraer elementos de los elementos de una lista. Toma como ejemplo los comandos siguientes: milista$edades.hijos[2], milista[[3]][2]
El comando sapply(lista, comando) aplica un comando a cada uno de los elementos que forman una lista Los archivos de datos o data frames pueden considerarse listas, siendo cada variable un elemento El chero faithful contiene datos sobre duraci on de erupciones y tiempo entre ellas del geyser Old Faithful. Una descripci on del chero se obtiene haciendo help(faithful) Una forma r apida de obtener una descripci on estad stica de las dos variables es mediante sapply(faithful,summary)
Modelos de probabilidad
Cada distribuci on importante tiene un nombre en R: norm, binom, pois, exp, t, chisq, f,...
El chero iris contiene medidas (largo y ancho) del p etalo y s epalo de 150 lirios de tres especies. Para m as informaci on, help(iris) Para poder trabajar directamente con los nombres de las variables, attach(iris) Qu e calcula cada uno de los comandos siguientes?
summary(iris) sapply(iris,summary) tapply(Sepal.Length,Species,summary)
A cada nombre de distribuci on se le antepone un prejo que determina una funci on relacionada:
Prejo d p q r Funci on Funci on de densidad f (x ) Funci on de distribuci on F (x ) Funci on cuant lica F 1 (p ) Generador de n umeros aleatorios
Ejemplos: La mediana de una exponencial de par ametro = 2 se obtiene mediante qexp(0.5,2) La probabilidad de que una v.a. 2 5 sea menor o igual que 7 es pchisq(7,5) Determina un valor x tal que P(Z > x ) = 0.3, donde Z es una v.a. con distribuci on normal
An alisis descriptivo
Comparaci on de medias
Medidas num ericas b asicas: summary(x), var(x), sd(x), mean(x), median(x), cor(x,y), cov(x,y) Principales gr acos: hist(x), boxplot(x), qqnorm(x); qqline(x), plot(x,y) plot(ecdf(x),verticals=T,do.points=F), barplot(table(x)), pie(table(x)) Bondad de ajuste: ks.test(x,distribuci on,...)
> x <- rnorm(100) > ks.test(x,pnorm,0,1) One-sample Kolmogorov-Smirnov test data: x D = 0.0878, p-value = 0.4236 alternative hypothesis: two.sided
Ejemplo:
> t.test(x,y,alternative=two.sided,var.equal=T) Two Sample t-test data: x and y t = -2.2274, df = 18, p-value = 0.03892 alternative hypothesis: true difference in means is not equal to 0 95 percent confidence interval: -1.87127689 -0.05468917 sample estimates: mean of x mean of y -0.05219967 0.91078336
Comparaci on de proporciones
Para comparar dos proporciones o una proporci on con p0 jo
prop.test(x, n, p = NULL, alternative = c("two.sided", "less", "greater"), conf.level = 0.95, correct = TRUE)
Modelos lineales
Para ajustar un modelo de regresi on lm(formula,data=data.frame) Para llevar a cabo un an alisis de la varianza aov(formula,data=data.frame) El ajuste de un modelo lineal generalizado se hace mediante glm(formula,family,data=data.frame) Para especicar el modelo que queremos ajustar se utiliza el argumento formula El chero en el que est an los datos se especica con el argumento data
La siguiente tabla muestra ejemplos de especicaciones del modelo. y, x, x1, x2 son variables cuantitativas y A, B son factores.
La siguiente tabla contiene informaci on para extraer los elementos m as importantes de la salida:
summary plot anova coef fitted residuals Resumen de los principales resultados Gr acos para diagn ostico del modelo Tabla de an alisis de la varianza Estimadores de los coecientes del modelo Valores ajustados del modelo Residuos del modelo
ijk
Nombre Regresi on lineal simple Regresi on simple a trav es del origen Regresi on m ultiple ANOVA con un factor ANOVA con dos factores aditivo ANOVA con dos factores e interacciones
Por ejemplo summary(lm(y~ x)). Para los tres u ltimos elementos son equivalentes, por ejemplo, residuals(lm(y~ x)) y lm(y~ x)$residuals
Comandos de alto nivel: Son comandos con los que se puede crear un gr aco nuevo. Comandos de bajo nivel: Son comandos que permiten a nadir elementos (puntos, l neas, texto,etc.) a un gr aco ya existente Par ametros: Permiten modicar el aspecto de los gr acos. Paquetes especializados: Los paquetes grid y lattice, distribuidos con la versi on b asica de R, contienen m as comandos para nuevos gr acos.
Para cada funci on hay una serie de argumentos opcionales. Estos son los m as importantes
axes = T type = p xlim=c(inf,sup) , ylim=c(inf,sup) xlab=, ylab= main= sub= Si F, no se dibujan los ejes de coordenadas Tipo de gr aco: p (puntos), l (l neas), b (puntos conectados por l neas), etc. Especica los l mites de los ejes Leyendas de los ejes T tulo del gr aco Subt tulo del gr aco
La siguiente tabla contiene los m as importantes y cu al es su funci on Los gr acos se pueden personalizar a trav es de m as de 60 par ametros.
points(x,y) lines(x,y) text(x,y,labels) abline(a,b) abline(h=a) abline(lm) abline(v=a) polygon(x,y) legend(x,y,legend) title() locator(n) A nade puntos de coordenadas (xi , yi ) A nade l neas en lugar de puntos A nade el texto labelsi en (xi , yi ) Dibuja la recta de pendiente b y t ermino independiente a Dibuja la recta horizontal y = a Dibuja una recta de regresi on Dibuja la recta vertical x = a Dibuja un pol gono uniendo los puntos (xi , yi ) A nade la leyenda legend en (x , y ) A nade un t tulo Devuelve las coordenadas de n puntos se nalados con el rat on
La mayor a de los par ametros (pero no todos) se pueden usar como argumentos en los comandos de alto y bajo nivel. En este caso tienen efecto en el gr aco que estamos dibujando en este momento. Tambi en pueden jarse valores jos de los par ametros mediante el comando par. Por ejemplo, par(bg=yelow) hace que todos los gr acos tengan fondo amarillo.
Ejemplo
La tabla siguiente contiene los principales par ametros y el aspecto del gr aco que controlan
bg bty cex col lty lwd pch pty Color del fondo (v ease colors()) Tipo de ejes (o,l,c,7,u,] Tama no de los s mbolos y texto Color de los s mbolos y texto Tipo de l neas (1, continua; 2, discontinua; 3, puntos;...) Ancho de l neas (por defecto, lwd=1) Tipo de s mbolo Tipo de regi on de dibujo ( cuadrada s, o maximal m)
# Abrimos el fichero de los datos library(boot); data(salinity); attach(salinity) # El grafico mas simple plot(dis,sal) # Un grafico con opciones y par\{a}metros plot(dis,sal,col.axis=blue,xlab=Caudal,ylab=Salinidad,pch=15,bty=l, main=Salinidad en funcion del caudal,col=red) # Representamos (con doble grosor) la recta de # minimos cuadrados abline(lm(sal~dis),lwd=2)
Resultado
Los paquetes lattice y grid contienen muchas m as funciones para obtener gr acos. Constituyen un sistema alternativo para el que no son v alidas las opciones y comandos que hemos descrito hasta ahora. Podemos sin embargo usar cualquiera de estos paquetes en la misma sesi on de R
14
12
Salinidad
10
sal
10
12
14
22
24
26
28 dis
30
32
22
24
26
28
30
32
Caudal
Para usar los comandos debemos antes cargar los paquetes mediante library(lattice) o library(grid) Veamos un ejemplo de funci on de lattice: densityplot
virginica
0.25 2.5 2.0 1.5 1.0 0.5 0.15
0.20
Density
Density
G G G GG G G G GG G GG G G G G G G GGG G GGG GG G G G GG
0.0
setosa
2.5 2.0 1.5
versicolor
0.10
0.0 0 2 4 6 8
G G G GG G G G GG G GG G GG G G G G GG
G G G G G G G GG G G G G G G GG G G G G G G G G G GG G G G G
Petal.Length
Petal.Length
densityplot(Petal.Length)
Dispositivos gr acos
El dispositivo por defecto es una ventana gr aca que se abre autom aticamente. Mediante windows() podemos abrir nuevas ventanas, a las que se asignan n umeros diferentes. La u ltima ventana abierta es la que est a activa. Con dev.set(n) activamos la ventana n. Otros dispositivos: (v ease help(Devices))
pdf(): Env a los gr acos a un chero .pdf jpeg(): Env a los gr acos a un chero .jpg
> layout(matrix(1:6,2,3,byrow=T));layout.show(6)
Gr aco de la pr actica
14
14
12
12
G G G GGG G G G G
10
10
G GG G G G
Obs.16
G G
22
24
26 dis
28
30
32
sal
Los valores por defecto de los argumentos no son obligatorios. Tampoco los argumentos son obligatorios.
G G
22
24
26
28
30
32
Una funci on devuelve como resultado el valor de la u ltima expresi on evaluada, o lo que aparezca en la sentencia return
Posibles llamadas a esta funci on: mifuncion(1) mifuncion(1,2) mifuncion(b=4,a=1) mifuncion(1,2,3) Cu al es el resultado en cada caso?
Ejercicio
El comando for
Para repetir B veces el mismo c alculo se puede usar: for (i in 1:B){ expresiones de R } Escribe la funci on anterior en el editor de R C argala en el area de trabajo (usando source o marcando con el rat on) Ll amala de distintas formas: con un s olo argumento, con dos argumentos en diversos ordenes, con tres argumentos. Ejemplo: x = 0 for(i in 1:5){ x = x + i } x [1] 15
El comando if
Soluci on
ejercicioif <- function(x){ y = x n <- length(x) for (i in 1:n){ if (x[i] > 0) y[i] <- 1 else y[i] <- 0 } return(y) } # Otra implementacion (mas elegante) ejercicioif2 = function(x){ y = 0*x y[x>0] = 1 return(y) }
Para ejecutar comandos de forma condicional, podemos usar if (condicion){ R expr } else { R expr } Ejercicio: Escribe una funci on tal que, dado un vector x = (x1 , . . . , xn ) produce un nuevo vector y = (y1 , . . . , yn ) con yi = 1 si xi > 0, y yi = 0 si xi 0.