Sesion R

29
Introducci´ on a R: un entorno de programaci´ on para el an´ alisis de datos y la elaboraci´ on de gr´ aficos Juan Jos´ e Gibaja Mart´ ıns 7 de noviembre de 2008

Transcript of Sesion R

Page 1: Sesion R

Introduccion a R: un entorno de programacion

para el analisis de datos y la elaboracion de

graficos

Juan Jose Gibaja Martıns

7 de noviembre de 2008

Page 2: Sesion R

Indice general

1. Estructuras de datos en R 3

1.1. Creacion y eliminacion de objetos. Vectores numericos, de caractery logicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

1.2. Factores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

1.3. Arrays y matrices . . . . . . . . . . . . . . . . . . . . . . . . . . 6

1.4. Listas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

1.5. Dataframes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

1.6. Bases de datos en R . . . . . . . . . . . . . . . . . . . . . . . . . 10

2. Analisis de datos 11

2.1. Variables aleatorias . . . . . . . . . . . . . . . . . . . . . . . . . . 11

2.2. Estadıstica descriptiva univariante . . . . . . . . . . . . . . . . . 12

2.3. Estadıstica para dos variables . . . . . . . . . . . . . . . . . . . . 14

2.4. Tablas en R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

2.5. Regresion lineal . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

2.6. Analisis de componentes principales . . . . . . . . . . . . . . . . 19

2.7. Ejemplo de tipologıa de Comunidades Autonomas con el paque-te ade4 (Cuidado: Antes de utilizar el package ade4 es precisoinstalarlo) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

2.8. Analisis de componentes principales con FactoMineR . . . . . . . 20

3. Varios 22

3.1. Packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

3.2. Ayuda en R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

1

Page 3: Sesion R

INDICE GENERAL 2

3.3. Establecer el directorio de trabajo . . . . . . . . . . . . . . . . . 23

3.4. Area de trabajo en R (Workspace) . . . . . . . . . . . . . . . . . 23

3.5. Historico de comandos . . . . . . . . . . . . . . . . . . . . . . . . 23

3.6. Ejecucion de comandos desde un archivo de texto . . . . . . . . . 24

3.7. Trabajo con graficos . . . . . . . . . . . . . . . . . . . . . . . . . 24

Page 4: Sesion R

Capıtulo 1

Estructuras de datos en R

1.1. Creacion y eliminacion de objetos. Vectoresnumericos, de caracter y logicos

Todo en R son objetos. ¿De que objetos disponemos en este momento?

ls()

Creamos nuestro primer objeto: un vector numerico. Efectuamos algunas op-eraciones sobre el y vemos los resultados. Como no los guardamos en ningunobjeto, los resultados se muestran y se pierden:

x<-c(1,2,3)

x

sqrt(x)

1/x

ls()

...y lo eliminamos

rm(x)

ls()

Creamos otro vector, esta vez de tipo caracter. Intentamos efectuar operacionesnumericas sobre el, pero no es posible.

3

Page 5: Sesion R

CAPITULO 1. ESTRUCTURAS DE DATOS EN R 4

x<-c("Koldo","Kepa")

x

1/x

¿Se pueden crear vectores mixtos?. No. Se fuerza al tipo menos restrictivo.

x<-c(1.5,"Kepa")

x

Vamos a sumar dos vectores. El segundo solo tiene un elemento. ¿Que ocurrira?Se repite tantas veces como sea necesario para ajustarse a la longitud del maslargo. Notese que en R no existe el concepto de escalar sino como vector con ununico elemento.

x<-c(1,2)

y<-3

x+y

Algunas funciones sobre vectores numericos con significados evidentes:

max(x)

min(x)

range(x)

length(x)

mean(x) # media aritmetica

var(x) # varianza (con el divisor n-1)

Los vectores logicos se pueden crear concatenando valores logicos TRUE, FALSE

temp<-c(TRUE,FALSE,FALSE,FALSE,TRUE)

temp

O tambien mediante expresiones logicas (>,<,>=,<= ==, !=). ¿Son mayoresque 13 los componentes del vector x? Algunos sı (TRUE) y otros no (FALSE)

temp<-x>13

Page 6: Sesion R

CAPITULO 1. ESTRUCTURAS DE DATOS EN R 5

temp

¿Como se puede acceder a los elementos de un vector? Mediante un vector deındices (entre [ ])

