290 likes | 424 Views
Sesión II INTRODUCCION AL PROGRAMA ESTADÍSTICO. TEST ESTADÍSTICOS. 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.
E N D
Sesión II INTRODUCCION AL PROGRAMA ESTADÍSTICO TEST ESTADÍSTICOS
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.
1. Test de Chi-cuadrado X2 (Frecuencias) Análisis de unaVariable 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) # vector formado guarda las frecuencias observadas > chisq.test(pepino) # Test Chi-cuadrado bondad de ajuste. salida Chi-squared test for given probabilities data: pepino X-squared = 0, df = 1, p-value = 1
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
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)) # alternativamente los vectores a y b pueden ir concatenados salida Chi-squared test for given probabilities data: c(16, 84) X-squared = 4, df = 1, p-value = 0.0455
1. Test de Chi-cuadrado X2 (Frecuencias) Análisis de 2 o mas variables categóricas con 2 o mas niveles. H0: p1 = p2 No existe asociación son independientes H1: p1 ≠ p2 Existe asociacion no son independientes Caso especial: Tablas de contingencia o tablas de 2x2 Estudios de prevalencía o transversales.
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) # x queda almacenada como matriz > chisq.test(x,correct=F) # 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
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
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)# Test X2 de Pearson. Var1 vs Var2 sin corrección de yates. > chisq.test(namevar1,namevar2) # Test X2 de Pearson. Var1 vs Var2 con corrección de yates.
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) # matriz x almacena tabla 2x2 > fisher.test(x) # Test exacto de Fisher > fisher.test(variable1,variable2) # Test exacto de Fisher. Var1 vs Var2
2. Test de Student Análisis de comparación de medias. Caso 1. T Student 1 Muestra. H0: μ = 0 H1: μ ≠ 0 > test.t(x) # si vector numérico x tiene media μ=0 (por defecto μ0=0) > test.t(x,mu=10) # si vector numérico x tiene media μ=10 > test.t(x1,x2,paired=T) # si x1-x2 (datos pareados) tiene media 0 Problema 6. 1. Genere el vector “idea” con 5 datos que permita rechazar la hipotesis nula.
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 > 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
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
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. <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 110.1 141.2
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: >t.test(x[grupo==1], x[grupo==2]) 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: 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) # box-plot de x (variable numerica) > boxplot(num~cat) # box-plot de num para cada nivel de cat opciones útiles (boxplot): 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”
Problema 8. Genere un grafico de bigotes, lo mas completo posible, para los datos del ejercicio 8. Propuesta
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)
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. > 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) # correlacion (Pearson) entre x e y. > cor.test(x, 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 ordinal/continua > cor(x, y,method=“kendall”) # correlacion de Kendall 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)
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) # gráfico cartesiano: x versus y > plot(y~x) # formula: y en función de x opciones útiles (plot): 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
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))
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
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)
Problema X. • Lee la base datos en Excel llamada “bacteria1” y luego “bacteria2” en R. ¿Porque razon “bacteria1” no se puede leer?. • Realiza una prueba de normalidad para la variable cantbact. • Realiza un modelo de regresión lineal simple para cada una de las variables. • 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)
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): 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) Opciones útiles (legend): 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"))
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): col=“red“ # default: black h=100 # linea en y=100 v=1.7 # linea en x=1.7 lwd=2 # ancho (default:1) lty=1 # tipo linea (2=segmentos) > # intercepto y pendiente conocidos: > abline(-21.52, 52.39, col=“red”)