Análisis R de datos categóricos desordenados: tablas de columnas, mapas de calor, diagramas de cuerdas, diagramas de Sankey y pruebas estadísticas
Antecedentes del artículo: Queríamos estudiar las expectativas de los adolescentes CFPS2010 y CFPS2012 para sus carreras.
Como se muestra en la Tabla 1, fusionamos la codificación de expectativas profesionales original en 9 categorías (categorías de codificación profesional) y otras. Dado que deseamos analizar la estabilidad de las expectativas profesionales de la misma persona en diferentes oleadas de la encuesta, definimos a los sujetos de nuestro análisis como encuestados que respondieron a sus expectativas profesionales tanto en CFPS2010 como en CFPS2012. Como se muestra en la Tabla 2, los datos recodificados son datos generalizados, el tamaño de la muestra es 1920 y el nombre del conjunto de datos es EXPECT. Lo convertimos a otras formas para dibujar los gráficos requeridos en análisis posteriores.
?Método analítico 1: lista, frecuencia y frecuencia
En la Tabla 3, presentamos una tabla cruzada de las aspiraciones profesionales de los adolescentes de 2010 a 2012. En esta tabla, frecuencia (el número de datos que pertenecen a cada categoría), valor de frecuencia), porcentaje (el número de datos que pertenecen a cada categoría) y porcentaje (el número de datos que pertenecen a cada categoría sobre el porcentaje total de los datos) . (valor), porcentaje (el número de datos que pertenecen a cada categoría) y porcentaje (el número de datos que pertenecen a cada categoría como porcentaje del total de datos). (La base de los pares de datos es 100). (Valores, incluidos porcentaje, porcentaje de fila y porcentaje de columna). Método de análisis 2: gráfico estadístico
Descripción del color antes del análisis: color degradado predeterminado, aquí se presentan 2 paquetes de colores.
1) El paquete de software RColorBrewer se utiliza especialmente para crear colores en serie. Consulte la Figura 1 para obtener detalles sobre los colores en serie.
biblioteca(RColorBrewer)
display.brewer.all()
2) Paquete de software viridis con combinación de colores compatible con daltónicos, consulte la serie de colores en Figura 2 para más detalles.
biblioteca(viridis)
?viridis()# Puedes ver más sobre los colores de este conjunto de paquetes
Dibujémoslo a continuación~ Nota: El significado de los números de categoría en la Figura 3 - Figura 6: 1) Jefes de agencias estatales, organizaciones del partido, empresas e instituciones públicas; 2) Médicos 3) Docentes 4) Personal profesional y técnico (excluidos docentes y médicos); ) personal de oficina y personal relacionado; 6) personal de producción de agricultura, silvicultura, ganadería, pesca y conservación de agua; 8) operadores de equipos de producción y transporte y personal relacionado; otros.
?Figura 1: Herramienta de dibujo de mapa de calor de matriz de adyacencia: ggplot2 o paquete de software profesional ComplexHeatmap
La matriz de adyacencia es una matriz N * N, que representa la relación entre N nodos. La posición (i, j) en la matriz representa la relación entre el i-ésimo nodo y el j-ésimo nodo. Para la red relacional dirigida de este artículo, la matriz de adyacencia no es simétrica. Las líneas diagonales de la matriz de adyacencia representan las relaciones entre nodos.
Una matriz de adyacencia se puede representar como un mapa de calor coloreando los pesos de las conexiones entre nodos.
Método 1: dibujar usando ggplot2
biblioteca(ggplot2)
biblioteca(reshape2)
expect_Heatlt -as.data.frame; (round(prop.table( table(expect$code_new10, expect$code_new12)), 5)*100)
colnames(expect_Heat)lt -c("desde", "hasta", "valor; ")
#expect_Heat (Tabla 4) es el conjunto de datos generado cuando usamos ggplot2 para dibujar un mapa de calor.
ggplot(expect_Heat, aes(x=to, y=desde, fill=valor, etiqueta=valor))
? geom_tile(color="negro")
? scale_fill_gradientn(colors=brewer.pal(9, "YlGnBu"))
?xlab('CFPS2012')
ylab('CFPS2010')
? coord_equal()
? tema(axis.text.x=element_text(angle=90, hjust=1, color='negro'),
eje. text.y=element_text(ángulo=90, hjust=1, color='negro'),
?y=element_text(ángulo=0, hjust=1, color='negro')) p>
##### Antes de instalar ComplexHeatmap, debemos llamar al paquete devtools y luego instalamos el paquete ComplexHeatmap a través de la función install_github
biblioteca (devtools)
install_github(" jokergoo/ComplexHeatmap")
biblioteca(ComplexHeatmap)
myColors=brewer.pal(9, "YlGnBu")[1:9]
expect_Heat_matrixlt; - as .matrix(round(prop.table(table(expect$code_new10, expect$code_new12)), 5)*100)
#expect_Heat_matrix (Figura 4) es el calor de dibujo generado por nosotros usando el paquete de software ComplexHeatmap La matriz requerida para el gráfico.
Heatmap(expect_Heat_matrix, myColors)
?Dibujo 2: herramienta de dibujo de diagrama de cadenas: función de diagrama de cadenas del paquete de software circlize
El diagrama de cadenas es un dato A Método de visualización utilizado para mostrar la relación entre datos en una matriz, utilizado principalmente para mostrar la relación entre múltiples objetos.
Un diagrama de cuerdas se compone de nodos y cuerdas. Los nodos están dispuestos radialmente alrededor de un círculo. El arco con peso (y ancho) que conecta dos puntos cualesquiera del círculo se llama cuerda (a). línea recta entre dos puntos) representa la correlación entre los dos.
Las diferentes cuerdas de nodos están codificadas por colores para permitir la comparación visual y la diferenciación de datos, lo cual es ideal para representar correlaciones entre datos complejos.
La Figura 6 muestra la evolución de las expectativas profesionales de los adolescentes de 2010 a 2012. El número de nodos es 10, es decir, se deben analizar diez tipos de expectativas profesionales, y el número de arcos se aclara por el color y el ancho de los arcos: las líneas rectas de diferentes colores representan el grado de correlación entre las diferentes expectativas profesionales. , mientras que el peso (ancho del arco) se revela cambios claros en la elección entre diferentes expectativas.
biblioteca(circlize)
biblioteca(viridis)
expect_chordlt; -expect_heat
chordDiagram(expect_chord, col=viridis:. turbo (10))
?Figura 3: Herramienta de dibujo de diagramas de Sankey: paquete de software ggalluvial
El diagrama de Sankey es muy adecuado para mostrar la correlación entre datos categóricos. Utiliza el flujo de datos. El formulario muestra el número de elementos de la misma categoría. En la Figura 7, los bordes representan flujos entre expectativas profesionales, los flujos representan valores específicos de datos de flujo y los nodos representan diferentes categorías de expectativas profesionales.
A través de la Figura 7, podemos resumir las características del diagrama de Sankey:
1) Flujo total inicial = flujo total final, es decir, conservación de energía. Es imposible generar flujo en el proceso intermedio y no hay pérdida en el flujo total. Por lo tanto, si hay pérdidas o aumentos, se puede configurar una nueva categoría, como "Otros", para almacenar estas categorías que no forman parte del objeto de análisis.
2) Analizar el proceso de tráfico. Diferentes líneas representan diferentes desvíos de tráfico. El ancho del borde es proporcional al flujo. Cuanto más ancho es el borde, mayor es el valor del flujo. #install.packages ('ggalluvial')
biblioteca(ggalluvial)
# Elimina la columna pid y formatea el conjunto de datos de inspección. El conjunto de datos convertido se utiliza para dibujar un diagrama de Sankey. , como se muestra en la tabla 5, donde la columna de persona representa el flujo en el momento del dibujo, la columna de año distingue el estado en el flujo y la inspección representa el nodo.
sapply(names(esperar), función(x) longitud(unique(esperar[,x])))
expect_sankylt; -too_lodes_form(co_2[,1:ncol(esperar) )], ejes =1: ncol(expect), id="persona")
colnames(expect_sanky) lt; - c("persona", "año", "expectancia")
expect_sankylt; - mutate(esperar _sanky, año=ifelse(año=="code_new10", "2010", "2012"))
ggplot(expect_sanky,
? aes(x = año, estrato = expectativa, aluvión=persona,
? fill = expectativa, etiqueta = expectativa))
? geom_flow()
? geom_stratum(alfa = .5)
? geom_text(stat = "estrato", tamaño = 3)
?theme(legend.position = "none")
? ggtitle("expectativa de empleo en dos momentos")
? theme(plot.title = element_text(hjust = 0.5))
? major=element_line(color=NA),
panel.background = element_rect(fill = "transparente", color = NA),
plot.background = element_rect(fill = "transparente ", color = NA),
?fondo = element_rect(fill = "transparent", color = NA),
panel.grid.minor = element_blank())
Nota: Los tres tipos de dibujos se pueden embellecer. No ajusté los parámetros al dibujar algunos de los dibujos. Consulte el documento de referencia para embellecer el contenido específico. Método de análisis 3: prueba estadística
?Método 1: Prueba de independencia de chi-cuadrado: estudia la relación entre dos grupos de variables categóricas
biblioteca(gmodels)
CrossTable(expect$code_new10, expect$code_new12, esperado = T, formato = "SAS", fisher = T, prop.c = T, prop.t = F, prop.chisq = T)
También Esto se puede calcular por separado utilizando pruebas estadísticas en el paquete de estadísticas.
1) Prueba de independencia chi-cuadrado de Pearson
chisq.test(expect$code_new10, expect$code_new12, correcto = TRUE,
? p = rep ( 1/longitud(x), longitud(x)), rescale.p = FALSE,
? simular.p.value = FALSE, B = 2000)
Más de 20 la frecuencia esperada es menor que 5 y la frecuencia mínima esperada es T = 0,025.
2) Prueba exacta de Fisher
fisher.test(co_2$code_new10, co_2$code_new12, workspace = 5000, hybrid = FALSE,
control = list( ), o = 1, alternativa = "dos.lados", simular.p.value = TRUE,
conf.int = TRUE, conf.level = 0,95)
p- El valor es <0,01, se rechaza la hipótesis nula y la conclusión es que los ideales profesionales de los adolescentes en 2010 y 2012 son independientes.
Método 2: Prueba de coherencia
El coeficiente Kappa se utiliza para realizar pruebas de coherencia y también se puede utilizar para medir la precisión de la clasificación. El cálculo del coeficiente Kappa se basa en el. matriz de confusión. Para fines de investigación, consistencia, variabilidad e independencia son conceptos diferentes.
La explicación del coeficiente kappa es: generalmente se cree que kappagt; 0,8 significa buena consistencia, kappalt; 0,4 significa mala consistencia, además, debe pasar la prueba de significancia, es decir, valor p lt; 0,05.
biblioteca(irr)
kappa2(expect )
kappa2(expect, "squared") # Conjunto de pesos cuadrados predefinidos
Según Según la Figura 10, ya sean los datos originales o los datos después de considerar el cuadrado, podemos concluir que en el nivel de significancia de 0,01, la consistencia de las expectativas profesionales de los adolescentes en 2010 y 2012 es pobre.
#kappam.fleiss(): sobre la base de 2010 y 2012, agregando nuevas columnas (2014, 2016, etc.), esta función puede probar la coherencia de los resultados de medición de múltiples variables. Coeficiente kappa de Fleiss: el rango de valores es -1, 1. Cuanto mayor sea el coeficiente, más fuerte será la coherencia. La experiencia general muestra que menos de 0,7 es inaceptable pero necesita mejorar, 0,7 es aceptable y 0,9 es excelente.
Método 3: Examinar la variabilidad de datos categóricos emparejados
Analizar la variabilidad de datos categóricos emparejados. Este tipo de datos se encuentra más comúnmente en estudios experimentales, donde los mismos datos se prueban utilizando diferentes métodos o diferentes momentos. Analice lotes de datos probando el mismo lote utilizando diferentes métodos o diferentes momentos. En este caso, puedes utilizar la prueba de chi-cuadrado pareada. Tenga en cuenta que los nombres de filas y columnas tienen la misma categoría y los recuentos representan respuestas emparejadas. Esencialmente, los individuos que respondieron lo mismo antes y después no influyeron en la evaluación del cambio de respuesta. Nos centraremos en los recuentos "inconsistentes"; la prueba kappa utiliza todos los datos de la lista, mientras que la prueba de chi-cuadrado emparejado utiliza sólo los datos "inconsistentes".
Cuando la dimensión de datos es 2*2, utilice la prueba de McNemar para datos categóricos emparejados; cuando la dimensión de datos supere 2*2, utilice la prueba de McNemar-Bowker.
Nota: 1) La desventaja de la prueba de McNemar-Bowker es que si aparecen ceros en algunas posiciones de la matriz, la prueba puede fallar
2) Si los conteos de "; Las categorías "inconsistentes" son muy Si es bajo, la prueba de McNemar puede no ser confiable.
mcnemar.test(expect$code_new10, expect$code_new12)
Según la Figura 11, la prueba McNemar-Bowker falla.
If (!require(rcompanion)){install.packages("rcompanion")}
También puede utilizar la función nominalSymmetryTest en el paquete Rcompanion para realizar pruebas de simetría en los datos. La función también falla con estos datos.
?Método de Análisis 3 - Modelado Estadístico
Por actualizar.
Documentos de referencia
1. La belleza de la visualización de datos en R: Guía profesional de producción de gráficos (edición mejorada)", Zhang Jie, Grupo Editorial de Industria y Tecnología de la Información de China y Prensa de la Industria Electrónica . La versión electrónica del libro se puede descargar en WeChat Reading.
2.Tutorial oficial de Circulize. URL: Visualización de círculos en R (jokergoo.github.io).
3. Tutorial oficial de ComplexHeatmap. URL: Referencia completa de Heatmap (jokergoo.github.io)
4. Análisis de datos categorizados y análisis de datos ordinales. 2. Categorización y análisis de variables ordinales - Biblioteca Baidu (baidu.com)
5. Categorización de datos y prueba de chi-cuadrado. Sitio web: ¿Cómo analizar los datos de clasificación? ¿Cuáles son las situaciones en las que se utiliza la prueba de chi-cuadrado? - Biblioteca Baidu (baidu.com)
6. Manual R: Prueba de datos nominales emparejados (rcompanion.org)
6. Manual R: Prueba de datos nominales emparejados (rcompanion. org) org