x<-c(10,20,30,40,50) x[1] # da como resultado el primer elementodel vector x

x[c(1,2)] # proporciona los dos primeros elementos del vectorx

x[x>30] # nos da un vector con los elementos de x mayores que30

x[c(-1,-2)] # nos da los elementos de x excepto los dos primeros

Podemos transformar un tipo de vector en otro

cx<-as.character(x)

cx

y<-as.numeric(cx)

y

1.2. Factores

Los vectores son muy importantes pero existen otras estructuras en R como losfactores. Creamos un vector numerico x y a partir de el definimos un factorfx. Vemos como el procedimiento summary() tiene diferentes efectos sobre unvector numerico y sobre un factor.

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

summary(x)

fx<-as.factor(x)

fx

summary(fx)

A los niveles de un factor les podemos poner etiquetas

fx<-factor(x,labels=c("chico","chica"))

Page 7: Sesion R

CAPITULO 1. ESTRUCTURAS DE DATOS EN R 6

fx

summary(fx)

Tambien podemos crear factores a partir de vectores “continuos”. Para ellogeneramos una secuencia de 5000 numeros aleatorios con una distribucion nor-mal de media 100 y desviacion estandar 10. A partir de ese vector numericocreamos un factor con la funcion cut() estableciendo como puntos de corte60,70,...,140. Vemos como la funcion plot() actua de forma diferente sobre unfactor (fincomes) y sobre un vector numerico (incomes). El efecto de plot()sobre el factor es similar al efecto de hist() -histogramas- sobre un vectornumerico.

incomes<-rnorm(5000,100,10)

incomes

fincomes<-cut(incomes,breaks=60+10*(0:8))

summary(fincomes)

plot(fincomes)

plot(incomes)

hist(incomes)

1.3. Arrays y matrices

Otra estructura muy importante es el array. Un caso particular de array es lamatriz (array bidimensional). La definimos creando un vector y dandole la formadeseada mediante su valor dim(). Como ejemplo vamos a crear una matriz dedos filas y tres columnas.

x<-c(1,2,3,4,5,6)

dim(x)<-c(2,3)

x

x[1,1]

x[1,2]

x[1,]

x[,1]

x[,]

x

Page 8: Sesion R

CAPITULO 1. ESTRUCTURAS DE DATOS EN R 7

1.4. Listas

Las listas son una generalizacion del concepto de vector. Mientras estos debenconstar de componentes homogeneos en cuanto a su tipo, las listas pueden estarformadas por componentes de distintos tipos:

ingresos<-rnorm(5000,100,10)

gastos<-rnorm(5000,80,10)

lista1<-list(ingresos,gastos)

lista1

patrimonio<-rnorm(5000,1000,10)

lista2<-list(lista1,patrimonio)

summary(lista2)

1.5. Dataframes

Muy similares a las listas son los dataframes. Son las estructuras mas utilizadasen R para recoger los datos mas habituales en Estadıstica, aquellos en los quecontamos con un conjunto de n individuos para cada uno de los cuales hemosobtenido los valores en k variables, que pueden ser de distinta naturaleza.

df1<-data.frame(ingresos,gastos,patrimonio)

df1

summary(df1)

plot(df1)

Para referirnos a las variables de un dataframe debemos escribir dataframe$variable.No obstante, se puede obtener una copia de las variables de un dataframe me-diante el comando attach(). Cuidado: los cambios que se efectuen sobre estasvariables no afectan al dataframe. Para eliminar las variables de memoria em-pleamos el comando detach().

attach(df1)

detach(df1)

Page 9: Sesion R

CAPITULO 1. ESTRUCTURAS DE DATOS EN R 8

La forma mas comoda de introducir datos en R es mediante la lectura de unfichero de datos externo (normalmente en formato texto). Para ello construimosun fichero en cuya primera fila se recogen los nombres de las variables de losdatos separados por un espacio en blanco. En cada una de las restantes filas seincluye una etiqueta de la fila y los datos del individuo correspondiente en cadauna de las variables separados tambien por espacios en blanco. Un ejemplo esel siguiente:

Peso Altura Edad Sexo

"Koldo" 80 175 18 "chico"

"Luis" 75 182 19 "chico"

"Nerea" 63 164 42 "chica"

"Juanjo" 85 177 34 "chico"

"Amaia" 59 160 34 "chica"

"Ainhoa" 45 167 19 "chica"

