1. Introducci´n a R: un entorno de programaci´n
o o
para el an´lisis de datos y la elaboraci´n de
a o
gr´ficos
a
Juan Jos´ Gibaja Mart´
e ıns
7 de noviembre de 2008
3. ´
INDICE GENERAL 2
3.3. Establecer el directorio de trabajo . . . . . . . . . . . . . . . . . 23
´
3.4. Area de trabajo en R (Workspace) . . . . . . . . . . . . . . . . . 23
3.5. Hist´rico de comandos . . . . . . . . . . . . . . . . . . . . . . . .
o 23
3.6. Ejecuci´n de comandos desde un archivo de texto . . . . . . . . .
o 24
3.7. Trabajo con gr´ficos . . . . . . . . . . . . . . . . . . . . . . . . .
a 24
4. Cap´
ıtulo 1
Estructuras de datos en R
1.1. Creaci´n y eliminaci´n de objetos. Vectores
o o
num´ricos, de car´cter y l´gicos
e a o
Todo en R son objetos. ¿De qu´ objetos disponemos en este momento?
e
ls()
Creamos nuestro primer objeto: un vector num´rico. Efectuamos algunas op-
e
eraciones sobre ´l y vemos los resultados. Como no los guardamos en ning´n
e u
objeto, 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 car´cter. Intentamos efectuar operaciones
a
num´ricas sobre ´l, pero no es posible.
e e
3
5. CAP´
ITULO 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 s´lo tiene un elemento. ¿Qu´ ocurrir´?
o e a
Se repite tantas veces como sea necesario para ajustarse a la longitud del m´s
a
largo. N´tese que en R no existe el concepto de escalar sino como vector con un
o
unico elemento.
´
x<-c(1,2)
y<-3
x+y
Algunas funciones sobre vectores num´ricos con significados evidentes:
e
max(x)
min(x)
range(x)
length(x)
mean(x) # media aritm´tica
e
var(x) # varianza (con el divisor n-1)
Los vectores l´gicos se pueden crear concatenando valores l´gicos TRUE, FALSE
o o
temp<-c(TRUE,FALSE,FALSE,FALSE,TRUE)
temp
O tambi´n mediante expresiones l´gicas (>,<,>=,<= ==, !=). ¿Son mayores
e o
que 13 los componentes del vector x? Algunos s´ (TRUE) y otros no (FALSE)
ı
temp<-x>13
6. CAP´
ITULO 1. ESTRUCTURAS DE DATOS EN R 5
temp
¿C´mo se puede acceder a los elementos de un vector? Mediante un vector de
o
´
ındices (entre [ ])
x<-c(10,20,30,40,50) x[1] # da como resultado el primer elemento
del vector x
x[c(1,2)] # proporciona los dos primeros elementos del vector
x
x[x>30] # nos da un vector con los elementos de x mayores que
30
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 los
factores. Creamos un vector num´rico x y a partir de ´l definimos un factor
e e
fx. Vemos como el procedimiento summary() tiene diferentes efectos sobre un
vector num´rico y sobre un factor.
e
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"))
7. CAP´
ITULO 1. ESTRUCTURAS DE DATOS EN R 6
fx
summary(fx)
Tambi´n podemos crear factores a partir de vectores “continuos”. Para ello
e
generamos una secuencia de 5000 n´meros aleatorios con una distribuci´n nor-
u o
mal de media 100 y desviaci´n est´ndar 10. A partir de ese vector num´rico
o a e
creamos un factor con la funci´n cut() estableciendo como puntos de corte
o
60,70,...,140. Vemos como la funci´n plot() act´a de forma diferente sobre un
o u
factor (fincomes) y sobre un vector num´rico (incomes). El efecto de plot()
e
sobre el factor es similar al efecto de hist() -histogramas- sobre un vector
num´rico.
e
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 la
matriz (array bidimensional). La definimos creando un vector y d´ndole la forma
a
deseada mediante su valor dim(). Como ejemplo vamos a crear una matriz de
dos 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
8. CAP´
ITULO 1. ESTRUCTURAS DE DATOS EN R 7
1.4. Listas
Las listas son una generalizaci´n del concepto de vector. Mientras estos deben
o
constar de componentes homog´neos en cuanto a su tipo, las listas pueden estar
e
formadas 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 m´s utilizadas
a
en R para recoger los datos m´s habituales en Estad´
a ıstica, aquellos en los que
contamos con un conjunto de n individuos para cada uno de los cuales hemos
obtenido 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 efect´en sobre estas
u
variables no afectan al dataframe. Para eliminar las variables de memoria em-
pleamos el comando detach().
attach(df1)
detach(df1)
9. CAP´
ITULO 1. ESTRUCTURAS DE DATOS EN R 8
La forma m´s c´moda de introducir datos en R es mediante la lectura de un
a o
fichero de datos externo (normalmente en formato texto). Para ello construimos
un fichero en cuya primera fila se recogen los nombres de las variables de los
datos separados por un espacio en blanco. En cada una de las restantes filas se
incluye una etiqueta de la fila y los datos del individuo correspondiente en cada
una de las variables separados tambi´n por espacios en blanco. Un ejemplo es
e
el 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"
N´tese que tanto los nombres de las filas como los valores de las variables cuali-
o
tativas deben introducirse entrecomillados. No as´ los nombres de las variables.
ı
Para leer los datos utilizamos el comando read.table(). El resultado es un
objeto de la clase dataframe. En este caso, creamos el dataframe DatosPeso y
creamos una copia de sus variables mediante el comando attach():
DatosPeso<-read.table("DatosPeso.txt", header=TRUE)
DatosPeso
attach(DatosPeso)
A continuaci´n empleamos algunos comandos de estad´
o ıstica descriptiva como
summary(), plot() e hist():
summary(Peso)
plot(Peso)
hist(Peso)
Especialmente util es el comando tapply() que calcula el estad´
´ ıstico recogido en
su tercer argmento a los datos de la variable recogida en su primer argumento
en los grupos formados por el segundo argumento. Los siguientes comandos
calculan la media -mean- del Peso y la Altura para los distintos valores de la
variable Sexo:
10. CAP´
ITULO 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 a˜adir nuevos individuos -nuevas filas- al dataframe.
n
fix(DatosPeso)
DatosPeso
Sin embargo, el n´mero de individuos de la variable Peso no ha cambiado. ¿Por
u
qu´?
e
length(Peso)
¿Qu´ ocurrira si hacemos attach(DatosPeso) y volvemos a ver cu´ntos indi-
e a
viduos tenemos ahora? ¿Por qu´?
e
length(Peso)
Puede construirse un dataframe desde cero introduciendo los datos desde el
teclado. El siguiente comando abre una ventana en forma de hoja de c´lculo. Al
a
cerrarla el resultado se guardar´ como un dataframe en el objeto Data:
a
Data<-edit(data.frame())
Para exportar un dataframe de R a un documento de texto deber´
ıamos escribir
la siguiente l´
ınea de comando:
write.table(df1,file="nombrearchivo.txt")
Asimismo podr´ ıamos exportar dicho dataframe de R a un documento de formato
csv con la siguiente l´
ınea de comando:
write.csv(df1,file="nombrearchivo.csv")
11. CAP´
ITULO 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 acceder
mediante el comando data():
data()
Para acceder a una base de datos concreta basta con teclear su nombre -si
est´ accesible en alguno de los packages cargados en R-
a
WorldPhones
class(WorldPhones)
cars
Si queremos ver las bases de datos disponibles en alg´n otro package debe-
u
mos emplear el comando data(package="package"). Por ejemplo, el siguiente
comando nos proporciona la lista de bases de datos disponibles en el package
survival.
data(package="survival")
Para cargar los datos de una base de datos de un package no cargado en memoria
debemos emplear el comando data(database,package="package"):
data(tobin,package="survival")
tobin
class(tobin)
12. Cap´
ıtulo 2
An´lisis de datos
a
2.1. Variables aleatorias
R dispone de una calculadora de variables aleatorias. Con ella podemos generar
vectores de n´meros aleatorios que siguen diferentes funciones de distribuci´n
u o
te´ricas -normal, binomial, t de Student, Chi cuadrado, F-, calcular probabili-
o
dades a partir de estas funciones, calcular valores cr´
ıticos, etc´tera. Por ejemplo,
e
el siguiente comando genera un vector de 1000 n´meros aleatorios seleccionados
u
de una variable aleatoria con distribuci´n binomial de par´metros n=5 y p=0.5
o a
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) # ¿Qu´ ´rea queda a la derecha de 2 en una N(0,1)?
e a
qnorm(0.95,0,1) # ¿Qu´ valor de una N(0,1) deja a su izquierda
e
0,95?
11
13. CAP´ ´
ITULO 2. ANALISIS DE DATOS 12
Vamos a dibujar funciones de densidad. En primer lugar creamos un vector
num´rico con los n´meros desde -2 hasta +2 con un incremento de 0.001.
e u
x<-seq(-2,2,by=0.001)
A continuaci´n calculamos la funci´n de densidad normal (0,1) para estos valores
o o
y la representamos gr´ficamente:
a
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. Para
ello 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 (duraci´no
de la erupci´n) y waiting (tiempo entre erupciones). Mediante el nombre de la
o
base de datos accedemos a ella y con el comando class() comprobamos que se
trata de un dataframe. A continuaci´n con el comando attach() hacemos una
o
copia de las variables contenidas en el dataframe.
faithful
class(faithful)
attach(faithful)
Los comandos summary() y fivenum() nos proporcionan los estad´
ısticos b´sicos
a
para una variable num´rica. Con el comando stem() obtenemos un diagrama
e
de tallos y hojas:
14. CAP´ ´
ITULO 2. ANALISIS DE DATOS 13
summary(eruptions)
fivenum(eruptions)
stem(eruptions)
A continuaci´n vamos a recodificar la variable eruptions -num´rica- para con-
o e
vertirla en una variable ordinal. Empleamos el comando cut() y establecemos
un corte en 5 grupos. Con el comando class() verificamos que el nuevo ob-
jeto creado -feruptions- es un factor. Vemos, a continuaci´n, el efecto de los
o
comandos 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 distribuci´n de variables
´ o
de naturaleza cuantitativa. El comando hist() proporciona el histograma de
una variable. En concreto, el siguiente comando establece un histograma con 20
clases 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 el
que hemos establecido un ancho de banda de 0,1. Puede ser interesante jugar
con el valor de bw y ver el efecto sobre el gr´fico:
a
lines(density(eruptions,bw=0.1))
La inspecci´n del histograma nos hace ver que los datos no siguen ninguna de
o
las distribuciones te´ricas habituales -normal, gamma,...- Vamos a jugar algo
o
m´s con los datos. ¿Para qu´ sirve el siguiente comando?:
a e
longeruptions<-eruptions[eruptions>=3]
Comprob´moslo:
e
length(longeruptions)
length(eruptions)
15. CAP´ ´
ITULO 2. ANALISIS DE DATOS 14
Y ahora obtengamos el histograma y la estimaci´n de densidad para las erup-
o
ciones de al menos tres minutos de duraci´n:
o
hist(longeruptions,breaks=10,freq=FALSE)
lines(density(longeruptions,bw=0.1))
Este histograma no es perfectamente normal pero ¿existe evidencia suiciente
para 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 qu´ nos dice un gr´fico Q-Q:
e a
qqnorm(longeruptions)
2.3. Estad´
ıstica para dos variables
Vamos a ver algunos comandos para estad´ıstica de dos variables. Para empezar
creamos 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 o
m´s variables:
a
boxplot(A)
boxplot(A,B)
El comando t.test() nos permite comprobar la hip´tesis nula de que la media
o
aritm´tica poblacional de la variable de la que se han obtenido las observaciones
e
de A toma el valor mu -frente a la alternativa de que la media poblacional es
distinta de mu:
t.test(A,mu=0)
16. CAP´ ´
ITULO 2. ANALISIS DE DATOS 15
Podemos modificar la direcci´n de la hip´tesis alternativa mediante el argumento
o o
alternative:
t.test(A,mu=0,alternative="less")
El mismo comando t.test() nos permite efectuar un contraste de hip´tesis
o
sobre la igualdad de las medias de dos poblaciones:
t.test(A,B)
Por defecto, el comando t.test() asume que existe heterocedasticidad y por
tanto lleva a cabo la conocida como aproximaci´n de Welch -n´tese que los
o o
grados de libertad no son un n´mero entero-.
u
Pero, no tenemos por qu´ suponer heterocedasticidad. Vemos qu´ nos dice el co-
e e
mando var.test(). Con ´l conseguimos efectuar el contraste sobre la igualdad
e
de 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 hip´tesis de igualdad de varianzas pode-
o
mos modificar el comando t.test() mediante el argumento var.equal=TRUE. Se
calcula de este modo una varianza estimada com´n a partir de las varianzas
u
muestrales 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 provienen
de una variable con distribuci´n normal -o aplicar el teorema central del l´
o ımite-
Si esto no es as´ -o el teorema no es aplicable-, es mejor recurrir a la prueba no
ı
param´trica correspondiente:
e
wilcox.test(A,B)
Una utilidad adicional de la prueba de Kolmogorov-Smirnov es la de contrastar
que dos conjuntos de datos provienen de la misma poblaci´n. ¿Es as´ en nuestro
o ı
caso?
ks.test(A,B)
17. CAP´ ´
ITULO 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 datos
Titanic 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 prueba
de hip´tesis Chi cuadrado sobre la independencia de las variables que componen
o
las 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 la
tabla total:
mosaicplot(~ Sex + Age, data=Titanic)
Vamos, a continuaci´n, a extraer algunas subtablas de la tabla global. En con-
o
creto, creamos la tabla AgeSurvived a partir de las variables 3 y 4 de la tabla
Titanic. Igualmente, obtenemos la tabla ClassSex a partir de las variables 1
y 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-
resentaci´n gr´fica de la desviaci´n respecto a la independencia de las variables
o a o
consideradas. Este comando s´lo puede emplearse para tablas de contingencia
o
de dos variables:
assocplot(ClassSex)
18. CAP´ ´
ITULO 2. ANALISIS DE DATOS 17
assocplot(AgeSurvived)
summary(ClassSex)
summary(AgeSurvived)
Seguimos extrayendo tablas. ¿Qu´ ocurri´ con el Titanic?
e o
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 con
formato de tabla -la base de datos Titanic- pero ¿c´mo podemos construir
o
una tabla a partir de datos de un dataframe -por ejemplo-? Para verlo vamos a
emplear la base de datos cars -que es de la clase dataframe-:
cars
attach(cars)
Para empezar creamos dos factores a partir de las variables num´ricas:
e
fdist<-cut(dist,breaks=5)
fspeed<-cut(speed,breaks=5)
El comando table() nos da como resultado un objeto de la clase tabla, que en
esta ocasi´n se guarda con el nombre de DistSpeed:
o
DistSpeed<-table(fdist,fspeed)
DistSpeed
plot(DistSpeed)
summary(DistSpeed)
assocplot(DistSpeed)
19. CAP´ ´
ITULO 2. ANALISIS DE DATOS 18
2.5. Regresi´n lineal
o
La regresi´n lineal la efectuamos en R mediante el comando lm(). Su resultado
o
es un objeto de la clase lista, al que podemos aplicar otros comandos de la
siguiente forma:
lr1<-lm(dist~speed)
summary(lr1)
anova(lr1)
plot(lr1)
Para obtener el diagrama de dispersi´n de las variables recurrimos al comando
o
plot() y a˜adimos una l´
n ınea recta -la recta de regresi´n- mediante el comando
o
abline() al que le pasamos los valores correspondientes del objeto lr1 -que es
el 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 guarda
´
los resultados de la regresi´n:
o
influence.measures(lr1)
Para terminar con la regresi´n veamos un ejemplo de regresi´n lineal m´ltiple
o o u
-trabajamos con la base de datos LifeCycleSavings-. Es especialmente intere-
sante ver la sintaxis de la formula que recoge la relaci´n entre las variables
o
ex´genas y end´gena:
o o
LifeCycleSavings
fm1 <- lm(sr ~ pop15 + pop75 + dpi + ddpi, data = LifeCycleSavings)
summary(fm1)
anova(fm1)
20. CAP´ ´
ITULO 2. ANALISIS DE DATOS 19
2.6. An´lisis de componentes principales
a
Vamos a ver c´mo resuelve R el an´lisis de componentes principales. Para ello
o a
vamos a emplear la base de datos USArrests, que recoge datos sobre detenciones
efectuadas en diferentes estados de EE.UU.:
USArrests
plot(USArrests) # matriz de diagramas de dispersi´n
o
pc1<-princomp(USArrests) # guardamos los resultados del ACP en
pc1
plot(pc1) #valores propios. ¿Es adecuado el ACP?
biplot(pc1) #representaci´n simult´nea de variables e individuos
o a
pc1<-princomp(USArrests,scale=TRUE) #trabajamos con la matriz
cor.
biplot(pc1)
summary(pc1)
pc1$scores # puntuaciones de los individuos sobre los ejes
2.7. Ejemplo de tipolog´ de Comunidades Aut´no-
ıa o
mas con el paquete ade4 (Cuidado: Antes
de 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 an´lisis de componentes principales normado y ponderado (con la
a
poblaci´n de las comunidades aut´nomas) empleando el comando dudi.pca():
o o
library(ade4)
acp2<-dudi.pca(subset(DatosComunidades,select=-c(UE15,POBLACION)),row.w=DatosComunid
Veamos el resumen de resultados:
21. CAP´ ´
ITULO 2. ANALISIS DE DATOS 20
acp2
El c´
ırculo de correlaci´n:
o
s.corcircle(acp2$co)
Las coordenadas de las Comunidades Aut´nomas en el nuevo sistema de refer-
o
encia:
s.label(acp2$li)
Ahora vamos a aplicar un algoritmo de clasificaci´n jer´rquica ascendente con el
o a
comando hclust(). Previamente debemos calcular la matriz de distancias entre
las Comunidades Aut´nomas para lo que nos valdremos del comando dist():
o
dist1<-dist(subset(DatosComunidades,select=-c(UE15,POBLACION)))
dist1
clust1<-hclust(dist1)
plot(clust1)
2.8. An´lisis de componentes principales con Fac-
a
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$
Vemos los resultados referidos a los valores propios (incluidos porcentajes de
inercia acumulados y sin acumular correspondientes a cada componente princi-
pal):
acp2$eig
Los resultados para los individuos (coordenadas, contribuciones y cosenos cuadra-
dos):
22. CAP´ ´
ITULO 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
23. Cap´
ıtulo 3
Varios
3.1. Packages
Las instalaciones de R consisten en un m´dulo b´sico y un conjunto de packages
o a
recomendados -alrededor de 25-. Sin embargo existen cientos de packages que
recogen las contribuciones de la comunidad que desarrolla R as´ como de otros
ı
investigadores. Para ver cu´les son los packages que se encuentran instalados
a
en R debe utilizarse el comando library(). Este mismo comando sirve para
cargar un package previamente instalado, en la forma library(package). El
comando search() proporciona un listado de los packages activos.
La forma m´s sencilla de instalar un nuevo package es mediante la opci´n
a o
Paquetes / Instalar paquetes a partir de archivos zip locales que se encuen-
tra disponible en el men´ principal de R Gui. Obviamente es necesario haber
u
obtenido previamente el package en formato zip.
3.2. Ayuda en R
La sintaxis de R es relativamente complicada. Por ese motivo es del m´ximo
a
inter´s disponer de una buena ayuda on-line. Esa ayuda se puede invocar de
e
varias 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 de
un package concreto
example(comando) #proporciona ejemplos sobre un comando concreto
22
24. CAP´
ITULO 3. VARIOS 23
3.3. Establecer el directorio de trabajo
Para conocer cu´l es el directorio de trabajo por defecto debemos utilizar la fun-
a
ci´n getwd(). A continuaci´n podemos establecer el nuevo directorio de trabajo
o o
mediante la funci´n setwd(), del siguiente modo:
o
setwd("c:/docs/mydir")
3.4. ´
Area de trabajo en R (Workspace)
El ´rea de trabajo es el lugar donde R guarda todos los objetos que est´n activos
a a
en un momento dado. Se puede obtener una copia del ´rea de trabajo mediante
a
el comando save.image().
Si, por ejemplo, deseamos obtener una copia de todos los objetos del ´rea de
a
trabajo en el archivo .RData -archivo de ´rea de trabajo por defecto- deberemos
a
escribir:
save.image()
Si deseamos guardar s´lo algunos de los objetos y, adem´s, deseamos hacerlo en
o a
un archivo con un nombre distinto deberemos emplear el comando:
save(ListaDeObjetos,file="myfile.RData")
Cuando deseemos recuperar los objetos copiados en un archivo de ´rea de tra-
a
bajo debemos emplear la funci´n:
o
load("myfile.RData")
3.5. Hist´rico de comandos
o
Si deseamos guardar una copia de los comandos que hemos utilizado o cargarla
en la memoria debemos emplear respectivamente los comandos savehistory(file
= ".Rhistory") y loadhistory(file = ".Rhistory").
25. CAP´
ITULO 3. VARIOS 24
3.6. Ejecuci´n de comandos desde un archivo de
o
texto
Adem´s de trabajar interactivamente con R tambi´n es posible escribir un con-
a e
junto de comandos -correspondientes, por ejemplo, a un an´lisis determinado- y
a
ejecutar todos ellos de una sola vez -esta forma de funcionamiento se llama pro-
ceso por lotes (batch processing)-. Podemos acceder a ella mediante el comando
source(). Por ejemplo, el siguiente comando ejecuta los comandos recogidos en
el fichero de texto MiFichero.txt situado en el directorio de trabajo :
source("MiFichero.txt")
3.7. Trabajo con gr´ficos
a
Adem´s de ver los gr´ficos en la consola gr´fica puede interesar obtener una
a a a
copia de ellos para incluirlos en un documento de texto o en un informe. Para
ello 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 gr´fico en un
a
archivo llamado myplot.jpg situado en el directorio C:/MisGraficos. Adem´s, a
el formato del gr´fico ser´ jpg -cabe tambi´n crear gr´ficos con formato pdf,
a a e a
Windows Metafile, png, etc´tera-. El segundo comando recoge la generaci´n del
e o
gr´fico. El tercero devuelve el destino de los gr´ficos a la consola gr´fica.
a a a
26. 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 Approach
Through 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 and
Analysis of Variance; Wiley.
Gelman, A., Hill, J. (2007); Data Analysis Using Regression and Multilevel/Hierarchical
Models; Cambridge University Press
Kuhnert, P., Venables, B. (2005); An Introduction to R: Software for Statistical
Modelling & 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 – an
Example-based Approach; Cambridge University Press.
Marques de S´, J.P. (2007); Applied Statistics Using SPSS, STATISTICA,
a
MATLAB and R; 2nd edition; Springer.
25
27. CAP´
ITULO 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.
Quen´, H. (2006); Statistics with R and S-Plus; Utrecht University
e
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: A
Programming 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
28. Recursos online
P´gina del proyecto R: http://www.r-project.org/
a
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
P´gina web de Quick-R: http://www.statmethods.net/
a
R Graphical Manual: http://bm2.genes.nig.ac.jp/RGM2/index.php
R video tutorials: http://www.decisionsciencenews.com/?p=261
P´gina de JGR. Java GUI for R: http://jgr.markushelbig.org/JGR.html
a
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 b´sico de R de la Universidad de Barcelona: http://www.ub.es/stat/
a
docencia/EADB/Curso%20basico%20de%20R.htm
Curso introductorio de R de Ra´l Vaquerizo Romero: http://es.geocities.
u
com/r_vaquerizo/Manual_R_menu.htm
27
29. CAP´
ITULO 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/