Diapositiva 1

Download Report

Transcript Diapositiva 1

Sesión II
INTRODUCCION AL PROGRAMA
ESTADÍSTICO
TEST ESTADÍSTICOS
1
Sesión II
• Objetivo General:
• Conocer y utilizar los comandos mas
comunes usados en R para pruebas o test
estadísticos.
• Realizar rutinas, grafica y poner a prueba
ciertas hipótesis.
2
1. Test de Chi-cuadrado X2
(Frecuencias)
Análisis de una Variable categórica con n niveles.
El Test Chi-cuadrado puede usarse como un Prueba de bondad de ajuste.
H0: p = p
p=1
H1: p ≠ p
p≠1
Problema 1
Supóngase que la proporción observada de hembras vs machos de pepinos de mar en un
área determinada del intermareal es de 29/29 respectivamente.
> pepino<- c(29,29)
> chisq.test(pepino)
# vector formado guarda las frecuencias observadas
# Test Chi-cuadrado bondad de ajuste.
salida
Chi-squared test for given probabilities
data: pepino
X-squared = 0, df = 1, p-value = 1
3
Problema 2
Supóngase que la proporción de hembras vs machos de pulpos en un área determinada del
intermareal rocoso es de 49/9 respectivamente. Genere el vector “pulpos” y aplique el test de
Chi-cuadrado.
> pulpos<-c(49,9)
> chisq.test(pulpos)
salida
Chi-squared test for given probabilities
data: c
X-squared = 27.5862, df = 1, p-value = 1.502e-07
4
Problema 3. Asignando una probabilidad.
Supóngase que la proporción de hembras vs machos que se espera para una especie de
pez intermareal es desconocida y se quiere probar que será de un 10%:
H0: p = 0.1
H1: p ≠ 0.1
Suponiendo que una muestra aleatoria de 100 erizos de mar encontramos 16 machos.
> pez<-c(16,84)
> sexo<-c(0.1,0.9)
> chisq.test(pez,p=sexo)
# vector a almacena frecuencias observadas
# vector b almacena probabilidades esperadas
# Test chi-cuadrado bondad de ajuste
salida
Chi-squared test for given probabilities
data: pez
X-squared = 4, df = 1, p-value = 0.0455
> chisq.test(c(16,84),p=c(0.1,0.9))
salida
Chi-squared test for given probabilities
data: c(16, 84)
X-squared = 4, df = 1, p-value = 0.0455
# alternativamente los vectores a y b pueden
ir concatenados
5
1. Test de Chi-cuadrado X2
(Frecuencias)
Análisis de 2 o mas variables categóricas con 2 o mas niveles.
H0: p1 = p2
H1: p1 ≠ p2
No existe asociación
Existe asociacion
son independientes
no son independientes
Caso especial:
Tablas de contingencia o tablas de 2x2
Estudios de prevalencía o transversales.
6
Problema 4
Supóngase que interesa saber si existe asociación entre el sexo del paciente y su estado de
parasitismo por Taenia solium:
Para una muestra de 50 hombres y 60 mujeres, 12 y 4 de ellos resultaron parasitados,
respectivamente.
> x <- matrix(c(12,6,38,54),nc=2)
> chisq.test(x,correct=F)
# x queda almacenada como matriz
# Test chi-cuadrado sin corrección de Yates o
Pearson
salida
Pearson's Chi-squared test
data: x
X-squared = 6.5922, df = 1, p-value = 0.01024
> chisq.test(x)
# Test chi-cuadrado con corrección de Yates
salida
Pearson's Chi-squared test with Yates' continuity correction
data: x
X-squared = 5.2714, df = 1, p-value = 0.02168
7
Problema 5
Interesa determinar si hay diferencias significativas en el porcentaje de personas con
depresión entre dos poblaciones A y B. Para esto, se tomó una muestra de 150 personas
de la población A y 200 de la población B, encontrándose 48 y 50 personas con depresión
en cada una de las ciudades respectivamente.
1. Construya su tabla de contingencia.
2. Realice la rutina en R para obtener el valor de X2 Pearson.
2. Calcule el valor de chi-cuadrado con corrección de Yates.
> depresion1<-matrix(c(48,50,102,150),nc=2)
> chisq.test(depresion1,correct=F)
Pearson's Chi-squared test
data: depresion1
X-squared = 2.0833, df = 1, p-value = 0.1489
> depresion1<-matrix(c(48,50,102,150),nc=2)
> chisq.test(depresion1)
Pearson's Chi-squared test with Yates' continuity correction
data: depresion1
X-squared = 1.7506, df = 1, p-value = 0.1858
8
Chi-cuadrado desde un Dataframe
# Buscando dataframe .txt en el directorio
> nombrevector<-read.table(file.choose(), header=T)
> attach(nombrevector)
> list(nombrevector)
> chisq.test(namevar1,namevar2, correct=F)
> chisq.test(namevar1,namevar2)
# Test X2 de Pearson. Var1 vs Var2 sin
corrección de yates.
# Test X2 de Pearson. Var1 vs Var2 con
corrección de yates.
9
Test exacto de Fisher n<5 en algunas de las celdas
El Test exacto de Fisher, para muestras pequeñas, al igual que el Test chi-cuadrado, se
puede obtener a partir de datos tabulados o de variables de un dataframe.
> x <- matrix(c(2,8,10,14),nc=2)
> fisher.test(x)
# matriz x almacena tabla 2x2
# Test exacto de Fisher
> fisher.test(variable1,variable2)
# Test exacto de Fisher. Var1 vs Var2
10
2. Test de Student
Análisis de comparación de medias.
Caso 1. T Student 1 Muestra.
H0: μ = 0
H1: μ ≠ 0
> test.t(x)
> test.t(x,mu=10)
> test.t(x1,x2,paired=T)
# si vector numérico x tiene media μ=0 (por defecto μ0=0)
# si vector numérico x tiene media μ=10
# si x1-x2 (datos pareados) tiene media 0
Problema 6.
1. Genere el vector “idea” con 5 datos que permita rechazar la hipotesis nula.
11
Problema 6.
A un total de 10 pacientes con diagnostico de VIH se les midió el número de linfocitos T
En la sangre. La siguiente tabla muestra el conteo de linfocitos antes y después de un
tratamiento naturista.
1.. Genere los vectores de la tabla conservando los nombres de cabecera. Determine si
existen diferencias significativas en el número de linfocitos antes y después del
tratamiento
paciente
antes
después
1
31
71
2
157
93
3
4
53
4
109
240
5
283
181
6
141
181
7
36
64
8
164
367
9
154
114
10
22
48
> antes<-c(31,157,4,109,283,141,36,164,154,22)
> despues<-c(71,93,53,240,181,181,64,367,114,48)
> t.test(antes,despues,paired=T)
Paired t-test
data: antes and despues
t = -1.1006, df = 9, p-value = 0.2996
alternative hypothesis: true difference in means is not
equal to 0
95 percent confidence interval: -95.02074 32.82074
sample estimates:
mean of the differences
-31.1
12
Caso 2. T Student para Muestras independientes.
El test t de Student para muestras independientes permite docimar la
hipótesis nula de igualdad de promedios de dos vectores numéricos x1 y x2.
Es decir, H0: μ1 = μ2.
H0: μ1 = μ2
H1: μ1 ≠ μ2
> t.test(x1,x2)
# si vectores numéricos x1 y x2 tienen igual media
13
Problema 7
Considerando el numero de linfocitos encontrados en 10 pacientes en la ciudad 1 y en 10
pacientes en la ciudad 2.
1. Genere los vectores de la tabla conservando los nombres de cabecera y determine si
existen diferencias significativas en el número de linfocitos en ambas ciudades.
Ciudad 1
Ciudad 2
31
71
157
93
4
53
109
240
283
181
141
181
36
64
164
367
154
114
22
48
<ciudad1<-antes
<ciudad1
<ciudad2<-despues
<ciudad2
<t.test(ciudad1,ciudad2)
<t.test(ciudad1,ciudad2)
Welch Two Sample t-test
data: ciudad1 and ciudad2
t = -0.7308, df = 17.564, p-value = 0.4745
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval: -120.66331 58.46331
sample estimates:
mean of x mean of y
14
110.1 141.2
Ciudad
linfocitos
1
31
1
157
t.test requiere que las muestras estén en columnas distintas,
cuando lo habitual es tener los datos en una columna (por ejemplo,
en vector x) y los grupos a comparar en otra columna (por ejemplo,
en vector grupo, con valores 1 y 2). La solución es:
1
4
>t.test(x[grupo==1], x[grupo==2])
1
109
1
283
1
141
1
36
1
164
1
154
1
22
2
71
2
93
2
53
2
240
2
181
2
181
2
64
2
367
2
114
2
48
Problema 8.
Tomando los valores de linfocitos y ciudad. Determine si existen
diferencias significativas entre una ciudad y otra. Genere los
vectores de la tabla conservando los nombres de cabecera.
> ciudad<-c(1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2)
>linfocitos<c(31,157,4,109,283,141,36,164,154,22,71,93,53,240,
181,181,64,367,114,48)
> t.test(linfocitos[ciudad==1],linfocitos[ciudad==2])
Welch Two Sample t-test
data: linfocitos[ciudad == 1] and linfocitos[ciudad == 2]
t = -0.7308, df = 17.564, p-value = 0.4745
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
-120.66331 58.46331
sample estimates:
15
mean of x mean of y
110.1 141.2
Numérica según categórica. Comando boxplot
El comando boxplot permite hacer un box-plot (o cajón con bigotes).
> boxplot(x)
> boxplot(num~cat)
# box-plot de x (variable numerica)
# box-plot de num para cada nivel de cat
Peso según HTA
120
main=“Peso según HTA”
names=c("(+)", "(-)")
xlab=“HTA”
ylab=“Peso(kg)”
col=“green”
# o bien col=3
notch=T
# gráfico acinturado
horizontal=F
# por defecto
ylim=c(20,140)
log=“both”
# también “x”, “y”
20 40 60 80
Peso (kg)
opciones útiles (boxplot):
(+)
(-)
HTA
16
Problema 8.
Genere un grafico de bigotes, lo mas completo posible, para los datos del ejercicio 8.
Propuesta
17
3. Test de Kruskal-Wallis
Análisis de comparación de medianas entre dos o mas poblaciones.
El test de rangos de Kruskal-Wallis permite comparar el parámetro de tendencia central
(mediana) entre dos o más poblaciones. Cuando se comparan solo 2 grupos, el test es
equivalente al test de rangos de Wilcoxon.
> kruskal.test(x,grupos)
# si la mediana de x (variable numérica) se
# diferencia entre grupos (variable categórica)
> kruskal.test(list(x1,x2,x3))
# si existen diferencias entre promedios
# de x1, x2 y x3 (no requiere variable categórica)
18
4. Test de Normalidad
Análisis para comparar distribuciones de variables frente a una normal.
El comando ks.test permite determinar si un vector x tiene distribución Normal.
H0: p1 = p2
Son normales
H1: p1 ≠ p2
No son normales
Test de Shapiro Wilk sirve n<30 una muestra
> sw<-shapiro.test(namevariable)
> print(sw)
Test de Kolmogorov Smirnov sirve n un vector
> ks.test(x,pnorm)
# si x ~ normal con media 0 y desv.estandar 1
También hay otras distribuciones disponibles. Las más importantes (y los parámetros
necesarios en cada una) son:
> ks.test(x,ppois,lambda) # si x ~ Poisson con tasa lambda. Ej: ks.test(x,ppois,3)
> ks.test(x,pbinom,n,p)
# si x ~ Binomial con n y p dados.
Test de Kolmogorov Smirnov sirve n<30 dos vectores
En comando ks.test también se usa para determinar si dos vectores tienen igual
distribución.
19
> ks.test(x,y)
# si x e y tienen la misma distribución
5. Test de asociación. Correlación
El comando cor permite obtener la correlación entre dos vectores x e y.
> cor(x, y)
> cor.test(x, y)
# correlacion (Pearson) entre x e y.
# correlacion (Pearson) entre x e y, test e IC95%
Por defecto, cor entrega la correlación de pearson. Con el subcomando method se
controla cuál correlación obtener: pearson, spearman o kendall.
> cor(x, y,method=“pearson”)
# igual a cor(x,y)
> cor(x, y,method=“spearman”) # correlacion de Spearman
> cor(x, y,method=“kendall”)
# correlacion de Kendall
ordinal/continua
ordinal/ordinal
Si hay observaciones faltantes en x o y el comando producirá un error. La opción
use=“complete.obs” borra registros con NA en cualquiera de las dos variables.
xyz=cbind(x,y,z)
> cor(xyz)
20
Gráfico de dos variable numéricas. Comando plot
El comando plot (además de hacer el Index Graph) permite hacer un gráfico de dispersión de
dos variables numéricas.
> plot(x,y)
> plot(y~x)
# gráfico cartesiano: x versus y
# formula: y en función de x
opciones útiles (plot):
80 100
60
40
Peso(kg)
140
Peso en función de Talla
1.4
1.5
1.6
1.7
1.8
1.9
main=“Peso en función de Talla”
xlab=“Talla(cms)”
ylab=“Peso(kg)”
xlim=c(1.2,1.9)
ylim=c(20,160)
col=“forestgreen“ # borde de symbol
bg=“white”
# interior (default)
pch=21
# circle (default)
cex=2
# tamaño symbol (def:1)
lwd=1
# ancho de lineas
Talla(mts)
21
Tarea 2.
•
•
•
•
Lea la base de datos Litiasis.txt (archivo de texto delimitado por tabulaciones)
en R.
Observe las características del dataframe como list(), names(), summaru()
Acceda a los vectores del dataframe usando attach()
Determine si existe asociación entre las variables HTA y PESO
Determine si existe asociación entre las variables HTA y FUMA.
•
•
•
Determine si existe asociación entre las variables EDAD y FUMA.
Determine si la variable TALLA tiene distribución normal.
Determine si existe asociacion entre TALLA y EDAD. (grafique).
•
•
Finalmente agregue la siguiente instrucción
abline(lm(PESO~TALLA))
22
6. Modelos de Regresión.
Es una técnica para analizar una variable dependiente numérica (Y) frente
a una o mas variables independientes (X) también numéricas sean
categóricas o continuas.
Y = β0 + β1 x1 + ……+ βn xn + e
Tipos de modelo de regresión
1. Modelos de regresión Lineal
Y= v.a. numérica continua
2. Modelos de regresión Logística
Y= v.a. categórica
3. Modelos de regresión Poisson
Y= v.a conteo o tasa
23
Modelos de regresión Lineal simple
< lm (formula = variable Y ~ variable X)
Modelos de regresión Lineal múltiple
< lm (formula = variable Y ~ variable X1+ variable X2 +…+ variable Xn)
24
Problema X.
1. Lee la base datos en Excel llamada “bacteria1” y luego “bacteria2” en R.
¿Porque razon “bacteria1” no se puede leer?.
2. Realiza una prueba de normalidad para la variable cantbact.
3. Realiza un modelo de regresión lineal simple para cada una de las
variables.
4. Realiza un modelo de regresión lineal múltiple.
< vector<- lm (formula = variable Y ~ variable X)
< vector<- lm (formula = variable Y ~ variable X1+ variable X2 +…+ variable Xn)
25
GRACIAS
26
Gráfico de dos grupos de datos: points y legend
El comando points permite agregar puntos a un dispositivo gráfico abierto. El
comando legend permite agregar leyendas a un gráfico.
> points(x,y)
> legend(locator(1))
Opciones útiles (points):
Opciones útiles (legend):
pch=19
# simbolo (19 = circulo lleno)
col=“black” # color del simbolo (borde)
bg=“green” # color del simbolo (interior)
cex=1.2
# tamaño de simbolo (defecto:1)
pch=19
# simbolo
col=“black”
# borde de simbolo
c(“Masc”,”Fem”) # texto de legenda
Ejemplo: gráfico de dispersión de peso (eje Y) según talla (eje X), diferenciando
los puntos según sexo (1=Masc y 2=Fem).
> plot(peso~talla, main="Peso según Talla", type="n")
> points(talla[sexo==1],peso[sexo==1], col=“black”, bg="red", pch=19, cex=1.2)
> points(talla[sexo==2],peso[sexo==2], col=“black”, bg="green", pch=19, cex=1.2)
> legend(locator(1), pch=c(19,19), col=c("red","green"), c("Masc","Fem"))
27
Gráfico de dos grupos de datos: points y legend
60
80 100
Masc
Fem
40
peso
140
Peso según Talla
1.4
1.5
1.6
1.7
1.8
1.9
talla
28
BONUS TRACK
Agregar línea de tendencia a un plot
El comando abline permite agregar una línea de tendencia (regresión lineal simple)
a un gráfico de dispersión. El intercepto y pendiente se pueden obtener de un
modelo (ajustado con comando lm) o se pueden indicar directamente en abline.
> plot(peso~talla)
> abline( lm(peso~talla) )
opciones útiles (abline):
Peso en función de Talla
80 100
60
# default: black
# linea en y=100
# linea en x=1.7
# ancho (default:1)
# tipo linea (2=segmentos)
> # intercepto y pendiente conocidos:
> abline(-21.52, 52.39, col=“red”)
40
Peso(kg)
140
col=“red“
h=100
v=1.7
lwd=2
lty=1
1.4
1.5
1.6
Talla(mts)
1.7
1.8
1.9
29