Seleccionar la alternativa correcta en cada caso:
Suele ser pequeño y lo fija el investigador o un convenio generalmente aceptado.
Da la probabilidad de declarar significativo el resultado de un test, cuando esto es falso.
Al disminuir hace aumentar la probabilidad del error de tipo II.
Todo lo anterior es cierto.
Todo lo anterior es falso..
Los métodos ofrecen tiempos de duración muy diferentes.
El nivel de significación es demasiado alto.
Las muestras son demasiado numerosas.
Las muestras son demasiado pequeñas.
Nada de lo anterior.
A un grupo de 350 adultos, quienes participaron en una encuesta, se les preguntó si accedían o no a Internet. Las respuestas clasificadas por sexo fueron las siguientes:
#Cargo datos y defino tipo de variables
twitter <- read_excel("twitter.xls")
twitter$twitter <- factor(twitter$twitter)
levels(twitter$twitter) <- c("No usa twitter", "Usa twitter")
twitter$sexo <- factor(twitter$sexo)
levels(twitter$sexo) <- c("Masculino", "Femenino")
#Creo tabla de frecuencias
freqej2 <- as.data.frame(table(twitter$twitter,twitter$sexo))
freqej2 <- freqej2 %>% spread(Var2,Freq)
freqej2 <- freqej2 %>% remove_rownames %>% column_to_rownames(var="Var1")
#función alternativa para ver tabla de frequencias
proc_freq(twitter, "twitter", "sexo","Ingreso a twitter")
Ingreso a twitter | ||||
|---|---|---|---|---|
sexo | ||||
label | Masculino | Femenino | Total | |
No usa twitter | Frequency | 152 | 159 | 311 |
Row Pct | 48.87% | 51.13% | ||
Col Pct | 85.88% | 91.91% | ||
Percent | 43.43% | 45.43% | 88.86% | |
Usa twitter | Frequency | 25 | 14 | 39 |
Row Pct | 64.1% | 35.9% | ||
Col Pct | 14.12% | 8.09% | ||
Percent | 7.14% | 4% | 11.14% | |
Total | Frequency | 177 | 173 | 350 |
Percent | 50.57% | 49.43% | ||
#gráfico de mosaico
mosaicplot(freqej2,main="",xlab="Twiter",ylab="Sexo",col=c("#2E789B","#DF7401"))
#Ya lo había mostrado en el paso anterior, pero esta es otra forma de calcularlo
pfreqej2 <- as.data.frame(round(prop.table(table(twitter$twitter,twitter$sexo),1)*100,2))
pfreqej2 <- pfreqej2 %>% spread(Var2,Freq)
pfreqej2 <- pfreqej2 %>% remove_rownames %>% column_to_rownames(var="Var1")
pfreqej2 %>% rownames_to_column("Twitter/Genero") %>% flextable() %>% align_text_col(align = "right") %>% set_caption(caption = "% por fila") %>% autofit()
Twitter/Genero | Masculino | Femenino |
|---|---|---|
No usa twitter | 48.87 | 51.13 |
Usa twitter | 64.10 | 35.90 |
#Estimo que quiere decir x columna. Ya lo había mostrado en el paso anterior, pero esta es otra forma de calcularlo
pcfreqej2 <- as.data.frame(round(prop.table(table(twitter$twitter,twitter$sexo),2)*100,2))
pcfreqej2 <- pcfreqej2 %>% spread(Var2,Freq)
pcfreqej2 <- pcfreqej2 %>% remove_rownames %>% column_to_rownames(var="Var1")
pcfreqej2 %>% rownames_to_column("Twitter/Genero") %>% flextable() %>% align_text_col(align = "right") %>% set_caption(caption = "% por columna") %>% autofit()
Twitter/Genero | Masculino | Femenino |
|---|---|---|
No usa twitter | 85.88 | 91.91 |
Usa twitter | 14.12 | 8.09 |
NO HAY ZONAS EN EL SET DE DATOS
chisqTest <- chisq.test(freqej2)
chisqTest$expected
## Masculino Femenino
## No usa twitter 157.27714 153.72286
## Usa twitter 19.72286 19.27714
chisqTest
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: freqej2
## X-squared = 2.6345, df = 1, p-value = 0.1046
El p-value es 0.1046 y no es menor a 0.05, por lo tanto no podemos descartar la hipótesis nula de que la proporción es la misma.
Se clasificó en forma cruzada una muestra de 250 técnicos en telecomunicaciones en base a su especialidad y a la zona de la comunidad en que estaban trabajando. Los resultados están tabulados a continuacion:
mat=as.data.frame(rbind(c(20,18,12,17),
c(6,22,15,13),
c(4,6,14,11),
c(10,19,23,40)))
colnames(mat)<-c("A","B","C","D")
rownames(mat)<-c("Norte", "Sur","Este","Oeste")
mat %>% rownames_to_column("Zona") %>% flextable() %>% align_text_col(align = "right") %>% set_caption(caption = "Especialidad por zona") %>% autofit()
Zona | A | B | C | D |
|---|---|---|---|---|
Norte | 20 | 18 | 12 | 17 |
Sur | 6 | 22 | 15 | 13 |
Este | 4 | 6 | 14 | 11 |
Oeste | 10 | 19 | 23 | 40 |
El test de homogeneidad analiza las categorías de una variable en diferentes poblaciones. En este caso habla de UNA SOLA, por lo tanto no aplica. En cambio el test de independencia se aplica a una sola muestra pero con diferentes variables. Por lo tanto lo que corresponde aplicar es un test de independencia.
$h_0 = $ “Las especialidades son variables independientes” $h_a = $ “Las especialidades NO son variables independientes”
Corresponde aplicar el test de independencia, pero primero hay que comprobar si los supuestos se cumplen
Supuesto 1: Las frequencias esperadas son todas mayores que 1
testej3 <- chisq.test(mat)
testej3$expected
## A B C D
## Norte 10.72 17.42 17.152 21.708
## Sur 8.96 14.56 14.336 18.144
## Este 5.60 9.10 8.960 11.340
## Oeste 14.72 23.92 23.552 29.808
Este supuesto se cumple
Supuesto 2: A lo sumo el 20% de los valores esperados son mayores al 20%
Por lo visto antes esto también se cumple y puede aplicarse el test de \(\chi^2\)
testej3
##
## Pearson's Chi-squared test
##
## data: mat
## X-squared = 27.272, df = 9, p-value = 0.001261
En este caso me da que el p-valor es menor a 0.01 por lo tanto puedo descartar la hipótesis nula y concluir que los valores no son independientes.
Entre 1605 recién nacidos registrados en una maternidad, se han presentado 48 con un angioma cuya presencia, se sospecha puede estar relacionada con el cáracter (normal o patológico) del embarazo de la madre. Los resultados son los siguientes:
dat_fum=as.data.frame(rbind(c(37, 1334) ,
c( 11,223 )))
rownames(dat_fum)<-c("Embarazo Normal", "Embarazo Patológico")
colnames(dat_fum)<-c("Con angioma", "Sin angioma")
dat_fum %>% rownames_to_column(" ") %>% flextable() %>% align_text_col(align = "right") %>% set_caption(caption = "Presencia de Angioma por Tipo de Embarazo") %>% autofit()
| Con angioma | Sin angioma |
|---|---|---|
Embarazo Normal | 37 | 1,334 |
Embarazo Patológico | 11 | 223 |
Plantear y testear las hipótesis correspondientes considerando un nivel de significación del 5 %.
Nuevamente acá lo que tenemos es una sola muestra donde queremos ver si las variables son independientes o no. Por este motivo se va a hacer un test de independencia para comprobar esto.
chisq.test(dat_fum)
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: dat_fum
## X-squared = 2.1147, df = 1, p-value = 0.1459
En este caso el p-valor da por arriba de 0.05 por lo tanto no se puede descartar la hipótesis de que sean independientes.
Se ha realizado una encuesta entre el personal de una empresa. Se le preguntó a cada uno el cargo que desempeña y la cantidad de cigarrillos diarios que fuma. La frecuencia de fumador fue categorizada con las categorías: No fuma- Fuma Poco – Fumador Medio y Fuma Mucho
dat_fum=as.data.frame(rbind(Ger_Senior= c(4, 2, 3, 2) ,
Ger_Junior=c( 4, 3 ,7 ,4 ),
Empl_Senior=c( 25, 10, 12, 4) ,
Empl_Junior=c( 18 ,24 ,33, 13) ,
Secretarias= c(10 ,6, 7, 2 )))
colnames(dat_fum)<-c("No fuma", "Poco", "Medio", "Mucho")
dat_fum %>% rownames_to_column(" ") %>% flextable() %>% align_text_col(align = "right") %>% set_caption(caption = "Habito por puesto") %>% autofit()
| No fuma | Poco | Medio | Mucho |
|---|---|---|---|---|
Ger_Senior | 4 | 2 | 3 | 2 |
Ger_Junior | 4 | 3 | 7 | 4 |
Empl_Senior | 25 | 10 | 12 | 4 |
Empl_Junior | 18 | 24 | 33 | 13 |
Secretarias | 10 | 6 | 7 | 2 |
Estamos interesados en estudiar la relación, si existiera entre las variables:”puesto de trabajo” y “nivel de fumador” en el contexto de esta empresa.
1. La primera pregunta que nos hacemos es si la distribución de la variable fumador es similar en todos los niveles de la variable puesto de desempeño.Construya para eso las distribuciones condicionales de fumador a cada grupo de trabajo.
Para esto requiero las probabilidades marginales de cada fila, es decir que buscamos ver es que proporcion de cada puesto tiene diferentes categorias de fumador. Esto nos da la robabilidad conjunta. Esto lo puedo hacer con un prop.table, pero tengo que pasar de dataframe a matrix y el resultado a la inversa para que flextable lo muestre. Debe haber una forma más inteligente de hacer esto….
as.data.frame(round(prop.table(as.matrix(dat_fum), 1), 2)) %>% rownames_to_column(" ") %>% flextable() %>% align_text_col(align = "right") %>% set_caption(caption = "Habito por puesto") %>% autofit()
| No fuma | Poco | Medio | Mucho |
|---|---|---|---|---|
Ger_Senior | 0.36 | 0.18 | 0.27 | 0.18 |
Ger_Junior | 0.22 | 0.17 | 0.39 | 0.22 |
Empl_Senior | 0.49 | 0.20 | 0.24 | 0.08 |
Empl_Junior | 0.20 | 0.27 | 0.38 | 0.15 |
Secretarias | 0.40 | 0.24 | 0.28 | 0.08 |
Con estos resultados vemos que las distribuciones no parecen ser similares para cada nivel de variable. Probemos hacer un test.chi
chisq.test(dat_fum)$expected
## Warning in chisq.test(dat_fum): Chi-squared approximation may be incorrect
## No fuma Poco Medio Mucho
## Ger_Senior 3.476684 2.564767 3.533679 1.424870
## Ger_Junior 5.689119 4.196891 5.782383 2.331606
## Empl_Senior 16.119171 11.891192 16.383420 6.606218
## Empl_Junior 27.813472 20.518135 28.269430 11.398964
## Secretarias 7.901554 5.829016 8.031088 3.238342
Aca si vemos los resultados esperados hay varios puntos que son menores a 5. son 7 sobre 20 lo cual da mas del 20% para que se cumpla el supuesto.
Probemos con un test exacto de fischer. Acá cuando lo pruebo sin argumentos me tira un error de memoria. Pasandole el argumento “simulate.p.value=TRUE” funciona, pero al momento no se bien que significa ni por qué hay tanto requerimiento de memoria. Estimpo que la combinatoria lo hace inviable para matrices de dimensiones superiores a 2x2, por eso el metodo montecarlo …
fisher.test(dat_fum, simulate.p.value=TRUE,B=4000)
##
## Fisher's Exact Test for Count Data with simulated p-value (based on
## 4000 replicates)
##
## data: dat_fum
## p-value = 0.1627
## alternative hypothesis: two.sided
Acá nos estaría indicando que no podemos descartar la hipótesis de independencia, pero no se si esta simulación sería correcta en el uso del test de fisher. Sigamos con el punto 2 pasando al análisis de correspondencia. De todas formas el valor de Fisher da similar al de
2. Realice un análisis de correspondencias para estos datos. ¿Cuántos factores tiene sentido considerar?
fum.ca <- FactoMineR::CA(dat_fum, graph = FALSE)
summary(fum.ca, nb.dec = 2, ncp = 2)
##
## Call:
## FactoMineR::CA(X = dat_fum, graph = FALSE)
##
## The chi square of independence between the two variables is equal to 16.44164 (p-value = 0.1718348 ).
##
## Eigenvalues
## Dim.1 Dim.2 Dim.3
## Variance 0.07 0.01 0.00
## % of var. 87.76 11.76 0.49
## Cumulative % of var. 87.76 99.51 100.00
##
## Rows
## Iner*1000 Dim.1 ctr cos2 Dim.2 ctr cos2
## Ger_Senior | 2.67 | -0.07 0.33 0.09 | 0.19 21.36 0.80 |
## Ger_Junior | 11.88 | 0.26 8.37 0.53 | 0.24 55.12 0.46 |
## Empl_Senior | 38.31 | -0.38 51.20 1.00 | 0.01 0.30 0.00 |
## Empl_Junior | 26.27 | 0.23 33.10 0.94 | -0.06 15.18 0.06 |
## Secretarias | 6.05 | -0.20 7.01 0.87 | -0.08 8.05 0.13 |
##
## Columns
## Iner*1000 Dim.1 ctr cos2 Dim.2 ctr cos2
## No fuma | 49.19 | -0.39 65.40 0.99 | 0.03 2.93 0.01 |
## Poco | 7.06 | 0.10 3.08 0.33 | -0.14 46.32 0.66 |
## Medio | 12.61 | 0.20 16.56 0.98 | -0.01 0.17 0.00 |
## Mucho | 16.33 | 0.29 14.95 0.68 | 0.20 50.58 0.31 |
Acá varias cosas, la función tira un test de \(\chi^2\) PERO, como vimos en el punto anterior, no se cumplirian los supuestos para el mismo. de hecho la misma función chi.test nos lo advierte. Tambien vimos que el test de fisher simulado nos dio similar pero…
De todas maneras, se pude ver que en el análisis de correspondencias las dos primeras variables explican el 99.51% de la inercia, incluso la primera dimensión ya explica el 87.76% por lo tanto alcanzaría esa sola también. (dice de la varianza igual…pero entiendo que refiere a la inercia)
as.data.frame(round(fum.ca$eig,2)) %>% rownames_to_column(" ") %>% flextable() %>% align_text_col(align = "right") %>% set_caption(caption = "Dimensiones autovalores y porcentaje de la inercia explicado") %>% autofit()
| eigenvalue | percentage of variance | cumulative percentage of variance |
|---|---|---|---|
dim 1 | 0.07 | 87.76 | 87.76 |
dim 2 | 0.01 | 11.76 | 99.51 |
dim 3 | 0.00 | 0.49 | 100.00 |
fviz_ca_biplot(fum.ca) #mapa perceptual
3. Realizar los gráficos perfiles que considere adecuados.
Perfiles Fila
propTablef <- prop.table(as.matrix(dat_fum, 1))
datosf <- melt(propTablef)
colnames(datosf)<-c("Puesto","Nivel_Fum","prop_fila")
ggplot(datosf,aes(x=Puesto,y=prop_fila,group=Nivel_Fum,col=Nivel_Fum))+geom_line()
Acá vemos dependencia entre variables porque hay cruce de linea de
perfil. Eso tiene sentido con lo observado inicialmente sobre las
proporciones. Sin embargo, no me cierra lo del
p-value del test \(\chi^2\) y el de
Fisher
Perfiles Columna
propTablec <- prop.table(as.matrix(dat_fum), 2)
datosc <- melt(propTablec)
colnames(datosc)<-c("Puesto","Nivel_Fum","prop_col")
ggplot(datosc,aes(x=Nivel_Fum,y=prop_col,group=Puesto,col=Puesto))+geom_line()
Acá nuevamente hay cruces de perfiles, lo cual indica que no hay
independencia.
4. Explique la calidad de la representación y las relaciones entre las variables y los ejes (inercia, calidad, cosenos).
Las relaciones de los perfiles fueron explicadas en el punto anterior.
fviz_contrib(fum.ca, choice = "row", axes = 1)#contribuciones por fila
Acá vemos que las principales variables que aportan a la inercia son los
empleados seniro y en segunda medida los junior. ESTO NO LO ENTIENDO. Estan alejados del origen en el
bi-blot, pero gerente_junior lo esta mas y no explica. Es más la
distancia al orígen es mayor en el gerente junior. (y si hablamos de la
relación con la segunda dimensión son los que mas pegados estan al
origen). Que significa “que traccione” entonces?…
fviz_contrib(fum.ca, choice = "col", axes = 1)#contribuciones por columna
Aca vemos claramente que lo que explica la inercia son los no fumadores.
Esto se ve claro porque en el biplot esta en un extremo.
5. Hacer una síntesis de sus conclusiones, inspeccione relaciones entre perfiles fila, entre perfiles columna, asociaciones entre filas y columnas de manera adecuada.
Si miramos el bi-plot simétrico, vamos a notar que el eje que mas explica es el x que separa claramente fumadores de no fumadores. La segunda dimensión pareciera separar los puestos de jerarquía (se ve a las secretarias y empleados junior por debajo del 0).
Vemos una fuerte asociación entre gerentes junior y muy fumadores, habría que ver si los nervios de un cargo gerencial y la falta de experiencia son la causa de esto. Por otro lado los empleados senior también tienen una fuerte asociación con “no fuma” ¿será que tienen más edad y se cuidan?. Los gerentes senior también estan del lado del eje no fumador pero la asociación es más laxa. Los empleados junior tienen una asociación mas fuerte con un nivel de fumador medio. Y las secretarias también están en el lado del eje cercano a “no fuma”. Quizás la asociación entre falta de experiencia y nivel de responsabilidad sea una buena hipótesis explicativa.
6. ¿Cual es la inercia total?
La inercia total es \(\frac{\chi^2}{n}\)
inercia=chisq.test(dat_fum)$statistic/193
inercia
## X-squared
## 0.08518986
Me pregunto si el tema del p-valor malo par \(\chi^2\) y Fisher no tiene que ver con que la inercia no parece ser mucha…..
En el archivo de datos Autos.xls (Infostat) están los datos de 339 usuarios de auto Las variables que se han prguntado refieren al origen del auto (americano, japonés o europero), estado civil (soltero, casado-hijo) , relación con la casa(dueño, alquila), tipo de auto(familiar, sport), sexo(Hombre-Mujer), tamaño del auto(chico, mediano y grande) e ingreso familiar(en dos niveles 1 y 2).
autos <- read_excel("Clase_05/autos.xlsx")
autos[2:8] <- autos[2:8] %>% mutate_all(as.factor)
autodisjuntive <- tab.disjonctif.prop(autos[2:4])
as.data.frame(head(autodisjuntive)) %>% rownames_to_column(" ") %>% flextable() %>% align_text_col(align = "right") %>% set_caption(caption = "Matriz disyuntiva para: Nacionalidad, Estado Civil, Propiedad") %>% autofit()
| American | Europeo | Japones | Casado | Casado-hijo | Soltero | Soltero-hijo | Alquila | Dueño |
|---|---|---|---|---|---|---|---|---|---|
1 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 |
2 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 1 |
3 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 1 |
4 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 |
5 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 |
6 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 1 |
Para obtenr la matriz de Burt es multiplicando la matriz transpuerta de la disyuntiva por la disyuntiva.
as.data.frame(t(autodisjuntive) %*% autodisjuntive)%>% rownames_to_column(" ") %>% flextable() %>% align_text_col(align = "right") %>% set_caption(caption = "Matriz de Burt para: Nacionalidad, Estado Civil, Propiedad") %>%
bg(i = 1:3, j = 2:4, bg="red") %>%
bg(i = 4:7, j = 5:8, bg="orange") %>%
bg(i = 8:9, j = 9:10, bg="violet") %>%
autofit()
| American | Europeo | Japones | Casado | Casado-hijo | Soltero | Soltero-hijo | Alquila | Dueño |
|---|---|---|---|---|---|---|---|---|---|
American | 128 | 0 | 0 | 37 | 52 | 33 | 6 | 35 | 93 |
Europeo | 0 | 45 | 0 | 13 | 15 | 16 | 1 | 7 | 38 |
Japones | 0 | 0 | 166 | 51 | 44 | 63 | 8 | 55 | 111 |
Casado | 37 | 13 | 51 | 101 | 0 | 0 | 0 | 25 | 76 |
Casado-hijo | 52 | 15 | 44 | 0 | 111 | 0 | 0 | 5 | 106 |
Soltero | 33 | 16 | 63 | 0 | 0 | 112 | 0 | 60 | 52 |
Soltero-hijo | 6 | 1 | 8 | 0 | 0 | 0 | 15 | 7 | 8 |
Alquila | 35 | 7 | 55 | 25 | 5 | 60 | 7 | 97 | 0 |
Dueño | 93 | 38 | 111 | 76 | 106 | 52 | 8 | 0 | 242 |
Las matrices marcadas en la diagonal representan las frecuencias especificas de cada variable. En los dos primeros casos se tratan de variables excluyentes por lo tanto las matrices son diagonales.
MCA6 <- MCA(autos[2:4],graph = FALSE)
Contribución de las variables
fviz_contrib(MCA6, choice="var", axes = 1 )
fviz_contrib(MCA6, choice="var", axes = 2 )
fviz_mca_var(MCA6, repel=TRUE)
Los individuos x Nacionalidad
fviz_mca_ind(MCA6, habillage =autos$Nacionalidad, addEllipses = TRUE, repel=TRUE,geom="point") +
ggtitle("Nacionalidad")
Los individuos x Estado Civile
fviz_mca_ind(MCA6, habillage =autos$EstCivil, addEllipses = TRUE, repel=TRUE,geom="point") +
ggtitle("Estado Civil")
Los individuos x propiedad
fviz_mca_ind(MCA6, habillage =autos$Propiedad, addEllipses = TRUE, repel=TRUE,geom="point") +
ggtitle("Propiedad")