Está en la página 1de 19

Curso Introduccin R: Sesin 4

David V. Conesa Guilln

Grup dEstadstica Espacial i Temporal en Epidemiologia i Medi Ambient


Dept. dEstadstica i Investigaci Operativa
Universitat de Valncia

David Conesa, GEei tEma (UV)

Introduccin a R: Sesin 4

1 / 38

Sesin 4: Anlisis de datos con R

En esta sesin:
1.- Introduccin.
2.- Inferencia en problemas univariantes.
3.- Inferencia en problemas de dos muestras.
4.- Anlisis de datos categricos.
5.- Anlisis de la Varianza.
6.- Regresin lineal simple.
7.- Anlisis de supervivencia.

David Conesa, GEei tEma (UV)

Introduccin a R: Sesin 4

2 / 38

1.- Introduccin.

Aunque con R podemos realizar anlisis estadsticos y numricos de


gran complicacin, no tiene ningn sentido el llevar a cabo un anlisis
ms complicado del estrictamente necesario.
De acuerdo con el principio de la navaja de Occam, la eleccin un
modelo estadstico debe ser siempre lo ms simple posible.
En esta sesin veremos los llamados test clsicos para algunos de los
anlisis de datos ms habituales que involucran una y dos muestras.
La primera parte del anlisis de unos datos siempre involucra la
descripcin numrica y grfica de los mismos.

David Conesa, GEei tEma (UV)

Introduccin a R: Sesin 4

3 / 38

Ejemplo
library(foreign)
ambiente<-read.spss(file="ambiente.sav", to.data.frame=TRUE)
attach(ambiente)
# Anlisis descriptivo numrico
summary(ambiente)
by(OZONO,OZONO,length) # No de lugares clasf. por ozono
by(SULFATO, OZONO, mean) # Media de sulfato por grupo de ozono
by(PH, PROVIN, summary) # Est. resumen de PH por provincia
# Diagrama de cajas por factores
boxplot(SULFATOPROVIN)
boxplot(PHOZONO)
# Grficos
hist(SULFATO, main="Histograma del SULFATO")
boxplot(PH, main="Diagrama de cajas del PH")
#Grficos por grupos
par(mfrow=c(2,2))
hist(PH, main="Histograma del PH")
by(PH, PROVIN, function(X, xlim){hist(X, xlim=xlim)},xlim=range(PH))

David Conesa, GEei tEma (UV)

Introduccin a R: Sesin 4

4 / 38

Contrastes estadsticos
Cuando utilizamos los contrastes?
Utilizamos un contraste estadstico para verificar si se cumple una
hiptesis de trabajo a partir de unos datos o hay evidencias estadsticas de
lo contrario.
Elementos de un contraste
Datos (obtenidos de forma muy diversa)
Hiptesis nula (H0 )
Hiptesis alternativa (HA )
Estadstico de contraste T (y su distribucin bajo H0 )
Valor observado del est. de contraste: t
P-valor: Prob. si H0 es cierta de que el valor de T sea ms extremo
que t en la direccin de la hip. alternativa
David Conesa, GEei tEma (UV)

Introduccin a R: Sesin 4

5 / 38

Tipos de contrastes
Contrastes Paramtricos
Asumen que los datos tienen una determinada distribucin
El contraste es sobre alguno de los parmetros de una distribucin
Ejemplo: Test de la t de Student para una muestra
Contrastes No Paramtricos
No asumen ninguna distribucin para los datos
En principio, son ms flexibles
Entonces, cul usamos?
Paramtricos, si se cumplen las hiptesis sobre los datos
No paramtricos, en otro caso
OJO: Param./No param. no contrastan exactamente lo mismo!!
David Conesa, GEei tEma (UV)

Introduccin a R: Sesin 4

6 / 38

2.- Inferencia en problemas univariantes.