"Uxue" 52 170 17 "chica"

Notese que tanto los nombres de las filas como los valores de las variables cuali-tativas deben introducirse entrecomillados. No ası los nombres de las variables.

Para leer los datos utilizamos el comando read.table(). El resultado es unobjeto de la clase dataframe. En este caso, creamos el dataframe DatosPeso ycreamos una copia de sus variables mediante el comando attach():

DatosPeso<-read.table("DatosPeso.txt", header=TRUE)

DatosPeso

attach(DatosPeso)

A continuacion empleamos algunos comandos de estadıstica descriptiva comosummary(), plot() e hist():

summary(Peso)

plot(Peso)

hist(Peso)

Especialmente util es el comando tapply() que calcula el estadıstico recogido ensu tercer argmento a los datos de la variable recogida en su primer argumentoen los grupos formados por el segundo argumento. Los siguientes comandoscalculan la media -mean- del Peso y la Altura para los distintos valores de lavariable Sexo:

Page 10: Sesion R

CAPITULO 1. ESTRUCTURAS DE DATOS EN R 9

tapply(Peso,Sexo,mean)

tapply(Altura,Sexo,mean)

Podemos modificar un dataframe mediante el comando fix(). Podemos probar,por ejemplo, a anadir nuevos individuos -nuevas filas- al dataframe.

fix(DatosPeso)

DatosPeso

Sin embargo, el numero de individuos de la variable Peso no ha cambiado. ¿Porque?

length(Peso)

¿Que ocurrira si hacemos attach(DatosPeso) y volvemos a ver cuantos indi-viduos tenemos ahora? ¿Por que?

length(Peso)

Puede construirse un dataframe desde cero introduciendo los datos desde elteclado. El siguiente comando abre una ventana en forma de hoja de calculo. Alcerrarla el resultado se guardara como un dataframe en el objeto Data:

Data<-edit(data.frame())

Para exportar un dataframe de R a un documento de texto deberıamos escribirla siguiente lınea de comando:

write.table(df1,file="nombrearchivo.txt")

Asimismo podrıamos exportar dicho dataframe de R a un documento de formatocsv con la siguiente lınea de comando:

write.csv(df1,file="nombrearchivo.csv")

Page 11: Sesion R

CAPITULO 1. ESTRUCTURAS DE DATOS EN R 10

1.6. Bases de datos en R

R dispone de gran cantidad de bases de datos a cuyo listado se puede accedermediante el comando data():

data()

Para acceder a una base de datos concreta basta con teclear su nombre -siesta accesible en alguno de los packages cargados en R-

WorldPhones

class(WorldPhones)

cars

Si queremos ver las bases de datos disponibles en algun otro package debe-mos emplear el comando data(package="package"). Por ejemplo, el siguientecomando nos proporciona la lista de bases de datos disponibles en el packagesurvival.

data(package="survival")

Para cargar los datos de una base de datos de un package no cargado en memoriadebemos emplear el comando data(database,package="package"):

data(tobin,package="survival")

tobin

class(tobin)

Page 12: Sesion R

Capıtulo 2

Analisis de datos

2.1. Variables aleatorias

R dispone de una calculadora de variables aleatorias. Con ella podemos generarvectores de numeros aleatorios que siguen diferentes funciones de distribucionteoricas -normal, binomial, t de Student, Chi cuadrado, F-, calcular probabili-dades a partir de estas funciones, calcular valores crıticos, etcetera. Por ejemplo,el siguiente comando genera un vector de 1000 numeros aleatorios seleccionadosde una variable aleatoria con distribucion binomial de parametros n=5 y p=0.5

x<-rbinom(5000,5,.5)

x<-factor(x)

plot(x)

x<-rbinom(5000,5,.5)

hist(x)

x<-factor(x)

x

summary(x)

Seguimos jugando con las variables aleatorias:

pnorm(2,0,1) # ¿Que area queda a la derecha de 2 en una N(0,1)?

qnorm(0.95,0,1) # ¿Que valor de una N(0,1) deja a su izquierda0,95?

11

Page 13: Sesion R

CAPITULO 2. ANALISIS DE DATOS 12

Vamos a dibujar funciones de densidad. En primer lugar creamos un vectornumerico con los numeros desde -2 hasta +2 con un incremento de 0.001.

x<-seq(-2,2,by=0.001)

