Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
para investigacin.
Introduccin a R.
III
IV PREFACIO
Prefacio III
1. Introduccin a R. 1
1. Qu es R? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1 Por qu emplear R? . . . . . . . . . . . . . . . . . . . . . . 1
1.2 Instalacin de R . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.3 Ayuda en R . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.4 Espacio y directorio de trabajo . . . . . . . . . . . . . . . . . 3
1.5 Cosas varias: asignaciones, variables, comentarios, etc. . . . . 4
1.6 Una sesin tipo en R . . . . . . . . . . . . . . . . . . . . . 4
1.7 R como calculadora . . . . . . . . . . . . . . . . . . . . . . . 6
1.8 En R trabajamos con scripts . . . . . . . . . . . . . . . . . . 7
1.9 Ampliar la funcionalidad de R. Packages . . . . . . . . . . . . 7
1.10 Otra sesin tipo de R . . . . . . . . . . . . . . . . . . . . 10
1.11 RStudio. Una GUI para R multiplataforma . . . . . . . . . . 11
2. Estructuras de datos . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.1 Vectores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.2 Matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.3 Dataframes . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.4 Factores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3. Entrada de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
V
VI NDICE GENERAL
Bibliografa 99
VIII NDICE GENERAL
Captulo 1
Introduccin a R.
1. Qu es R?
R es un potente lenguaje orientado a objetos y destinado al anlisis estadstico y la
representacin de datos. Se trata de software libre que permite su utilizacin libre y
gratuitamente. La comunidad cientfica internacional lo ha elegido como la lingua
franca del anlisis de datos. Y tiene una gran implantacin en universidades y cada
vez ms en mundo empresarial.
Otra definicin: R es un paquete estadstico de ltima generacin al mismo tiempo
que un lenguaje de programacin.
Estadstica se puede hacer con miles de paquetes estadsticos, incluso con hojas
de clculo e incluso los ms osados con lpiz y papel (aunque la exactitud de
las mquinas es una potencia que no podemos desdear: clculo de p-valores,
estadsticos exactos. . . ).
Qu tiene R que tanto nos gusta?:
1
2 CAPTULO 1. INTRODUCCIN A R.
Es compatible con todos los formatos de datos (csv, xls, sav, sas. . . )
Es ampliable, si quieres aadir algo: empaqutalo!
Hay miles de tcnicas estadsticas implementadas, cada da hay ms.
...
1.2 Instalacin de R
Lanzar R y salir:
en Linux: R
en Windows: doble clic en el icono R
1.3 Ayuda en R
Funcin Accin
help.search("mean")
RSiteSearch("mean") Ayuda online
apropos("mean", mode Lista todas las funciones que tienen
="function") la palabra mean en el nombre
data() Muestra los conjuntos de datos de
ejemplo que hay disponibles
Funcin Accin
getwd() Muestra el wd
setwd(midirectorio) Ajusta el wd al especificado
ls() o dir() Lista lo que hay en el wd
history() Muestra los ltimos comandos
ejecutados
savehistory() Guarda el historial de comandos,
por defecto en .RHistory
loadhistory() Carga el historial de comandos
4 CAPTULO 1. INTRODUCCIN A R.
mivariable
## [1] 7
>getwd()
[1] "C:/Documents and Settings/Administrador/Mis documentos"
set.seed(1)
x <- runif(20)
x
1. QU ES R? 5
summary(x)
hist(x)
savehistory()
save.image()
q()
6 CAPTULO 1. INTRODUCCIN A R.
45 + 23
## [1] 68
100/4
## [1] 25
sqrt(25)
## [1] 5
# usando variables
x <- 100/4
5
## [1] 5
pi
## [1] 3.142
r = 5
area <- 2 * pi + r
area
## [1] 11.28
c(25, 100, 2, 3) * 5
source(fichero_de_comandos.r)
Un fichero que crease un histograma de una curva normal debera de contener, por
ejemplo, estas instrucciones:
x <- rnorm(100)
# crea 100 observaciones aleatorias de una normal tipificada
hist(x)
source(script.R)
.libPaths()
[1] "C:/Archivos de programa/R/R-2.14.1/library"
install.packages("foreign")
library("foreign")
Mensajes de aviso perdidos
package foreign was built under R version 2.14.2
Nota. Los Task View sin colecciones de paquetes para trabajos concretos o para
reas de trabajo concretas. Instalndose una Task View automticamente conjuntos
enteros de paquetes se instalan sin tener que ir instalando paquete a paquete.
or
update.views(Econometrics)
peso <- c(4.4, 5.4, 6.4, 3.2, 7.5, 3, 6.1, 3.1, 6.1, 7, 3.4)
# c() concatena y crea un vector
edad <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 1)
edad
## [1] 1 2 3 4 5 6 7 8 9 1
peso
## [1] 4.4 5.4 6.4 3.2 7.5 3.0 6.1 3.1 6.1 7.0 3.4
## [1] 5.055
mean(edad)
## [1] 4.6
length(edad)
## [1] 10
1. QU ES R? 11
## [1] 11
## [1] 11
cor(peso, edad)
## [1] -0.1883
plot(edad, peso)
q()
Una de las cosas que menos gustan en R es que se ve diferente en Windows que
en Linux. Algo que suele molestar a los usuarios algo experimentados en R es que
los mens te limiten (algo parecido le pasa a los usuarios de linux). En general el
usuario de R no quiere que los mens de la aplicacin le sugieran qu hacer con sus
datos, ms bien simplemente quiere decirle al software qu hacer con los datos,
es l el que manda, The Boss. Esto se hace mediante comandos y un poco de
formacin.
Una programa que soluciona en gran medida estos problemas es RStudio http:
//rstudio.org/.
RStudio es una GUI, Graphical user interface para R programada en C#, mul-
tiplataforma (Windows, Linux y Mac). Que ana todos los entornos y guarda la
filosofa de los comandos aportando algunas ayudas que hacen ms llevadero el
da a da.
12 CAPTULO 1. INTRODUCCIN A R.
Integra la librera.
Etc.
2. Estructuras de datos
read.table("ejemplo01.csv",sep=';', head=T)
paciente admision edad diabetes status
1 1 11/11/2010 23 tipo 1 bueno
2 2 11/01/2009 56 tipo 1 bueno
3 3 15/03/2012 78 tipo 2 malo
4 4 28/04/2008 34 tipo 1 bueno
5 5 09/08/2011 23 tipo 2 mejora
6 6 24/04/2012 12 tipo 1 bueno
7 7 08/08/2008 56 tipo 2 bueno
>
Hay diversos tipos de variables, una forma de clasificarlas podra ser esta: datos
nominales, ordinales y numricas.
En el ejemplo anterior:
Nota. Para almacenar los datos R cuenta, como todos los lenguajes de programacin,
de una gran variedad de estructuras de datos. Estas van de lo ms sencillo a las
estructuras ms complejas.
2.1 Vectores
Son matrices de una dimensin que solamente pueden contener valores numricos,
alfanumricos y valores lgicos. Emplearemos la funcin c() para formar vectores
(funcin combine)
x <- c(1, 2, 3, 4, 5, 6, 7, 8)
y <- c("juan", "pepe", "iaky", "amparito", "mariano", "juancar",
"fulano", "elefante")
z <- c(TRUE, TRUE, FALSE, TRUE, FALSE, FALSE, TRUE, TRUE)
y[3]
2. ESTRUCTURAS DE DATOS 15
## [1] "iaky"
y[6]
## [1] "juancar"
y[8]
## [1] "elefante"
x[3]
## [1] 3
x[1]
## [1] 1
y[c(6, 8)]
c(2:6)
## [1] 2 3 4 5 6
c(1:3)
## [1] 1 2 3
Nota: Podemos crear un vector de un cierto tipo y dejarlo vaco para ir llenn-
dolo despus en un bucle por ejemplo. Se puede hacer con las instrucciones
v<-vector("numeric") o v<-vector(haracter").
16 CAPTULO 1. INTRODUCCIN A R.
2.2 Matrices
Una matriz es un vector con un atributo adicional (dim), que a su vez es un vector
numrico de longitud 2 que define el nmero de filas y columnas. Se crean con la
funcin matrix().
## [,1] [,2]
## [1,] NA NA
## [2,] NA NA
## [,1] [,2]
## [1,] 1 3
## [2,] 2 4
## [,1] [,2]
## [1,] 5 5
## [2,] 5 5
## [,1] [,2]
## [1,] 1 3
## [2,] 2 4
## [1] 2 3
x <- 1:15
x
## [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
dim(x)
## NULL
Los Arrays son otro tipo similar a las matrices pero pueden tener ms de dos
dimensiones. Nos nos detenemos en ellos.
18 CAPTULO 1. INTRODUCCIN A R.
2.3 Dataframes
## [1] 8
length(edad)
## [1] 8
length(peso)
## [1] 8
df[1:2]
## caseid nombre
## 1 1 juan
## 2 2 pp
## 3 3 iaky
## 4 4 amparo
## 5 5 mariano
## 6 6 juancar
## 7 7 fulano
## 8 8 elefante
df[c(1, 3)]
## caseid edad
## 1 1 23
## 2 2 24
## 3 3 45
## 4 4 67
## 5 5 32
## 6 6 56
## 7 7 78
## 8 8 45
df$nombre
df$peso
20 CAPTULO 1. INTRODUCCIN A R.
## [1] 34 34 56 78 34 56 76 87
Ampliar un dataframe:
## [1] 8
length(estado)
## [1] 8
table(df$diabetes, df$estado)
##
## bueno malo
## Tipo1 2 3
## Tipo2 3 0
2. ESTRUCTURAS DE DATOS 21
df$peso
## [1] 34 34 56 78 34 56 76 87
attach(df)
peso
## [1] 34 34 56 78 34 56 76 87
detach(df)
Nota: si ya existe un objeto con ese nombre puede llevarnos a confusin. Una
alternativa al attach es el with().
with(df, {+peso})
## [1] 34 34 56 78 34 56 76 87
2.4 Factores
Las variables pueden ser clasificadas como nominales, ordinales o numricas. Las
variables nominales son variables categricas sin un orden definido, como diabetes
en nuestro ejemplo anterior.
df$diabetes
Las variables ordinales, por ejemplo estatus, implican orden pero no cantidad.
df$estado
str(estado)
Nota: La funcin str() nos muestra la estructura de un objeto. Observa que antes
de hacer a diabetes un factor era un vector de Chars.
3. Entrada de datos
R es compatible con prcticamente cualquier formato de datos.
df<-data.frame(edad=numeric(0),sexo=character(0), peso=numeric(0))
df
[1] edad sexo peso
<0 rows> (or 0-length row.names)
df<-edit(df)
24 CAPTULO 1. INTRODUCCIN A R.
header ser TRUE o FALSE segn la primera fila del fichero ASCCI
represente el nombre de las variables.
sep es el delimitador, es decir el separador de campos. Por defecto es el
espacio pero se puede especificar lo que sea: sep=., sep=,, sep=
(tabulacin). . .
row.names es un parmetro opcional para especificar una o varias variables
de identificador de casos.
Por defecto las variables de tipo carcter se convierten a factores, si queremos que
no lo haga habr que indicarle stringsAsFactor = FALSE como opcin.
Hay muchas ms opciones, prueba a mirar la ayuda. . . . help(read.table). Al-
gunas muy importantes tratan el tema de tratar los valores faltantes (na.strings
= NA) , o de la separacin de decimales para nmeros (dec = .).
3. ENTRADA DE DATOS 25
Lo mejor para leer ficheros excel es guardar stos en formato csv, es decir, texto
delimitado por comas. Tambin podemos leer el xls directamente con el paquete
RODBC.
> #install.packages("RODBC")
--- Please select a CRAN mirror for use in this session ---
probando la URL 'http://cran.es.r-project.org/bin/windows/
contrib/2.14/RODBC_1.3-5.zip'
Content type 'application/zip' length 753058 bytes (735 Kb)
URL abierta
downloaded 735 Kb
library(xlsx)
ficheroexcel <- "c:/ficheroexcel.xlsx"
mydataframe <- read.xlsx(ficheroexcel, 1)# La instruccin
anterior de la primera hoja del fichero ficheroexcel.xlsx
26 CAPTULO 1. INTRODUCCIN A R.
install.packages("foreign")
install.packages("Hmisc")
library(Hmisc)
df4 <- spss.get("mydata.sav", use.value.labels = TRUE)
SAS :
proc export data=mydata
outfile="mydata.csv"
dbms=csv;
run;
En R:
3.6 Anotaciones
Etiquetas de valores
Podemos tener un factor codificado, por ejemplo sexo, donde 1 es Masculino y
2 Femenino. Podemos crear unas etiquetas con el siguiente cdigo.
Primero le aadimos a nuestro ejemplo una variable ms (una columna) de unos y
doses representando el sexo codificado.
str(df)
Creamos la etiqueta
Funcin Accin
Trabajaremos desde ahora con la GUI RStudio, veremos que todo es ms sencillo y
procuraremos coger un poco de prctica en trabajo sobre scripts, que es como la
mayor parte de los especialistas trabajan. Pronto veremos que es lo ms cmodo.
Vamos a crear un dataset y trabajaremos con l a lo largo del captulo.
Para que sea asequible vamos a crear slo 3 observaciones. Esta es una modificacin
del ejemplo02.csv que se puede descargar del material del curso.
# getwd()
manager <- c(1:5)
date <- c("10/11/08", "10/12/08", "10/13/08", "10/14/08",
"10/15/08")
country <- c("US", "US", "UK", "UK", "UK")
gender <- c("M", "F", "F", NA, "F")
age <- c(NA, 45, 25, 39, 99)
q1 <- c(5, 3, 3, 3, 2)
q2 <- c(5, 5, 5, NA, 2)
q3 <- c(5, 5, 2, NA, 1)
df <- data.frame(manager, date, country, gender, age, q1, q2,
q3, stringsAsFactors = FALSE)
df
4. MANIPULACIN DE DATOS BSICA 29
Figura 1.9: df
Si queremos crear una nueva variable usando operadores aritmticos es tan sencillo
como saberse los operadores.
Operador Descripcin
+ Suma
- Resta
* Multiplicacin
/ Divisin
** Potencias
x % %y Mdulo (x mod y) 5 % %2 es 1
x %/ %y Divisin entera 5 %/ %2 is 2
q1masq2 <- q1 + q2
30 CAPTULO 1. INTRODUCCIN A R.
Operador Descripcin
df[, 3:11]
# missings
y <- c(1, 2, 3, NA)
is.na(y) # cules son NA?,
# recodificar
df$age[is.na(df$age)] <- 99
# observa qu ocurre con 'is.na(df)'
is.na(df[, 4:10])
## [1] NA
z
34 CAPTULO 1. INTRODUCCIN A R.
## [1] NA
## [1] 6
df <- na.omit(df)
df[, 4:11]
Lgico Convierte
is.numeric() as.numeric()
is.character() as.character()
is.vector() as.vector()
is.matrix() as.matrix()
is.data.frame() as.data.frame()
# conversin de tipos.
a <- c(1, 2, 3)
a
4. MANIPULACIN DE DATOS BSICA 35
## [1] 1 2 3
is.numeric(a)
## [1] TRUE
is.vector(a)
## [1] TRUE
a <- as.character(a)
a
is.numeric(a)
## [1] FALSE
is.vector(a)
## [1] TRUE
Para ordenar las filas de un datafarme empelamos la funcin order(), por defecto
ordena ascendentemente. Empleamos el signo menos para cambiar el sentido.
df.total
# unir matrices
A <- matrix(1:9, 3, 3)
B <- matrix(1:9, 3, 3)
AB.total <- cbind(A, B)
AB.total
# unir matrices
lA <- matrix(c("a", "b", "c", "d"), 2, 2)
lB <- matrix(c("A", "B", "C", "D"), 2, 2)
lAB.total <- cbind(A, B)
lAB.total
## q1 q2 q3
## 1 5 5 5
## 2 3 5 5
## 3 3 5 2
## 4 3 NA NA
## 5 2 2 1
## country
## 1 US
## 2 US
## 3 UK
## 4 UK
## 5 UK
str(new_df4)
str(new_df3)
# Seleccionar observaciones
df
5. Funciones
No nos vamos a parar en muchos detalles de las funciones, slo decir que hay
miles y miles, agrupadas en paquetes, y cada da hay ms paquetes que aporta la
comunidad y que se encuentran en CRAN como ya mencionamos al principio del
texto.
mean(x) Media
median(x) Mediana
sd(x) Desviacin estndar
var(x) Varianza
sum(x) Suma
range(x) Rango
42 CAPTULO 1. INTRODUCCIN A R.
min(x) Mnimo
max(x) Mximo
scale(x,center=TRUE,scale=TRUE) Estandarizar
## [1] 9
## [1] 1 3 5 7 9
seq(1, 20, 3)
## [1] 1 4 7 10 13 16 19
# repetir
rep(1, 5) # rep(ob, nmero de repet)
## [1] 1 1 1 1 1
5. FUNCIONES 43
rep(c("A", "B"), 5)
## [1] "A" "B" "A" "B" "A" "B" "A" "B" "A" "B"
rep(1:3, 2)
## [1] 1 2 3 1 2 3
# concatenar
cat("hola", "amigo")
## hola amigo
Una funcionalidad que resulta muy til al trabajar con R es que podemos
aplicar funciones a una gran cantidad de objetos: vectores, arrays, matrices,
dataframes. . .
## [1] 1 5 8
z <- matrix(runif(12), 3)
z
log(z)
## [1] 0.5616
Sobre control de flujo no vamos a tratar nada en este curso, slo mencionaremos
que como en cualquier lenguaje de programacin existe y es fundamental. Lo
mencionamos para quien quiera explorarlo y sacarle partido.
5. FUNCIONES 45
Sentencias FOR Ejecutar una sentencia hasta que la variable no est contenida
en la secuencia
for (var in seq) sentencia
# FOR
x <- 0
x
## [1] 0
for (i in 1:3) {
x <- x + 1
}
x
## [1] 3
for (i in 1:2) {
print("Viva el software libre!!")
}
i <- 5
while (i > 0) {
print("Perfecto mundo!")
i <- i - 1
}
if (condicin) sentencia
# IF-ELSE
if (TRUE) {
print("esta siempre se ejecuta")
}
if (FALSE) {
print("esta nunca se ejecuta")
} else {
print("lo ves?")
}
## [1] 10
6. ESTADSTICA DESCRIPTIVA CON R 47
f.potencia(5, 5)
## [1] 25
f.potencia(5)
## [1] 10
Ejercicio: Crear una funcin que acepte dos argumentos, uno que sea un char con
dos posibilidades param o noparam, que por defecto sea el valor param. El
segundo argumento que sea un vactor numrico. Y que nos devuelva para param,
la media, la desviacin tpica y la varianza del vector. Y para noparam, la medina,
los cuartiles 0.25 y 0.75, mximo y mnimo del vector.
Ejercicio: Crear una funcin que resuelva la ecuacin de segundo grado. Y probarla
para la ecuacin x2 + 5x - 16 = 0
# posible solucin
e2grado <- function(a, b, c) {
discriminante <- (b^2) - (4 * a * c)
solucion1 <- (-b + sqrt(discriminante))/(2 * a)
solucion2 <- (-b - sqrt(discriminante))/(2 * a)
c(solucion1, solucion2)
}
e2grado(1, 5, -16)
Cualitativos: aquellos que son categricos, pero no son numricos. Por ejem-
plo: color de los ojos, profesin, marca de coche...
Ordinales: aquellos que pueden ordenarse pero no son numricos. Por ejem-
plo: preguntas de encuesta sobre el grado de satisfaccin de algo (mucho,
poco, nada; bueno, regular, malo).
Intuitivamente, una variable aleatoria puede tomarse como una cantidad cuyo valor
no es fijo pero puede tomar diferentes valores; una distribucin de probabilidad se
usa para describir la probabilidad de que se den los diferentes valores (se denota
usualmente por F(x)).
Fx (x) = P (X x)
Z x
F (x) = f (t) dt
50 CAPTULO 1. INTRODUCCIN A R.
quantile(pesos, 0.05)
52 CAPTULO 1. INTRODUCCIN A R.
## 5%
## 1.677
quantile(pesos, 0.75)
## 75%
## 3.526
mean(pesos)
## [1] 2.994
x <- c(1, 2, 3, 4, 5)
mean(x)
## [1] 3
54 CAPTULO 1. INTRODUCCIN A R.
## [1] 3
Mediana de 1,2,4,5,6,6,8 es 5.
5+6
Mediana de 1,2,4,5,6,6,8,9 es = 5,5
2
Es conveniente cuando los datos son asimtricos. No es sensible a valores
extremos.
median(pesos)
## [1] 3.021
x <- c(1, 2, 4, 5, 6, 6, 8)
median(x)
## [1] 5
y <- c(1, 2, 4, 5, 6, 6, 8, 9)
z <- c(1, 2, 4, 5, 6, 6, 800)
median(z)
6. ESTADSTICA DESCRIPTIVA CON R 55
## [1] 5
modad(c(1, 1, 3, 4, 5, 6, 6, 6))
modac <- function(x) {
dd <- density(x)
dd$x[which.max(dd$y)]
}
modad(z)
56 CAPTULO 1. INTRODUCCIN A R.
1 2
S2 = (xi x)
n
Pn 2
2 i=1 Xi X
S =
n
Pn 2
i=1 Xi X
Sb2 =
n1
Desviacin tpica (standard deviation, SD, sd. . . )
Es la raz cuadrada de la varianza.
Tiene las misma dimensionalidad (unidades) que la variable. Versin esttica de
la varianza.
S = S2
Coeficiente de variacin
Es la razn entre la desviacin tpica y la media.
S
CV =
x
# Dispresin
pesos <- rnorm(1000, 3, 0.8)
range(pesos)
## [1] 1.021
var(pesos)
## [1] 0.6233
sd(pesos)
## [1] 0.7895
CV <- sd(pesos)/mean(pesos)
CV
## [1] 0.2637
6. ESTADSTICA DESCRIPTIVA CON R 59
Curtosis o apuntamiento
La curtosis nos indica el grado de apuntamiento (aplastamiento) de una distribucin
con respecto a la distribucin normal o gaussiana. Es una medida adimensional.
Una nota al dorso. Error tpico de la media (SEM) Error tpico de la media:
Cuando estimamos la media a partir de una muestra de un determinado tamao
(n) los valores que toma la media en las diferentes muestras vara. A la desviacin
tpica de los valores que toma el estadstico se le denomina error tpico de la media.
Da una idea de la variabilidad del estadstico.
Ojo!: No de la distribucin de la variable.
x =
n
Sb
Sx =
n
Nota: Un error muy tpico de los investigadores es mostrar medias y errores
tpicos de la media en lugar de la desviacin tpica y adems poner bar plots.
Es un error o es intencionado?
Por qu solemos mostrar grficos de barras y errores tpicos de la media (SEM)?
60 CAPTULO 1. INTRODUCCIN A R.
(a) Data represents the mean +SEM for the individual cells studied
(N=7 for both groups). Current trace calibration bar represents 1000
pA...
Es un grfico que suministra informacin sobre los valores mnimo y mximo, los
cuartiles Q1, Q2 o mediana y Q3, y sobre la existencia de valores atpicos y simetra
de la distribucin.
Li = Q1 1,5IQR
Ls = Q3 + 1,5IQR
IQR = Q3 Q1
boxplot(pesos)
head(df)
## p grupo
## 1 1.684 M
## 2 1.762 M
## 3 3.650 M
## 4 3.774 M
## 5 3.619 M
## 6 4.487 M
boxplot(df$p ~ df$grupo)
# histogramas
head(df)
6.2 ALGUNOS GRFICOS TILES (MUY POR ENCIMA) 63
## p grupo
## 1 1.684 M
## 2 1.762 M
## 3 3.650 M
## 4 3.774 M
## 5 3.619 M
## 6 4.487 M
str(df)
## p altura grupo
## 1 3.961 89.30 M
## 2 3.892 93.15 M
## 3 1.136 85.80 M
## 4 2.885 82.27 M
## 5 2.368 81.68 M
## 6 2.380 99.89 M
str(df)
summary(df)
## p altura grupo
## Min. :0.35 Min. : 64.6 H:1000
## 1st Qu.:1.90 1st Qu.: 86.5 M:1000
## Median :2.37 Median : 92.6
## Mean :2.51 Mean : 92.1
## 3rd Qu.:3.08 3rd Qu.: 97.6
## Max. :5.50 Max. :122.2
66 CAPTULO 1. INTRODUCCIN A R.
summary(df[which(df$grupo == "M"), ])
## p altura grupo
## Min. :0.35 Min. : 64.6 H: 0
## 1st Qu.:2.49 1st Qu.: 82.5 M:1000
## Median :3.04 Median : 87.3
## Mean :3.05 Mean : 87.4
## 3rd Qu.:3.60 3rd Qu.: 92.4
## Max. :5.50 Max. :110.9
## p altura grupo
## Min. :0.35 Min. : 64.6 H: 0
## 1st Qu.:2.49 1st Qu.: 82.5 M:1000
## Median :3.04 Median : 87.3
## Mean :3.05 Mean : 87.4
## 3rd Qu.:3.60 3rd Qu.: 92.4
## Max. :5.50 Max. :110.9
## p altura grupo
## Min. :0.394 Min. : 79.3 H:1000
## 1st Qu.:1.651 1st Qu.: 92.8 M: 0
## Median :1.988 Median : 96.7
## Mean :1.978 Mean : 96.8
## 3rd Qu.:2.302 3rd Qu.:100.6
## Max. :3.614 Max. :122.2
stat.desc() del paquete pastecs La funcin stat.desc() del paquete pastecs, tiene
varias opciones muy interesantes:
stat.desc(x,basic=TRUE,desc=TRUE,norm=FALSE,p=0.95)
6.3 ALGUNAS FUNCIONES TILES PARA ESTADSTICOS DESCRIPTIVOS 67
stat.desc(df)
## p altura grupo
## nbr.val 2.000e+03 2.000e+03 NA
## nbr.null 0.000e+00 0.000e+00 NA
## nbr.na 0.000e+00 0.000e+00 NA
## min 3.497e-01 6.460e+01 NA
## max 5.502e+00 1.222e+02 NA
## range 5.152e+00 5.760e+01 NA
## sum 5.025e+03 1.841e+05 NA
## median 2.369e+00 9.256e+01 NA
## mean 2.513e+00 9.207e+01 NA
## SE.mean 1.925e-02 1.798e-01 NA
## CI.mean.0.95 3.775e-02 3.525e-01 NA
## var 7.411e-01 6.463e+01 NA
## std.dev 8.609e-01 8.039e+00 NA
## coef.var 3.426e-01 8.732e-02 NA
## p altura
## nbr.val 2.000e+03 2.000e+03
## nbr.null 0.000e+00 0.000e+00
## nbr.na 0.000e+00 0.000e+00
68 CAPTULO 1. INTRODUCCIN A R.
## p altura
## median 3.043262 87.269280
## mean 3.047432 87.382058
## SE.mean 0.025825 0.227225
## CI.mean.0.95 0.050677 0.445894
## var 0.666927 51.631337
## std.dev 0.816656 7.185495
## coef.var 0.267982 0.082231
## skewness -0.004771 0.005607
## skew.2SE -0.030840 0.036250
## kurtosis -0.094020 0.040453
## kurt.2SE -0.304205 0.130887
## normtest.W 0.999174 0.998500
## normtest.p 0.946942 0.554355
# install.packages('Hmisc')
library("Hmisc")
describe(df$p)
6.3 ALGUNAS FUNCIONES TILES PARA ESTADSTICOS DESCRIPTIVOS 69
## df$p
## n missing unique Mean .05 .10
## 2000 0 2000 2.513 1.309 1.517
## .25 .50 .75 .90 .95
## 1.896 2.369 3.082 3.764 4.098
##
## lowest : 0.3497 0.3943 0.4479 0.5127 0.5854
## highest: 5.1446 5.1709 5.4146 5.4535 5.5020
head(df$p)
describe(df$altura)
## df$altura
## n missing unique Mean .05 .10
## 2000 0 2000 92.07 78.69 81.29
## .25 .50 .75 .90 .95
## 86.49 92.56 97.63 102.08 104.60
##
## lowest : 64.60 66.14 66.81 67.19 67.97
## highest: 112.13 112.73 113.30 115.87 122.20
head(df$altura, 25)
Funcin tapply() Con la funcin tapply nos podemos construir fcilmente nues-
tras tablas de descriptivos de una forma muy elegante.
# tapply
tapply(df$p, df$g, mean)
70 CAPTULO 1. INTRODUCCIN A R.
## H M
## 1.978 3.047
## media sd mediana n
## H 1.978 0.4935 1.988 1000
## M 3.047 0.8167 3.043 1000
## sexo
## pais F M
## ES 2 1
## US 1 1
# frec relativas
prop.table(t) # porcentajes totales
## sexo
## pais F M
## ES 0.4 0.2
## US 0.2 0.2
prop.table(t) * 100
6.3 ALGUNAS FUNCIONES TILES PARA ESTADSTICOS DESCRIPTIVOS 71
## sexo
## pais F M
## ES 40 20
## US 20 20
## sexo
## pais F M
## ES 0.6667 0.3333
## US 0.5000 0.5000
## sexo
## pais F M
## ES 0.6667 0.5000
## US 0.3333 0.5000
72 CAPTULO 1. INTRODUCCIN A R.
Captulo 2
1. Poblacin y Muestra
La meta ms simple a la hora de analizar datos es sacar las conclusiones ms
fuertes con la cantidad limitada de datos de los que disponemos.
Dos problemas:
73
74 CAPTULO 2. INTRODUCCIN A LOS CONTRASTES.
La idea bsica de las estadstica es extrapolar, desde los datos recogidos, para
llegar a conclusiones ms generales sobre la poblacin de la que se han recogi-
do los datos.
Los estadsticos han desarrollado mtodos basados en un modelo simple:
Los tests te permiten hacer inferencias sobre la media (y tambin sobre otras
propiedades).
Ya hemos dicho que la idea bsica de las estadstica es extrapolar desde los datos
recogidos para llegar a conclusiones ms generales sobre la poblacin de la que
proceden los datos. El problema es que slo podemos aplicar las inferencias a
la poblacin de la que hemos obtenido las muestras y generalmente queremos
ir ms lejos. Desafortunadamente la estadstica no nos puede ayudar con estas
extrapolaciones. En este caso se necesita juicio cientfico y sentido comn para
hacer inferencias ms all de las limitaciones de la estadstica. As el anlisis
estadstico es slo parte de la interpretacin de nuestros datos.
2. La distribucin Normal
Z x
1 (t )2
1
e 2 2 dt
2
Qu cosas observamos en esta distribucin?
# vectordemedias
hist(vectordemedias, breaks = 20) # observamos si se parece
a una normal
SEM <- sd(vectordemedias)
SEM # indicador de la calidad de la estimacin de la media
mean(vectordemedias)
mean(b) #observad que difieren poco
attach(mtcars)
qqnorm(mpg)
qqline(mpg)
x <- rnorm(100, 0, 1)
qqnorm(x, main = "normal(0,1)")
qqline(x)
x <- runif(100, 0, 1)
qqnorm(x, main = "unif(0,1)")
qqline(x)
3. Intervalos de confianza
Ya hemos visto que la media que calculamos de una muestra probablemente no sea
igual a la media de la poblacin. El tamao de la diferencia depender del tamao
y de la variabilidad de la muestra (n, ). Basndonos en el TCL, combinamos
estos dos factores: tamao de la muestra (n) y variabilidad (), para calcular
intervalos de confianza a un determinado nivel de confianza; generalmente 95 %.
IC(95 %) ~ n,
3. INTERVALOS DE CONFIANZA 81
Si asumimos que tenemos una muestra aleatoria de una poblacin. Podemos estar
seguros al 95 % de que el IC (95 %) contiene a la media poblacional. Dicho de otra
manera: si generamos 100 IC(95 %) de una poblacin, se espera que contengan la
media poblacional en 95 casos y no lo haga en 5. No sabemos cul es la media
poblacional, as que no sabemos cundo ocurre esto.
Cmo los calculamos:
S S
(x z/2 , x + z/2 )
n n
##
## One Sample t-test
##
## data: x
## t = 1.275, df = 9, p-value = 0.2343
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
## -0.2909 1.0421
## sample estimates:
## mean of x
## 0.3756
##
## 1-sample proportions test with continuity correction
##
## data: 42 out of 100, null probability 0.5
## X-squared = 2.25, df = 1, p-value = 0.1336
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
## 0.3233 0.5229
## sample estimates:
## p
## 0.42
x <- c(110, 12, 2.5, 98, 1017, 540, 54, 4.2, 150, 432)
mean(x)
## [1] 242
median(x)
## [1] 104
4. P-VALOR. CONTRASTES DE HIPTESIS 83
wilcox.test(x, conf.int = T)
##
## Wilcoxon signed rank test
##
## data: x
## V = 55, p-value = 0.001953
## alternative hypothesis: true location is not equal
## to 0
## 95 percent confidence interval:
## 33.0 514.5
## sample estimates:
## (pseudo)median
## 150
observada se deba a una coincidencia, nunca se puede estar seguro. Lo nico que se
puede hacer es calcular las probabilidades de equivocarnos.
Si las poblaciones tienen la misma media realmente: cul es la probabilidad de
observar una diferencia tan grande o mayor entre las medias maestrales?
As pues:
H0 : = 25
86 CAPTULO 2. INTRODUCCIN A LOS CONTRASTES.
Ha : < 25
(la funcin t.test() no funciona porque los datos vienen resumidos, no tenemos
los datos crudos!, as que construimos nosotros el estimador y el p-valor).
## [1] -6.325
## [1] 6.847e-05
5. Potencia Estadstica
Cuando un experimento concluye diciendo que no se ha encontrado una diferen-
cia significativa, no implica que no haya diferencia; simplemente no la hemos
encontrado. Decimos entonces que no tenemos suficiente evidencia para rechazar
la hiptesis nula (la igualdad), as que la asumimos.
Posibles razones para un p-valor no significativo (p > 0,05):
6. Contrastes de normalidad
Cuando contrastamos lo primero que debemos tener en mente es cul es la hiptesis
nula. En los contrastes de normalidad la hiptesis nula es tambin conocida como
la hiptesis de normalidad, es decir, no hay diferencias entre nuestra distribucin
y una distribucin normal con esa media y esa sd.
Recordemos que hay muchas maneras de evaluar la normalidad:
Habamos visto los Grficos Q-Q que quizs son siempre la primera aproximacin
al problema junto con los histogramas que repercutan la distribucin emprica
(real de nuestros datos), frente a la curva de densidad terica, es decir la curva que
generamos sabiendo la media y la sd que pensamos que ha de tener.
x <- mtcars$mpg
h <- hist(x, breaks = 10, xlab = "Histograma emprico",
main = "Hist + Normal terica")
qqnorm(mtcars$mpg)
qqline(mtcars$mpg)
S
Zs =
S Es
K
Zk =
S Ek
6. CONTRASTES DE NORMALIDAD 91
shapiro.test(x)
##
## Shapiro-Wilk normality test
##
## data: x
## W = 0.9476, p-value = 0.1229
ks.test(x, pnorm)
##
## One-sample Kolmogorov-Smirnov test
##
## data: x
## D = 1, p-value < 2.2e-16
## alternative hypothesis: two-sided
92 CAPTULO 2. INTRODUCCIN A LOS CONTRASTES.
# install.packages('tseries')
library(tseries)
x <- mtcars$mpg
jarque.bera.test(x)
##
## Jarque Bera Test
##
## data: x
## X-squared = 2.241, df = 2, p-value = 0.3261
#install.packages("car");
library(car)
>var.test(df$q1,df$q2)
>var.test(df$q1~df$gender)
require(graphics)
str(InsectSprays)
head(InsectSprays)
## count spray
## 1 10 A
## 2 7 A
## 3 20 A
## 4 14 A
## 5 14 A
## 6 12 A
bartlett.test(InsectSprays$count, InsectSprays$spray)
##
## Bartlett test of homogeneity of variances
##
## data: InsectSprays$count and InsectSprays$spray
## Bartlett's K-squared = 25.96, df = 5,
## p-value = 9.085e-05
> #install.packages("HH")
> library(HH)
> hov(df$q1~df$gender)
hov: Brown-Forsyth
data: df$q1
F = 2.4, df:df$gender = 1, df:Residuals = 3, p-value =
0.2191
alternative hypothesis: variances are not identical
> plot.hov(df$q1~df$gender)
Notas generales sobre la eleccin del test: El artculo original de Levene propona
la media como estadstico de centralidad. Brown y Forsythe (1974) extendieron este
98 CAPTULO 2. INTRODUCCIN A LOS CONTRASTES.
99
100 CAPTULO 2. BIBLIOGRAFA
index.php?title=Distribuci%C3%B3n_normal&oldid=55624567.
14. Brown, M. B. and Forsythe, A. B. (1974), Journal of the American Statistical
Association, 69, 364-367.
15. R Core Team (2012). R: A language and environment for statistical com-
puting. R Foundation for Statistical Computing, Vienna, Austria. ISBN 3-
900051-07-0, http://www.R-project.org/