Anlisis de una muestra: Test de la t
Contrastar la media de una poblacin: obtenemos una muestra
La distribucin de los elementos de la pob. es X N(, 2 )
x = (x1 , . . . , xn ) es nuestra muestra (obs. independientes)
2 es desconocida
Test
(

H0 : = 0
HA : =
6 0

Estad. contraste: T = x 0

var (x)/n

t(n 1)

Ejemplo
t.test(PH, mu=4)
t.test(SULFATO, mu=4)
David Conesa, GEei tEma (UV)

Introduccin a R: Sesin 4

7 / 38

Anlisis no param. de una muestra: Test de Wilcoxon


Descripcin
Contraste sobre la centralidad de una poblacin (mediana)
Observaciones independientes: x1 , . . . , xn
Distribucin simtrica de la poblacin
Contraste
H0 : Mediana = 0
HA : Mediana 6= 0
Ejemplo
x<-c(9,10,8,4,8,3,0,10,15,9)
wilcox.test(x, mu=5) #Es la mediana 5?

David Conesa, GEei tEma (UV)

Introduccin a R: Sesin 4

8 / 38

3.- Inferencia en problemas de dos muestras.


Test de correlacin
Contraste sobre la independencia (correlacin cero) de dos variables
Datos normales
Si no lo son, utilizamos la opcin method="kendall"
Contraste
H0 : = 0
HA : 6= 0
Ejemplo
library(foreign)
glucosa<-read.spss(file="glucosa.sav", to.data.frame=TRUE)
attach(glucosa)
cor(G1ANTES, G1DES)
cor.test(G1ANTES, G1DES)
David Conesa, GEei tEma (UV)

Introduccin a R: Sesin 4

9 / 38

Test de igualdad de varianzas

Descripcin
Contraste sobre el ratio de varianzas
Poblaciones normales
Contraste
H0 : 12 /22 = 1
HA : 12 /22 6= 1

T =

var (x1 )
var (x2 )

F (n1 1, n2 1)

Ejemplo
glucosa$DIF2<-G2DES-G2ANTES
var.test(glucosa$DIF2 EMBARAZO) # test de Fisher

David Conesa, GEei tEma (UV)

Introduccin a R: Sesin 4

10 / 38

Anlisis de 2 muestras: Test t


Descripcin
Comparar la media de dos poblaciones cualesquiera
La distribucin de los elementos de la pob. es X N(i , 2 ), i = 1, 2
x1 = (x11 , . . . , xn11 ) y x2 = (x12 , . . . , xn22 ), son nuestras muestras
Se puede usar con datos no normales si la muestra es grande (n > 30)
Test
(

T =

H0 : 1 = 2
HA : 1 =
6 2

x1 x2

var (x1 , x2 )( n1
1

var (x1 , x2 ) =

t(n1 + n2 2)

n2 1
var (x2 )
n1 + n2 2

1
)
n2

n1 1
var (x1 )
n1 + n2 2

Ejemplo
x <- c(0.80,0.83,1.89,1.04,1.45,1.38,1.91,1.64,0.73,1.46)
y <- c(1.15,0.88,0.90,0.74,1.21)
var.test(x,y); t.test(x, y, alternative="greater")
David Conesa, GEei tEma (UV)

Introduccin a R: Sesin 4

11 / 38

Anlisis de 2 muestras: Test Mann-Whitney


Descripcin
Comparamos si dos poblaciones tienen la misma mediana
Muestras: x1 = (x11 , . . . , xn11 ) y x2 = (x12 , . . . , xn22 )
Contraste
H0 : Mediana1 = Mediana2
HA : Mediana1 6= Mediana2
Ejemplo
x <- c(0.80,0.83,1.89,1.04,1.45,1.38,1.91,1.64,0.73,1.46)
y <- c(1.15,0.88,0.90,0.74,1.21)
wilcox.test(x, y) # opcional, alternative = "greater"

David Conesa, GEei tEma (UV)

Introduccin a R: Sesin 4

12 / 38

Anlisis de 2 muestras emparejadas: Test t


Descripcin
Comparar la media de dos poblaciones (p.ej., medidas al mismo
individuo en dos tiempos distintos)
La distribucin de los elementos de la poblacin es normal
x1 = (x11 , . . . , xn1 ) y x2 = (x12 , . . . , xn2 ), son nuestras muestras
Trabajamos con y = x1 x2 y aplicamos Test t para una muestra
Test
(

H0 : 1 2 = 0
H1 : 1 2 6= 0

Estad. contraste: T = y 0

var (y)/n

t(n 1)

Ejemplo
x <- c(1.83, 0.50,1.62,2.48,1.68,1.88,1.55,3.06,1.30)
y <- c(0.878,0.647,0.598,2.05,1.06,1.29,1.06,3.14,1.29)
t.test(x, y, paired=TRUE, alternative="greater")
David Conesa, GEei tEma (UV)

Introduccin a R: Sesin 4

13 / 38

Anlisis de 2 muestras emparejadas: Test Wilcoxon


Descripcin
Comparamos si dos poblaciones tienen la misma distribucin
Muestras: x2 = (x11 , . . . , xn1 ) y x2 = (x12 , . . . , xn2 )
Trabajamos con y = x1 x2
Utilizamos el Test de Wilcoxon para una muestra con y y 0 = 0
Contraste
H0 : Medianay = 0
HA : Medianay 6= 0
Ejemplo
wilcox.test(x, y, paired = TRUE, alternative = "greater")

David Conesa, GEei tEma (UV)

Introduccin a R: Sesin 4

14 / 38

4.- Anlisis de datos categricos


Contraste de independencia de dos variables
Se utiliza para contrastar la independencia de variables categricas
Contamos el nmero de sucesos en cada categora (o combinacin)
Comparamos el nmero de casos observados en cada grupo con el
nmero de esperados
Contraste
H0 : Var. ind.
HA : No H0

T =

(Oij Eij )2
Ei
i,j

2 ((n1 1)(n2 1))

Ejemplo
t<-table(ambiente[, c("OZONO", "PROVIN")]) # Homogeneidad?
chisq.test(t)
David Conesa, GEei tEma (UV)

Introduccin a R: Sesin 4

15 / 38

Otros anlisis de datos categricos.

El test anterior tambin se puede entender como un problema de


homogeneidad. til para valorar si en varias poblaciones se cumplen
las mismas proporciones de una determinada caracterstica.
Si nicamente queremos comparar dos proporciones, podemos utilizar
la funcin prop.test en el que especificamos dos vectores que
contienen el nmero de xitos sobre el total de pruebas.
Ejemplo
prop.test(c(4,196),c(40,3160))
Si en chisq.test(t) utilizamos la opcin correct=F, no realiza la
correccin de Yates (que es lo que hace por defecto).

David Conesa, GEei tEma (UV)

Introduccin a R: Sesin 4

16 / 38

Otros anlisis de datos categricos.

Para realizar un test de Bondad de ajuste en el que contrastar si unas


cantidades estn de acuerdo con unas determinadas probabilidades:
Ejemplo
chisq.test(c(10,3,2,6), p=c(0.2,0.2,0.3,0.3))
Para tablas 2x2 es posible utilizar el test exacto de Fisher:
Ejemplo
x<-as.matrix(c(6,4,2,8)); dim(x)<-c(2,2); fisher.test(x)

David Conesa, GEei tEma (UV)

Introduccin a R: Sesin 4

17 / 38

5.- Anlisis de la Varianza.

Antes de comenzar un ANOVA es importante comprobar las


condiciones de aplicabilidad.
Homocesdasticidad: para comprobar si las varianzas de los grupos son
homogneas podemos utilizar el test de Bartlett (bartlett.test())
o el de Fligner-Killeen (fligner.test()).
Normalidad: para comprobarla podemos utilizar el test de Kolmogorov
Smirnov (ks.test()) o el de Shapiro Wilk (shapiro.test()).
Ejemplo
bartlett.test(PHPROVIN)
fligner.test(PHPROVIN)
by(PH,PROVIN,shapiro.test)

David Conesa, GEei tEma (UV)

Introduccin a R: Sesin 4

18 / 38

Anlisis de varias muestras: ANOVA


Descripcin
Comparamos la media de p grupos
Asumimos distribucin Normal con varianzas iguales: yij N(i , 2 )
Equivale al Test t para dos muestras independientes cuando p = 2
Contraste
H0 : 1 = 2 = . . . = p
HA : No H0
Cmo trabaja R?
Toma como referencia un nivel del factor
Utiliza variables dummy para el resto de niveles del factor
Permite cambiar el nivel de referencia: relevel()
David Conesa, GEei tEma (UV)

Introduccin a R: Sesin 4

19 / 38

Anlisis de varias muestras: ANOVA


Tabla ANOVA de 1 via
Variacin
Entre grupos
Residual
Total

Suma
P Cuadrados 2
SE = P i P
ni (y i y )
SR = i j (yij y i )2
P P
(y y )2
i
j ij

g.l.
p1
np
n1

Varianza
VE=SE/(p-1)
VR=SR/(n-p)

F
VE/VR

Ejemplo
boxplot(PH PROVIN)
anovaph<-lm(PH PROVIN)
anova(anovaph); summary(anovaph)
# tambin
anovaph2 <- aov(PH PROVIN)
summary(anovaph2)

David Conesa, GEei tEma (UV)

Introduccin a R: Sesin 4

20 / 38

Anlisis de varias muestras: Test Kruskal-Wallis

Descripcin
Extensin del Test de Mann-Whitney para 3 ms grupos
Comparamos las medianas de p grupos
Contraste
H0 : Mediana1 = . . . = Medianap
HA : No H0
Ejemplo
boxplot(SULFATO PROVIN)
kruskal.test(SULFATO PROVIN)

David Conesa, GEei tEma (UV)

Introduccin a R: Sesin 4

21 / 38

6.- Regresin Lineal Simple


Introduccin
Permite modelizar (y predecir) los valores de una variable respuesta
en funcin de una serie de covariables
Las covariables pueden ser de muy diverso tipo: continuas,
categricas, binarias, etc.
Existen diversos procedimientos para la seleccin de las covariables
ms adecuadas: correlacin, AIC, ...
Cundo es adecuado este modelo?
Las observaciones son independientes
La relacin entre la variable respuesta y las covariables es lineal
A veces es posible transformar los datos para obtener una relacin
lineal
David Conesa, GEei tEma (UV)

Introduccin a R: Sesin 4

22 / 38

El modelo de regresin lineal simple

Caractersticas
yi , i = 1, . . . , n: variable respuesta
xi , i = 1, . . . , n: covariable, variable explicativa
i N(0, 2 ), i = 1, . . . , n: error, variacin aleatoria
yi = + xi + i , i = 1, . . . , n
Entonces...
yi y yj son independientes
yi y xi tienen una relacin lineal
Los errores i son independientes

David Conesa, GEei tEma (UV)

Introduccin a R: Sesin 4

23 / 38

Estimacin en la regresin lineal simple

Valores estimados

= y x
2

i )2
X (yi
x
i

David Conesa, GEei tEma (UV)

n2

i (xi

x )(yi y )
cov (x , y )
=
2
var (x )
i (xi x )

Suma Cuadrados Residual


n2

Introduccin a R: Sesin 4

24 / 38

Modelo Lineal Simple: Ejemplo


Relacin entre el peso corporal y cerebral
El fichero cerebros.sav contiene los sobre mediciones del peso del
cuerpo y el cerebro de diversos animales.
Ejemplo
cerebros<-read.spss(file="cerebros.sav", to.data.frame=TRUE)
attach(cerebros)
# Anlisis descriptivo numrico
summary(cerebros)
plot(CUERPO, CEREBRO)
# regresin
reglin<-lm(CEREBRO CUERPO)
abline(reglin, col="red")
summary(reglin)

David Conesa, GEei tEma (UV)

Introduccin a R: Sesin 4

25 / 38

El objecto lm
El comando lm devuelve un objeto de tipo lm, que es una lista con
diversos elementos
Algunos elementos importantes
coefficients: Valores de
y
fitted.values: Valores de yi
residuals: Valores de los residuos (no tipificados)
call: Llamada a la funcin lm que gener el objeto
model: Informacin sobre el modelo (datos, etc.)
Funciones para acceder a estos elementos
R tiene una serie de funciones que permiten acceder a estos elementos
individualmente: coef(lm, ...), fitted(lm, ...), residuals(lm,
...), vcov(lm, ...).
David Conesa, GEei tEma (UV)

Introduccin a R: Sesin 4

26 / 38

Validacin del modelo


Anlisis de residuos
El modelo asume que el error es Normal
i
Residuos: ri = yi
x
La distribucin ha de ser aproximadamente Normal
Conviene tener en cuenta que

i ri

=0

Residuos tipificados: ri0 = ri /sd(r )


Valores atpicos (outliers)
A veces hay observaciones con residuos muy grandes
Esto puede deberse a que el modelo no ajusta bien para algunos datos
Otras veces hay errores en los datos
Valores extremos alteran la estimacin del modelo
David Conesa, GEei tEma (UV)

Introduccin a R: Sesin 4

27 / 38

Validacin grfica del Modelo


R incluye una serie de grficos que permiten hacer un diagnstico del
modelo ajustado
Grficas
Valores ajustados vs Residuos
Deberan ser independientes
QQ-Plot de los Residuos tipificados
Deberan ajustar a una lnea recta
Valores ajustados vs Raz cuadrada residuos
Permite localizar valores atpicos y ver si para valores ajustados
grandes hay desviaciones grandes (p. ej.)
Leverage vs Residuos tipificados
Ejemplo
plot(reglin)
David Conesa, GEei tEma (UV)

Introduccin a R: Sesin 4

28 / 38

Calidad del modelo: R cuadrado

Definicin
El Coeficiente de determinacin R 2 mide la proporcin de variabilidad
en los datos explicada por el modelo:
R2 = 1

P
2

(y

x
)
yi y )2
i
i i
i (
P
=P
2
2
i (yi y )
i (yi y )

Los valores de R 2 estn entre 0 y 1


Valores cercanos a 1 indican buen ajuste a los datos

David Conesa, GEei tEma (UV)

Introduccin a R: Sesin 4

29 / 38

Prediccin
A veces interesa predecir la respuesta para cierto valor de una covariable
La prediccin es
pred
ypred
=
+ x

Ojo con la extrapolacin!


Cul es la incertidumbre acerca de la prediccin? En general, mayor que la
incertidumbre de los datos:
s 

1
2 1 +
ypred tn2
n

Ejemplo
ndatos<-data.frame(CUERPO=c(2, 25, 75, 1000)) #Nuevos datos
ndatos$CEREBROpred<-predict(reglin, ndatos)
David Conesa, GEei tEma (UV)

Introduccin a R: Sesin 4

30 / 38

Transformaciones de datos
Problemtica
A veces la relacin entre las variables no es lineal
O las varianzas no son iguales
Por medio de una transformacin podemos mejor la linealidad de los
datos
Hay que tener en cuenta que...
La transformacin ha de ser 1 a 1
Los resultados hay que interpretarlos en trminos de las variables
transformadas
Ejemplo
Transformar (log) los datos del banco de datos cerebros.sav y eliminar
los datos aberrantes (identify(log(CUERPO), log(CEREBRO),
labels=ANIMAL)) necesarios hasta conseguir un buen ajuste.
David Conesa, GEei tEma (UV)

Introduccin a R: Sesin 4

31 / 38

7.- Anlisis de supervivencia


Introduccin
Funciones para el anlisis de supervivencia: paquete survival
Cargarlo previamente: library{survival}
Funciones
Surv(time, event, ...): Genera un objeto supervivencia que
recoge los tiempos observados y el indicador de estado (0=vivo,
1=muerto).
survfit(formula, ...): Genera las curvas de supervivencia. El
objeto resultante se puede pintar con plot.
survdiff(formula, ...): Test de diferencias en las curvas de
supervivencia.

David Conesa, GEei tEma (UV)

Introduccin a R: Sesin 4

32 / 38

Curvas de Kaplan-Meier
Ejemplo
# cargo paquete y datos
library{survival}
data(lung)
attach(lung)
# defino objeto de supervivencia
lung.surv <- Surv(time, status)
# calculo curvas KM
lung.KM <- survfit(lung.surv 1)
lung_sex.KM <- survfit(lung.surv sex)
# pinto resultados
plot(lung.KM)
plot(lung_sex.KM, lty=2:3, , xlab="Tiempo (das)")
title("Supervivencia por sexo")
legend("topright", c("Hombres", "Mujeres"), lty=2:3)

Para ms control sobre la representacin grfica de las curvas, ver


help("plot.survival")
David Conesa, GEei tEma (UV)

Introduccin a R: Sesin 4

33 / 38

Contrastes de supervivencia
Funcin survdiff
survdiff(formula, subset, rho, . . . )
Contrasta si hay diferencia entre dos o ms curvas de supervivencia,
determinadas por la formula
Se puede restringir el conjunto de casos con subset
El parmetro rho controla el tipo de test (def: 0 = log-rank test)
Ms ayuda: ?survdiff
Ejemplo
survdiff(lung.surv sex)
survdiff(lung.surv sex, subset = meal.cal > 1000)

David Conesa, GEei tEma (UV)

Introduccin a R: Sesin 4

34 / 38

Trabajando con fechas


En supervivencia es frecuente necesitar hacer operaciones con fechas.
Tpicamente, contar el nmero de das/semanas/meses entre dos fechas. R
tiene un objeto de tipo date que facilita estas operaciones.
Leyendo fechas
Cuando importamos unos datos, las fechas suelen ser una cadena de
caracteres con cierto formato.
La funcin as.Date permite convertirlas, especificando el formato.
Con la funcin difftime se pueden calcular intervalos de tiempo.
Ejemplo
dates.char <- c("1/3/2000", "1/3/2001")
dates <- as.Date(dates.char, format=" %d/ %m/ %Y")
difftime(dates, as.Date(c("1/1/00", "1/1/01"),
format=" %d/ %m/ %y"))
David Conesa, GEei tEma (UV)

Introduccin a R: Sesin 4

35 / 38

Modelo de Cox
Funcin coxph
Ajusta un modelo de Cox de riesgos proporcionales.
La funcin cox.zph contrasta la hiptesis de riesgos proporcionales.
Se puede estratificar utilizando la funcin strata sobre la variable
categrica correspondiente.
Ejemplo
# ajusto modelo de Cox
lung.cox <- coxph(lung.surv age)
summary(lung.cox)
cox.zph(lung.cox)
# Modelo de Cox estratificado
lung.stcox <- coxph(lung.surv age + strata(sex))
summary(lung.stcox)
cox.zph(lung.cox)
David Conesa, GEei tEma (UV)

Introduccin a R: Sesin 4

36 / 38

Modelo de Cox
Curvas de supervivencia
Al modelo ajustado se le puede aplicar directamente la funcin
survfit, para calcular las curvas de supervivencia, para un individuo
medio en las covariables.
Para calcular las curvas en unos valores especficos, utilizar el
parmetro newdata.
Ejemplo
plot(survfit(lung.cox)) # individuo medio
plot(survfit(lung.cox, newdata = 60)) # individuo de 60 aos
plot(survfit(lung.cox, newdata = data.frame(age=c(35, 55))),
lty=2:3) # individuos de 35 y 55 aos
legend("topright", c("35 aos", "55 aos"), lty=2:3)
plot(survfit(lung.stcox, newdata = 40), lty=2:3)
legend("topright", c("Hombres", "Mujeres"), lty=2:3)
David Conesa, GEei tEma (UV)

Introduccin a R: Sesin 4

37 / 38

Licencia de este material


Ms info: http://creativecommons.org/licenses/by-sa/3.0/es/

Usted es libre de:


copiar, distribuir y comunicar pblicamente la obra
hacer obras derivadas

Bajo las condiciones siguientes:


Reconocimiento. Debe reconocer los crditos de la obra de la manera especificada por el autor o el licenciador (pero no de una manera
que sugiera que tiene su apoyo o apoyan el uso que hace de su obra).
Compartir bajo la misma licencia. Si transforma o modifica esta
obra para crear una obra derivada, slo puede distribuir la obra
resultante bajo la misma licencia, una similar o una compatible.

David Conesa, GEei tEma (UV)

Introduccin a R: Sesin 4

38 / 38