A continuacion calculamos la funcion de densidad normal (0,1) para estos valoresy la representamos graficamente:

z<-dnorm(x,0,1)

plot(x,z)

Lo mismo para una N(0,2)

w<-dnorm(x,0,2)

lines(x,w)

Lo mismo para una N(0,0.5)

y<-dnorm(x,0,0.5)

lines(x,y)

2.2. Estadıstica descriptiva univariante

Vamos a revisar algunos conceptos de estadistica descriptiva univariante. Paraello vamos a recurrir a una base de datos disponible en R y reativa a las erup-ciones de un geyser. El dataframe contiene dos variables, eruptions (duracionde la erupcion) y waiting (tiempo entre erupciones). Mediante el nombre de labase de datos accedemos a ella y con el comando class() comprobamos que setrata de un dataframe. A continuacion con el comando attach() hacemos unacopia de las variables contenidas en el dataframe.

faithful

class(faithful)

attach(faithful)

Los comandos summary() y fivenum() nos proporcionan los estadısticos basicospara una variable numerica. Con el comando stem() obtenemos un diagramade tallos y hojas:

Page 14: Sesion R

CAPITULO 2. ANALISIS DE DATOS 13

summary(eruptions)

fivenum(eruptions)

stem(eruptions)

A continuacion vamos a recodificar la variable eruptions -numerica- para con-vertirla en una variable ordinal. Empleamos el comando cut() y establecemosun corte en 5 grupos. Con el comando class() verificamos que el nuevo ob-jeto creado -feruptions- es un factor. Vemos, a continuacion, el efecto de loscomandos summary() y plot() sobre un objeto de tipo factor:

feruptions<-cut(eruptions,breaks=5)

class(feruptions)

summary(feruptions)

plot(feruptions)

Los histogramas resultan muy utiles para estudiar la distribucion de variablesde naturaleza cuantitativa. El comando hist() proporciona el histograma deuna variable. En concreto, el siguiente comando establece un histograma con 20clases en el que las frecuencias no son absolutas sino relativas -freq=FALSE-:

hist(eruptions,breaks=20,freq=FALSE)

En ocasiones preferimos suavizar el histograma mediante las llamadas Estima-ciones kernel de densidad. Lo conseguimos con el comando density() para elque hemos establecido un ancho de banda de 0,1. Puede ser interesante jugarcon el valor de bw y ver el efecto sobre el grafico:

lines(density(eruptions,bw=0.1))

La inspeccion del histograma nos hace ver que los datos no siguen ninguna delas distribuciones teoricas habituales -normal, gamma,...- Vamos a jugar algomas con los datos. ¿Para que sirve el siguiente comando?:

longeruptions<-eruptions[eruptions>=3]

Comprobemoslo:

length(longeruptions)

length(eruptions)

Page 15: Sesion R

CAPITULO 2. ANALISIS DE DATOS 14

Y ahora obtengamos el histograma y la estimacion de densidad para las erup-ciones de al menos tres minutos de duracion:

hist(longeruptions,breaks=10,freq=FALSE)

lines(density(longeruptions,bw=0.1))

Este histograma no es perfectamente normal pero ¿existe evidencia suicientepara rechazar que sea normal? Utilicemos el test de Kolmogorov-Smirnov:

ks.test(longeruptions,"pnorm",mean(longeruptions),sqrt(var(longeruptions)))

O el de Shapiro

shapiro.test(longeruptions)

¡Vaya! Son contradictorios. A ver que nos dice un grafico Q-Q:

qqnorm(longeruptions)

2.3. Estadıstica para dos variables

Vamos a ver algunos comandos para estadıstica de dos variables. Para empezarcreamos dos vectores A y B, que contienen valores de ciertas variables:

A<-c(79.98,80.04,80.02,80.04,80.03,80.03,80.04,79.97,80.05,80.03,80.02,80.00,80.02)

B<-c(80.02,79.94,79.98,79.97,79.97,80.03,79.95,79.97)

Con el comando boxplot() obtenemos un diagrama de caja para una, dos omas variables:

boxplot(A)

boxplot(A,B)

El comando t.test() nos permite comprobar la hipotesis nula de que la mediaaritmetica poblacional de la variable de la que se han obtenido las observacionesde A toma el valor mu -frente a la alternativa de que la media poblacional esdistinta de mu:

t.test(A,mu=0)

Page 16: Sesion R

CAPITULO 2. ANALISIS DE DATOS 15

