Curso Introducción R: Sesión 4

Anuncio
Curso Introducción R: Sesión 4
David V. Conesa Guillén
Grup d’Estadística Espacial i Temporal en Epidemiologia i Medi Ambient
Dept. d’Estadística i Investigació Operativa
Universitat de València
David Conesa, GEei t•E·ma (UV)
Introducción a R: Sesión 4
1 / 38
Sesión 4: Análisis de datos con R
En esta sesión:
1.- Introducción.
2.- Inferencia en problemas univariantes.
3.- Inferencia en problemas de dos muestras.
4.- Análisis de datos categóricos.
5.- Análisis de la Varianza.
6.- Regresión lineal simple.
7.- Análisis de supervivencia.
David Conesa, GEei t•E·ma (UV)
Introducción a R: Sesión 4
2 / 38
1.- Introducción.
Aunque con R podemos realizar análisis estadísticos y numéricos de
gran complicación, no tiene ningún sentido el llevar a cabo un análisis
más complicado del estrictamente necesario.
De acuerdo con el principio de la navaja de Occam, la elección un
modelo estadístico debe ser siempre lo más simple posible.
En esta sesión veremos los llamados test clásicos para algunos de los
análisis de datos más habituales que involucran una y dos muestras.
La primera parte del análisis de unos datos siempre involucra la
descripción numérica y gráfica de los mismos.
David Conesa, GEei t•E·ma (UV)
Introducción a R: Sesión 4
3 / 38
Ejemplo
library(foreign)
ambiente<-read.spss(file="ambiente.sav", to.data.frame=TRUE)
attach(ambiente)
# Análisis descriptivo numérico
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(SULFATO˜PROVIN)
boxplot(PH˜OZONO)
# Gráficos
hist(SULFATO, main="Histograma del SULFATO")
boxplot(PH, main="Diagrama de cajas del PH")
#Gráficos 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 t•E·ma (UV)
Introducción a R: Sesión 4
4 / 38
Contrastes estadísticos
¿Cuando utilizamos los contrastes?
Utilizamos un contraste estadístico para verificar si se cumple una
hipótesis de trabajo a partir de unos datos o hay evidencias estadísticas de
lo contrario.
Elementos de un contraste
Datos (obtenidos de forma muy diversa)
Hipótesis nula (H0 )
Hipótesis alternativa (HA )
Estadístico de contraste T (y su distribución bajo H0 )
Valor observado del est. de contraste: t
P-valor: Prob. si H0 es cierta de que el valor de T sea más extremo
que t en la dirección de la hip. alternativa
David Conesa, GEei t•E·ma (UV)
Introducción a R: Sesión 4
5 / 38
Tipos de contrastes
Contrastes Paramétricos
Asumen que los datos tienen una determinada distribución
El contraste es sobre alguno de los parámetros de una distribución
Ejemplo: Test de la t de Student para una muestra
Contrastes No Paramétricos
No asumen ninguna distribución para los datos
En principio, son más flexibles
Entonces, ¿cuál usamos?
Paramétricos, si se cumplen las hipótesis sobre los datos
No paramétricos, en otro caso
OJO: ¡¡Param./No param. no contrastan exactamente lo mismo!!
David Conesa, GEei t•E·ma (UV)
Introducción a R: Sesión 4
6 / 38
2.- Inferencia en problemas univariantes.
Análisis de una muestra: Test de la t
Contrastar la media de una población: obtenemos una muestra
La distribución 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 t•E·ma (UV)
Introducción a R: Sesión 4
7 / 38
Análisis no param. de una muestra: Test de Wilcoxon
Descripción
Contraste sobre la centralidad de una población (mediana)
Observaciones independientes: x1 , . . . , xn
Distribución simétrica de la población
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 t•E·ma (UV)
Introducción a R: Sesión 4
8 / 38
3.- Inferencia en problemas de dos muestras.
Test de correlación
Contraste sobre la independencia (correlación cero) de dos variables
Datos normales
Si no lo son, utilizamos la opción 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 t•E·ma (UV)
Introducción a R: Sesión 4
9 / 38
Test de igualdad de varianzas
Descripción
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 t•E·ma (UV)
Introducción a R: Sesión 4
10 / 38
Análisis de 2 muestras: Test t
Descripción
Comparar la media de dos poblaciones cualesquiera
La distribución 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
q
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 t•E·ma (UV)
Introducción a R: Sesión 4
11 / 38
Análisis de 2 muestras: Test Mann-Whitney
Descripción
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 t•E·ma (UV)
Introducción a R: Sesión 4
12 / 38
Análisis de 2 muestras emparejadas: Test t
Descripción
Comparar la media de dos poblaciones (p.ej., medidas al mismo
individuo en dos tiempos distintos)
La distribución de los elementos de la población 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 t•E·ma (UV)
Introducción a R: Sesión 4
13 / 38
Análisis de 2 muestras emparejadas: Test Wilcoxon
Descripción
Comparamos si dos poblaciones tienen la misma distribución
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 t•E·ma (UV)
Introducción a R: Sesión 4
14 / 38
4.- Análisis de datos categóricos
Contraste de independencia de dos variables
Se utiliza para contrastar la independencia de variables categóricas
Contamos el número de sucesos en cada categoría (o combinación)
Comparamos el número de casos observados en cada grupo con el
número de esperados
Contraste
H0 : Var. ind.
HA : No H0
T =
(Oij −Eij )2
Ei
i,j
P
∼ χ2 ((n1 − 1)(n2 − 1))
Ejemplo
t<-table(ambiente[, c("OZONO", "PROVIN")]) # ¿Homogeneidad?
chisq.test(t)
David Conesa, GEei t•E·ma (UV)
Introducción a R: Sesión 4
15 / 38
Otros análisis de datos categóricos.
El test anterior también se puede entender como un problema de
homogeneidad. Útil para valorar si en varias poblaciones se cumplen
las mismas proporciones de una determinada característica.
Si únicamente queremos comparar dos proporciones, podemos utilizar
la función prop.test en el que especificamos dos vectores que
contienen el número de éxitos sobre el total de pruebas.
Ejemplo
prop.test(c(4,196),c(40,3160))
Si en chisq.test(t) utilizamos la opción correct=F, no realiza la
corrección de Yates (que es lo que hace por defecto).
David Conesa, GEei t•E·ma (UV)
Introducción a R: Sesión 4
16 / 38
Otros análisis de datos categóricos.
Para realizar un test de Bondad de ajuste en el que contrastar si unas
cantidades están 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 t•E·ma (UV)
Introducción a R: Sesión 4
17 / 38
5.- Análisis 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
homogéneas 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(PH˜PROVIN)
fligner.test(PH˜PROVIN)
by(PH,PROVIN,shapiro.test)
David Conesa, GEei t•E·ma (UV)
Introducción a R: Sesión 4
18 / 38
Análisis de varias muestras: ANOVA
Descripción
Comparamos la media de p grupos
Asumimos distribución 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
¿Cómo 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 t•E·ma (UV)
Introducción a R: Sesión 4
19 / 38
Análisis de varias muestras: ANOVA
Tabla ANOVA de 1 via
Variación
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.
p−1
n−p
n−1
Varianza
VE=SE/(p-1)
VR=SR/(n-p)
F
VE/VR
Ejemplo
boxplot(PH ˜ PROVIN)
anovaph<-lm(PH ˜ PROVIN)
anova(anovaph); summary(anovaph)
# también
anovaph2 <- aov(PH ˜ PROVIN)
summary(anovaph2)
David Conesa, GEei t•E·ma (UV)
Introducción a R: Sesión 4
20 / 38
Análisis de varias muestras: Test Kruskal-Wallis
Descripción
Extensión del Test de Mann-Whitney para 3 ó más 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 t•E·ma (UV)
Introducción a R: Sesión 4
21 / 38
6.- Regresión Lineal Simple
Introducción
Permite modelizar (y predecir) los valores de una variable respuesta
en función de una serie de covariables
Las covariables pueden ser de muy diverso tipo: continuas,
categóricas, binarias, etc.
Existen diversos procedimientos para la selección de las covariables
más adecuadas: correlación, AIC, ...
¿Cuándo es adecuado este modelo?
Las observaciones son independientes
La relación entre la variable respuesta y las covariables es lineal
A veces es posible transformar los datos para obtener una relación
lineal
David Conesa, GEei t•E·ma (UV)
Introducción a R: Sesión 4
22 / 38
El modelo de regresión lineal simple
Características
yi , i = 1, . . . , n: variable respuesta
xi , i = 1, . . . , n: covariable, variable explicativa
εi ∼ N(0, σ 2 ), i = 1, . . . , n: error, variación aleatoria
yi = α + βxi + εi , i = 1, . . . , n
Entonces...
yi y yj son independientes
yi y xi tienen una relación lineal
Los errores εi son independientes
David Conesa, GEei t•E·ma (UV)
Introducción a R: Sesión 4
23 / 38
Estimación en la regresión lineal simple
Valores estimados
P
α̂ = y − β̂x
2
σ̂ =
β̂ =
X (yi − α̂ − β̂xi )2
i
David Conesa, GEei t•E·ma (UV)
n−2
i (xi
− x )(yi − y )
cov (x , y )
=
2
var (x )
i (xi − x )
P
=
Suma Cuadrados Residual
n−2
Introducción a R: Sesión 4
24 / 38
Modelo Lineal Simple: Ejemplo
Relación 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)
# Análisis descriptivo numérico
summary(cerebros)
plot(CUERPO, CEREBRO)
# regresión
reglin<-lm(CEREBRO ˜ CUERPO)
abline(reglin, col="red")
summary(reglin)
David Conesa, GEei t•E·ma (UV)
Introducción a R: Sesión 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 ŷi
residuals: Valores de los residuos (no tipificados)
call: Llamada a la función lm que generó el objeto
model: Información 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 t•E·ma (UV)
Introducción a R: Sesión 4
26 / 38
Validación del modelo
Análisis de residuos
El modelo asume que el error es Normal
Residuos: ri = yi − α̂ − β̂xi
La distribución ha de ser aproximadamente Normal
Conviene tener en cuenta que
P
i ri
=0
Residuos tipificados: ri0 = ri /sd(r )
Valores atípicos (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 estimación del modelo
David Conesa, GEei t•E·ma (UV)
Introducción a R: Sesión 4
27 / 38
Validación gráfica del Modelo
R incluye una serie de gráficos que permiten hacer un diagnóstico del
modelo ajustado
Gráficas
Valores ajustados vs Residuos
Deberían ser independientes
QQ-Plot de los Residuos tipificados
Deberían ajustar a una línea recta
Valores ajustados vs Raíz cuadrada residuos
Permite localizar valores atípicos y ver si para valores ajustados
grandes hay desviaciones grandes (p. ej.)
Leverage vs Residuos tipificados
Ejemplo
plot(reglin)
David Conesa, GEei t•E·ma (UV)
Introducción a R: Sesión 4
28 / 38
Calidad del modelo: R cuadrado
Definición
El Coeficiente de determinación R 2 mide la proporción de variabilidad
en los datos explicada por el modelo:
R2 = 1 −
2
2
i (yi − α̂ − β̂xi )
i (ŷi − y )
P
=P
2
2
i (yi − y )
i (yi − y )
P
P
Los valores de R 2 están entre 0 y 1
Valores cercanos a 1 indican buen ajuste a los datos
David Conesa, GEei t•E·ma (UV)
Introducción a R: Sesión 4
29 / 38
Predicción
A veces interesa predecir la respuesta para cierto valor de una covariable
La predicción es
ypred
ˆ = α̂ + β̂xpred
¡Ojo con la extrapolación!
¿Cuál es la incertidumbre acerca de la predicción? En general, mayor que la
incertidumbre de los datos:
s 1
ŷpred ± tn−2 σ̂ 2 1 +
n
Ejemplo
ndatos<-data.frame(CUERPO=c(2, 25, 75, 1000)) #Nuevos datos
ndatos$CEREBROpred<-predict(reglin, ndatos)
David Conesa, GEei t•E·ma (UV)
Introducción a R: Sesión 4
30 / 38
Transformaciones de datos
Problemática
A veces la relación entre las variables no es lineal
O las varianzas no son iguales
Por medio de una transformación podemos mejor la linealidad de los
datos
Hay que tener en cuenta que...
La transformación ha de ser 1 a 1
Los resultados hay que interpretarlos en términos 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 t•E·ma (UV)
Introducción a R: Sesión 4
31 / 38
7.- Análisis de supervivencia
Introducción
Funciones para el análisis 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 t•E·ma (UV)
Introducción a R: Sesión 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 (días)")
title("Supervivencia por sexo")
legend("topright", c("Hombres", "Mujeres"), lty=2:3)
Para más control sobre la representación gráfica de las curvas, ver
help("plot.survival")
David Conesa, GEei t•E·ma (UV)
Introducción a R: Sesión 4
33 / 38
Contrastes de supervivencia
Función survdiff
survdiff(formula, subset, rho, . . . )
Contrasta si hay diferencia entre dos o más curvas de supervivencia,
determinadas por la formula
Se puede restringir el conjunto de casos con subset
El parámetro rho controla el tipo de test (def: 0 = log-rank test)
Más ayuda: ?survdiff
Ejemplo
survdiff(lung.surv ∼ sex)
survdiff(lung.surv ∼ sex, subset = meal.cal > 1000)
David Conesa, GEei t•E·ma (UV)
Introducción a R: Sesión 4
34 / 38
Trabajando con fechas
En supervivencia es frecuente necesitar hacer operaciones con fechas.
Típicamente, contar el número de días/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 función as.Date permite convertirlas, especificando el formato.
Con la función 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 t•E·ma (UV)
Introducción a R: Sesión 4
35 / 38
Modelo de Cox
Función coxph
Ajusta un modelo de Cox de riesgos proporcionales.
La función cox.zph contrasta la hipótesis de riesgos proporcionales.
Se puede estratificar utilizando la función strata sobre la variable
categórica 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 t•E·ma (UV)
Introducción a R: Sesión 4
36 / 38
Modelo de Cox
Curvas de supervivencia
Al modelo ajustado se le puede aplicar directamente la función
survfit, para calcular las curvas de supervivencia, para un “individuo
medio” en las covariables.
Para calcular las curvas en unos valores específicos, utilizar el
parámetro newdata.
Ejemplo
plot(survfit(lung.cox)) # individuo medio
plot(survfit(lung.cox, newdata = 60)) # individuo de 60 años
plot(survfit(lung.cox, newdata = data.frame(age=c(35, 55))),
lty=2:3) # individuos de 35 y 55 años
legend("topright", c("35 años", "55 años"), lty=2:3)
plot(survfit(lung.stcox, newdata = 40), lty=2:3)
legend("topright", c("Hombres", "Mujeres"), lty=2:3)
David Conesa, GEei t•E·ma (UV)
Introducción a R: Sesión 4
37 / 38
Licencia de este material
Más info: http://creativecommons.org/licenses/by-sa/3.0/es/
Usted es libre de:
copiar, distribuir y comunicar públicamente la obra
hacer obras derivadas
Bajo las condiciones siguientes:
Reconocimiento. Debe reconocer los créditos 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, sólo puede distribuir la obra
resultante bajo la misma licencia, una similar o una compatible.
David Conesa, GEei t•E·ma (UV)
Introducción a R: Sesión 4
38 / 38
Descargar