Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
7 de noviembre de 2008
Índice general
1. Estructuras de datos en R 3
1.1. Creación y eliminación de objetos. Vectores numéricos, de carácter
y lógicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 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. Análisis 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. Regresión lineal . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.6. Análisis de componentes principales . . . . . . . . . . . . . . . . 19
2.7. Ejemplo de tipologı́a de Comunidades Autónomas con el paque-
te ade4 (Cuidado: Antes de utilizar el package ade4 es preciso
instalarlo) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.8. Análisis de componentes principales con FactoMineR . . . . . . . 20
3. Varios 22
3.1. Packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.2. Ayuda en R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
1
ÍNDICE GENERAL 2
Estructuras de datos en R
ls()
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
numéricas sobre él, pero no es posible.
3
CAPÍTULO 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á?
Se repite tantas veces como sea necesario para ajustarse a la longitud del más
largo. Nótese que en R no existe el concepto de escalar sino como vector con un
único elemento.
x<-c(1,2)
y<-3
x+y
max(x)
min(x)
range(x)
length(x)
mean(x) # media aritmética
var(x) # varianza (con el divisor n-1)
Los vectores lógicos se pueden crear concatenando valores lógicos TRUE, FALSE
temp<-c(TRUE,FALSE,FALSE,FALSE,TRUE)
temp
temp<-x>13
CAPÍTULO 1. ESTRUCTURAS DE DATOS EN R 5
temp
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
fx. Vemos como el procedimiento summary() tiene diferentes efectos sobre un
vector numérico y sobre un factor.
x<-c(1,1,1,2,2,2,1,1,1)
summary(x)
fx<-as.factor(x)
fx
summary(fx)
fx<-factor(x,labels=c("chico","chica"))
CAPÍTULO 1. ESTRUCTURAS DE DATOS EN R 6
fx
summary(fx)
incomes<-rnorm(5000,100,10)
incomes
fincomes<-cut(incomes,breaks=60+10*(0:8))
summary(fincomes)
plot(fincomes)
plot(incomes)
hist(incomes)
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
CAPÍTULO 1. ESTRUCTURAS DE DATOS EN R 7
1.4. Listas
Las listas son una generalización del concepto de vector. Mientras estos deben
constar de componentes homogéneos en cuanto a su tipo, las listas pueden estar
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
en R para recoger los datos más habituales en Estadı́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)
attach(df1)
detach(df1)
CAPÍTULO 1. ESTRUCTURAS DE DATOS EN R 8
DatosPeso<-read.table("DatosPeso.txt", header=TRUE)
DatosPeso
attach(DatosPeso)
summary(Peso)
plot(Peso)
hist(Peso)
tapply(Peso,Sexo,mean)
tapply(Altura,Sexo,mean)
fix(DatosPeso)
DatosPeso
length(Peso)
length(Peso)
Data<-edit(data.frame())
write.table(df1,file="nombrearchivo.txt")
write.csv(df1,file="nombrearchivo.csv")
CAPÍTULO 1. ESTRUCTURAS DE DATOS EN R 10
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-
WorldPhones
class(WorldPhones)
cars
Si queremos ver las bases de datos disponibles en algún otro package debe-
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)
Capı́tulo 2
Análisis de datos
x<-rbinom(5000,5,.5)
x<-factor(x)
plot(x)
x<-rbinom(5000,5,.5)
hist(x)
x<-factor(x)
x
summary(x)
11
CAPÍTULO 2. ANÁLISIS DE DATOS 12
x<-seq(-2,2,by=0.001)
z<-dnorm(x,0,1)
plot(x,z)
w<-dnorm(x,0,2)
lines(x,w)
y<-dnorm(x,0,0.5)
lines(x,y)
faithful
class(faithful)
attach(faithful)
summary(eruptions)
fivenum(eruptions)
stem(eruptions)
feruptions<-cut(eruptions,breaks=5)
class(feruptions)
summary(feruptions)
plot(feruptions)
hist(eruptions,breaks=20,freq=FALSE)
lines(density(eruptions,bw=0.1))
La inspección del histograma nos hace ver que los datos no siguen ninguna de
las distribuciones teóricas habituales -normal, gamma,...- Vamos a jugar algo
más con los datos. ¿Para qué sirve el siguiente comando?:
longeruptions<-eruptions[eruptions>=3]
Comprobémoslo:
length(longeruptions)
length(eruptions)
CAPÍTULO 2. ANÁLISIS DE DATOS 14
hist(longeruptions,breaks=10,freq=FALSE)
lines(density(longeruptions,bw=0.1))
ks.test(longeruptions,"pnorm",mean(longeruptions),sqrt(var(longeruptions)))
O el de Shapiro
shapiro.test(longeruptions)
qqnorm(longeruptions)
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)
boxplot(A)
boxplot(A,B)
t.test(A,mu=0)
CAPÍTULO 2. ANÁLISIS DE DATOS 15
t.test(A,mu=0,alternative="less")
t.test(A,B)
var.test(A,B)
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ı́mite-
Si esto no es ası́ -o el teorema no es aplicable-, es mejor recurrir a la prueba no
paramétrica correspondiente:
wilcox.test(A,B)
ks.test(A,B)
CAPÍTULO 2. ANÁLISIS 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)
summary(Titanic)
plot(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
consideradas. Este comando sólo puede emplearse para tablas de contingencia
de dos variables:
assocplot(ClassSex)
CAPÍTULO 2. ANÁLISIS DE DATOS 17
assocplot(AgeSurvived)
summary(ClassSex)
summary(AgeSurvived)
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
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)
fdist<-cut(dist,breaks=5)
fspeed<-cut(speed,breaks=5)
DistSpeed<-table(fdist,fspeed)
DistSpeed
plot(DistSpeed)
summary(DistSpeed)
assocplot(DistSpeed)
CAPÍTULO 2. ANÁLISIS DE DATOS 18
lr1<-lm(dist~speed)
summary(lr1)
anova(lr1)
plot(lr1)
plot(speed,dist)
abline(lr1)
influence.measures(lr1)
LifeCycleSavings
fm1 <- lm(sr ~ pop15 + pop75 + dpi + ddpi, data = LifeCycleSavings)
summary(fm1)
anova(fm1)
CAPÍTULO 2. ANÁLISIS DE DATOS 19
USArrests
plot(USArrests) # matriz de diagramas de dispersión
DatosComunidades<-read.table("Prueba.txt", header=TRUE)
library(ade4)
acp2<-dudi.pca(subset(DatosComunidades,select=-c(UE15,POBLACION)),row.w=DatosComunid
acp2
El cı́rculo de correlación:
s.corcircle(acp2$co)
s.label(acp2$li)
dist1<-dist(subset(DatosComunidades,select=-c(UE15,POBLACION)))
dist1
clust1<-hclust(dist1)
plot(clust1)
library(FactoMineR)
acp2<-PCA(subset(DatosComunidades,select=-c(UE15,POBLACION)),row.w=DatosComunidades$
acp2$eig
acp2$ind
Los resultados para las variables (coordenadas, correlaciones con los compo-
nentes principales, contribuciones y cosenos cuadrados):
acp2$var
Capı́tulo 3
Varios
3.1. Packages
Las instalaciones de R consisten en un módulo básico y un conjunto de packages
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
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
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
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
interés disponer de una buena ayuda on-line. Esa ayuda se puede invocar de
varias maneras:
22
CAPÍTULO 3. VARIOS 23
setwd("c:/docs/mydir")
save.image()
save(ListaDeObjetos,file="myfile.RData")
load("myfile.RData")
source("MiFichero.txt")
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
archivo llamado myplot.jpg situado en el directorio C:/MisGraficos. Además,
el formato del gráfico será jpg -cabe también crear gráficos con formato pdf,
Windows Metafile, png, etcétera-. El segundo comando recoge la generación del
gráfico. El tercero devuelve el destino de los gráficos a la consola gráfica.
Bibliografı́a
25
CAPÍTULO 3. VARIOS 26
27
CAPÍTULO 3. VARIOS 28