Podemos modificar la direccion de la hipotesis alternativa mediante el argumentoalternative:

t.test(A,mu=0,alternative="less")

El mismo comando t.test() nos permite efectuar un contraste de hipotesissobre la igualdad de las medias de dos poblaciones:

t.test(A,B)

Por defecto, el comando t.test() asume que existe heterocedasticidad y portanto lleva a cabo la conocida como aproximacion de Welch -notese que losgrados de libertad no son un numero entero-.

Pero, no tenemos por que suponer heterocedasticidad. Vemos que nos dice el co-mando var.test(). Con el conseguimos efectuar el contraste sobre la igualdadde las varianzas poblacionales de dos variables.

var.test(A,B)

Como el resultado del test de igualdad de varianzas no arroja evidencia empıri-ca suficiente como para rechazar la hipotesis de igualdad de varianzas pode-mos modificar el comando t.test() mediante el argumento var.equal=TRUE. Secalcula de este modo una varianza estimada comun a partir de las varianzasmuestrales de cada una de las variables:

t.test(A,B,var.equal=TRUE)

Para aplicar el test de la t de Student debemos suponer que los datos provienende una variable con distribucion normal -o aplicar el teorema central del lımite-Si esto no es ası -o el teorema no es aplicable-, es mejor recurrir a la prueba noparametrica correspondiente:

wilcox.test(A,B)

Una utilidad adicional de la prueba de Kolmogorov-Smirnov es la de contrastarque dos conjuntos de datos provienen de la misma poblacion. ¿Es ası en nuestrocaso?

ks.test(A,B)

Page 17: Sesion R

CAPITULO 2. ANALISIS DE DATOS 16

2.4. Tablas en R

Vamos a echar un vistazo a las tablas en R. Por ejemplo, la base de datosTitanic es de la clase tabla, como podemos comprobar con el comando class():

Titanic

class(Titanic)

El comando summary() proporciona -cuando se aplica sobre una tabla- la pruebade hipotesis Chi cuadrado sobre la independencia de las variables que componenlas dimensiones de la tabla:

summary(Titanic)

Especialmente interesante es el comando plot() aplicado sobre tablas:

plot(Titanic)

El comando mosaicplot() nos permite obtener representaciones parciales de latabla total:

mosaicplot(~ Sex + Age, data=Titanic)

Vamos, a continuacion, a extraer algunas subtablas de la tabla global. En con-creto, creamos la tabla AgeSurvived a partir de las variables 3 y 4 de la tablaTitanic. Igualmente, obtenemos la tabla ClassSex a partir de las variables 1y 2 de la tabla Titanic:

AgeSurvived<-margin.table(Titanic,c(3,4))

ClassSex<-margin.table(Titanic,c(1,2))

ClassSex

AgeSurvived

Ahora podemos utilizar el comando assocplot() con el fin de obtener una rep-resentacion grafica de la desviacion respecto a la independencia de las variablesconsideradas. Este comando solo puede emplearse para tablas de contingenciade dos variables:

assocplot(ClassSex)

Page 18: Sesion R

CAPITULO 2. ANALISIS DE DATOS 17

assocplot(AgeSurvived)

summary(ClassSex)

summary(AgeSurvived)

Seguimos extrayendo tablas. ¿Que ocurrio con el Titanic?

ClassSurvived<-margin.table(Titanic,c(1,4))

summary(ClassSurvived)

assocplot(ClassSurvived)

En nuestro repaso de las tablas en R hemos partido de una base de datos conformato de tabla -la base de datos Titanic- pero ¿como podemos construiruna tabla a partir de datos de un dataframe -por ejemplo-? Para verlo vamos aemplear la base de datos cars -que es de la clase dataframe-:

cars

attach(cars)

Para empezar creamos dos factores a partir de las variables numericas:

fdist<-cut(dist,breaks=5)

fspeed<-cut(speed,breaks=5)

El comando table() nos da como resultado un objeto de la clase tabla, que enesta ocasion se guarda con el nombre de DistSpeed:

DistSpeed<-table(fdist,fspeed)

DistSpeed

plot(DistSpeed)

summary(DistSpeed)

assocplot(DistSpeed)

Page 19: Sesion R

CAPITULO 2. ANALISIS DE DATOS 18

2.5. Regresion lineal

La regresion lineal la efectuamos en R mediante el comando lm(). Su resultadoes un objeto de la clase lista, al que podemos aplicar otros comandos de lasiguiente forma:

lr1<-lm(dist~speed)

summary(lr1)

anova(lr1)

plot(lr1)

Para obtener el diagrama de dispersion de las variables recurrimos al comandoplot() y anadimos una lınea recta -la recta de regresion- mediante el comandoabline() al que le pasamos los valores correspondientes del objeto lr1 -que esel que almacena los resultados del ajuste lineal-:

plot(speed,dist)

abline(lr1)

Podemos estudiar la existencia de observaciones influyentes mediante el coman-do influenc.measures() tomado como argumento unico el objeto que guardalos resultados de la regresion:

influence.measures(lr1)

Para terminar con la regresion veamos un ejemplo de regresion lineal multiple-trabajamos con la base de datos LifeCycleSavings-. Es especialmente intere-sante ver la sintaxis de la formula que recoge la relacion entre las variablesexogenas y endogena:

LifeCycleSavings

fm1 <- lm(sr ~ pop15 + pop75 + dpi + ddpi, data = LifeCycleSavings)

summary(fm1)

anova(fm1)

Page 20: Sesion R

CAPITULO 2. ANALISIS DE DATOS 19

2.6. Analisis de componentes principales

Vamos a ver como resuelve R el analisis de componentes principales. Para ellovamos a emplear la base de datos USArrests, que recoge datos sobre detencionesefectuadas en diferentes estados de EE.UU.:

USArrests

plot(USArrests) # matriz de diagramas de dispersion

pc1<-princomp(USArrests) # guardamos los resultados del ACP enpc1

plot(pc1) #valores propios. ¿Es adecuado el ACP?

biplot(pc1) #representacion simultanea de variables e individuos

pc1<-princomp(USArrests,scale=TRUE) #trabajamos con la matrizcor.

biplot(pc1)

summary(pc1)

pc1$scores # puntuaciones de los individuos sobre los ejes

2.7. Ejemplo de tipologıa de Comunidades Autono-mas con el paquete ade4 (Cuidado: Antesde utilizar el package ade4 es preciso insta-larlo)

Leemos los datos y creamos el data.frame DatosComunidades.

DatosComunidades<-read.table("Prueba.txt", header=TRUE)

Efectuamos un analisis de componentes principales normado y ponderado (con lapoblacion de las comunidades autonomas) empleando el comando dudi.pca():

library(ade4)

acp2<-dudi.pca(subset(DatosComunidades,select=-c(UE15,POBLACION)),row.w=DatosComunidades$POBLACION/sum(DatosComunidades$POBLACION))

Veamos el resumen de resultados:

Page 21: Sesion R

CAPITULO 2. ANALISIS DE DATOS 20

acp2

El cırculo de correlacion:

s.corcircle(acp2$co)

Las coordenadas de las Comunidades Autonomas en el nuevo sistema de refer-encia:

s.label(acp2$li)

Ahora vamos a aplicar un algoritmo de clasificacion jerarquica ascendente con elcomando hclust(). Previamente debemos calcular la matriz de distancias entrelas Comunidades Autonomas para lo que nos valdremos del comando dist():

dist1<-dist(subset(DatosComunidades,select=-c(UE15,POBLACION)))

dist1

clust1<-hclust(dist1)

plot(clust1)

2.8. Analisis de componentes principales con Fac-toMineR

Cargamos el package:

library(FactoMineR)

Efectuamos un ACP y guardamos los resultados en el objeto acp2:

acp2<-PCA(subset(DatosComunidades,select=-c(UE15,POBLACION)),row.w=DatosComunidades$POBLACION/sum(DatosComunidades$POBLACION))

Vemos los resultados referidos a los valores propios (incluidos porcentajes deinercia acumulados y sin acumular correspondientes a cada componente princi-pal):

acp2$eig

Los resultados para los individuos (coordenadas, contribuciones y cosenos cuadra-dos):

Page 22: Sesion R

CAPITULO 2. ANALISIS DE DATOS 21

acp2$ind

Los resultados para las variables (coordenadas, correlaciones con los compo-nentes principales, contribuciones y cosenos cuadrados):

acp2$var

Page 23: Sesion R

Capıtulo 3

Varios

3.1. Packages

Las instalaciones de R consisten en un modulo basico y un conjunto de packagesrecomendados -alrededor de 25-. Sin embargo existen cientos de packages querecogen las contribuciones de la comunidad que desarrolla R ası como de otrosinvestigadores. Para ver cuales son los packages que se encuentran instaladosen R debe utilizarse el comando library(). Este mismo comando sirve paracargar un package previamente instalado, en la forma library(package). Elcomando search() proporciona un listado de los packages activos.

La forma mas sencilla de instalar un nuevo package es mediante la opcionPaquetes / Instalar paquetes a partir de archivos zip locales que se encuen-tra disponible en el menu principal de R Gui. Obviamente es necesario haberobtenido previamente el package en formato zip.

3.2. Ayuda en R

La sintaxis de R es relativamente complicada. Por ese motivo es del maximointeres disponer de una buena ayuda on-line. Esa ayuda se puede invocar devarias maneras:

help.start() #arranca el navegador y la ayuda on-line

help(comando) #proporciona ayuda sobre un comando en particular

help.search(\caracter") #busca ayuda sobre el tema \caracter"

library(help=package) #proporciona ayuda sobre los comandos deun package concreto

example(comando) #proporciona ejemplos sobre un comando concreto

22

Page 24: Sesion R

CAPITULO 3. VARIOS 23

3.3. Establecer el directorio de trabajo

Para conocer cual es el directorio de trabajo por defecto debemos utilizar la fun-cion getwd(). A continuacion podemos establecer el nuevo directorio de trabajomediante la funcion setwd(), del siguiente modo:

setwd("c:/docs/mydir")

3.4. Area de trabajo en R (Workspace)

El area de trabajo es el lugar donde R guarda todos los objetos que estan activosen un momento dado. Se puede obtener una copia del area de trabajo medianteel comando save.image().

Si, por ejemplo, deseamos obtener una copia de todos los objetos del area detrabajo en el archivo .RData -archivo de area de trabajo por defecto- deberemosescribir:

save.image()

Si deseamos guardar solo algunos de los objetos y, ademas, deseamos hacerlo enun archivo con un nombre distinto deberemos emplear el comando:

save(ListaDeObjetos,file="myfile.RData")

Cuando deseemos recuperar los objetos copiados en un archivo de area de tra-bajo debemos emplear la funcion:

load("myfile.RData")

3.5. Historico de comandos

Si deseamos guardar una copia de los comandos que hemos utilizado o cargarlaen la memoria debemos emplear respectivamente los comandos savehistory(file= ".Rhistory") y loadhistory(file = ".Rhistory").

Page 25: Sesion R

CAPITULO 3. VARIOS 24

3.6. Ejecucion de comandos desde un archivo detexto

Ademas de trabajar interactivamente con R tambien es posible escribir un con-junto de comandos -correspondientes, por ejemplo, a un analisis determinado- yejecutar todos ellos de una sola vez -esta forma de funcionamiento se llama pro-ceso por lotes (batch processing)-. Podemos acceder a ella mediante el comandosource(). Por ejemplo, el siguiente comando ejecuta los comandos recogidos enel fichero de texto MiFichero.txt situado en el directorio de trabajo :

source("MiFichero.txt")

3.7. Trabajo con graficos

Ademas de ver los graficos en la consola grafica puede interesar obtener unacopia de ellos para incluirlos en un documento de texto o en un informe. Paraello se puede utilizar el siguiente conjunto de comandos:

jpeg("c:/MisGraficos/myplot.jpg")

plot(x)

dev.off()

El primer comando indica a R que debe guardar una copia del grafico en unarchivo llamado myplot.jpg situado en el directorio C:/MisGraficos. Ademas,el formato del grafico sera jpg -cabe tambien crear graficos con formato pdf,Windows Metafile, png, etcetera-. El segundo comando recoge la generacion delgrafico. El tercero devuelve el destino de los graficos a la consola grafica.

Page 26: Sesion R

Bibliografıa

Berk, R.A. (2008); Statistical Learning form a Regression Perspective; Springer.

Bliese, P. (2006); Multilevel Modeling in R;

Burns, P. (2003); A Guide for the Unwilling S User

Chambers, J.M. (2008); Software for Data Analysis. Programming with R;Springer

Cohen, Y; Cohen, J.Y. (2008); Statistics and Data with R: An Applied ApproachThrough Examples; Wiley

Cook D., Swayne D.F. (2007); Interactive and Dynamic Graphics for Data Anal-ysis; Springer.

Crawley, M.J. (2007); The R Book; Wiley.

Dalgaard, P. (2002); Introductory Statistics with R; Springer

Everitt B.S. (2005); And R and S-Plus Companion to Multivariate Analysis;Springer.

Faraway J.J. (2002); Practical Regression and Anova using R

Farnsworth, G.V. (2006); Econometrics in R

Galwey N.W. (2006); Introduction to Mixed Modelling. Beyond Regression andAnalysis of Variance; Wiley.

Gelman, A., Hill, J. (2007); Data Analysis Using Regression and Multilevel/HierarchicalModels; Cambridge University Press

Kuhnert, P., Venables, B. (2005); An Introduction to R: Software for StatisticalModelling & Computing; CSIRO.

Maindonald, J.H. (2008); Using R for Data Analysis and Graphics. Introuduc-tion, Code and Commentary; Australian National University

Maindonald J., Braun J. (2003); Data Analysis and Graphics Using R – anExample-based Approach; Cambridge University Press.

Marques de Sa, J.P. (2007); Applied Statistics Using SPSS, STATISTICA,MATLAB and R; 2nd edition; Springer.

25

Page 27: Sesion R

CAPITULO 3. VARIOS 26

Muenchen, B. (2007); R for SAS and SPSS Users

Murrel P. (2006); R Graphics; Chapman & Hall / CRC

Owen, W.J. (2007); The R Guide; University of Richmond

Paradis E. (2005); R for Beginners.

Quene, H. (2006); Statistics with R and S-Plus; Utrecht University

Robinson, A. (2008); icebrakeR; University of Melbourne

Seefeld, K., Linder, E. (2007); Statistics using R with Biological Examples;University of New Hampshire

Torgo, L. (2003); Data Mining with R: learning by case studies.

Venables W..N., Smith, D.M. (2008); An Introduction to R. Notes on R: AProgramming Environment for Data Analysis and Graphics.

Venables W.N., Ripley B.D. (2000); S Programming; Springer.

Venables W.N., Ripley B.D. (2002); Modern Applied Statistics with S 4th edi-tion

Verzani, J. (2002); simpleR. Using R for Introductory Statistics

Wang, K.K. (2002); R for Windows Users; Department of Statistics; New Zealand

Page 28: Sesion R

Recursos online

Pagina del proyecto R: http://www.r-project.org/

The Comprehensive R Archive Network: http://cran.r-project.org/

R wiki: http://wiki.r-project.org/

R news: http://cran.r-project.org/doc/Rnews/

R en Wikipedia: http://en.wikipedia.org/wiki/R_%28programming_language%29

Pagina web de Quick-R: http://www.statmethods.net/

R Graphical Manual: http://bm2.genes.nig.ac.jp/RGM2/index.php

R video tutorials: http://www.decisionsciencenews.com/?p=261

Pagina de JGR. Java GUI for R: http://jgr.markushelbig.org/JGR.html

Resources to help you learn and use R: http://www.ats.ucla.edu/stat/R/

Rtips (consejos para trabajar con R): http://pj.freefaculty.org/R/Rtips.html

R for Categorical Data Analysis: http://www.stat.ufl.edu/~presnell/Courses/sta4504-2000sp/R/R-CDA.pdf

Pagina de la conferencia useR! 2008: http://www.r-project.org/useR-2008

Statistical Analysis on the Web (RWeb): http://bayes.math.montana.edu/Rweb/Rweb.general.html

R graph gallery: http://addictedtor.free.fr/graphiques/

Statistics with R: http://zoonek2.free.fr/UNIX/48_R/all.html

Serie use R de Springer: http://www.springer.com/series/6991

Curso basico de R de la Universidad de Barcelona: http://www.ub.es/stat/docencia/EADB/Curso%20basico%20de%20R.htm

Curso introductorio de R de Raul Vaquerizo Romero: http://es.geocities.com/r_vaquerizo/Manual_R_menu.htm

27

Page 29: Sesion R

CAPITULO 3. VARIOS 28

A Brief Guide to R for Beginners in Econometrics: http://people.su.se/~ma/R_intro/

Introduction to Statistical Thought: http://www.stat.duke.edu/~michael/book.html

Statistical Computing with R: a tutorial: http://www.math.ilstu.edu/dhkim/Rstuff/Rtutor.html

FactoMiner: http://factominer.free.fr/