Solución: función Crosstable ( ) para posit (RStudio)
Lee el articulo versión Medium aquí
¿Está cansado de tratar de obtener frecuencias relativas (porcentajes%) en R? Hay una función para el paquete "gmodels" que puede tornar tu vida más fácil: Crosstable().
Este tutorial utiliza un ejemplo de investigación clínica (Framingham Heart Study) como el ejemplo perfecto.
Primeros pasos
Primero ve a https://www.r-project.org/ para descargar R y luego, a https://rstudio.com/ para descargar el ambiente RStudio ( basado en R). Todos son gratuitos.
La cohorte Framingham Heart Study es la cohorte clínica más antigua (desde 1948 ). Esta cohorte se centra en las enfermedades cardiovasculares y los factores de riesgo en la población general.
Después de completar la instalación, abre su RStudio. Luego, ve a la consola y prueba los siguientes pasos
Abrir y adjuntar la base de datos
Vamos a extraer una versión disponible públicamente del Framingham heart study;
https://www.kaggle.com/amanajmera1/framingham-heart-study-dataset/version/1
En esta web también se puede consultar la codificación de las diferentes variables. Por ejemplo, con respecto al género (variable masculino; male=1 significa masculino y male=2 significa femenino)
Primero descarga el archivo a tu computadora.
Luego ve a RStudio y abre el archivo a través de las siguientes opciones (forma más fácil)
File -> Import Dataset -> From Text (base) (archivo .csv)
Luego, se abre una ventana con una base de datos llamado framingham con 4240 observaciones (filas) y 16 variables (columnas)
"Adjuntemos" la base de datos (aquí para saber POR QUÉ estamos haciendo esto).
attach(framingham)
Comencemos nuestro tutorial Crosstable respondiendo una pregunta clínica
Intentemos responder a la pregunta "¿Cuál es la distribución de la enfermedad coronaria (CHD) entre géneros?" usando tanto el Método clásico como el Paquete de CrossTable ( )
- male es la variable para género;
- TenYearCHD es la variable de prevalencia de enfermedad coronaria al cabo de 10 años.
Comencemos obteniendo proporciones (%) de la forma clásica...
table(male,TenYearCHD)
Vemos que 343 hombres y 301 mujeres tenían CHD. Pero aún no tenemos las proporciones (%) de cada grupo.
El truco es crear una variable intermedia “z” (puedes nombrarla como quieras), que represente una tabla de dos por dos con nuestras variables discretas.
Luego, dividimos el conteo absoluto de cada celda por la suma de todos los casos en la misma fila. Esto mostrará una proporción (entre 0 y 1)
z <- table(male,TenYearCHD)
z/rowSums(z)
Para la limpieza, podemos eliminar este valor adicional "z"
z <- table(male,TenYearCHD)
z/rowSums(z)
rm(z)
Após correr todo
Vemos que el 12 % de las mujeres y el 19 % de los hombres tenían CHD después de 10 años.
Respuesta: 301 (12 %) mujeres y 343 (19 %) pacientes masculinos tenían una cardiopatía coronaria.
La manera más fácil: la función de "CrossTable"
Necesitamos tener instalado el paquete “gmodels”.
install.packages("gmodels")
library("gmodels")
Vamos a usar la función CrossTable .
CrossTable(male,TenYearCHD)
Vemos el significado de las 5 filas dentro de cada celda, en el cuadro de arriba.
Sin embargo, si solo necesitamos la proporción por filas, podemos escribir en su lugar...
CrossTable(male,TenYearCHD, prop.r=TRUE,prop.c=FALSE,prop.t=FALSE,prop.chisq=FALSE)
El único argumento que queremos es la probabilidad de cada fila (prop-r).
Respuesta: el 12 % de las mujeres y el 19 % de los hombres tenían una cardiopatía coronaria después de 10 años.
Probando el significado estadístico
Podemos ir aún más lejos y probar si esta diferencia es estadísticamente significativa usando la prueba de χ2 (chi-cuadrado).
CrossTable(male,TenYearCHD, prop.r=TRUE,prop.c=FALSE,prop.t=FALSE,prop.chisq=FALSE,chisq=TRUE)
De hecho p<0.05 (p=8.69e-09), lo que significa que existe una diferencia estadísticamente relevante entre CHD en hombres y mujeres.
Dado que p<α (error tipo 1) de 0,05, podemos rechazar la hipótesis nula. Más información sobre el valor de p-value aquí.
Respuesta: Hay una diferencia estadística entre la cardiopatía coronaria entre los sexos, donde el 12 % de las mujeres y el 19 % de los pacientes masculinos tuvieron una cardiopatía coronaria después de 10 años (p<0,05).
¿Qué pasa si necesito porcentajes de 0 a 100%...
Si necesitas porcentajes (0–100 %) en lugar de 0–1, hay muchas formas de lograrlo.
El método más simple que he encontrado es escribir format=“SPSS” (el valor predeterminado sería format= “SAS”)
CrossTable(male,TenYearCHD, prop.r=TRUE,prop.c=FALSE,prop.t=FALSE,prop.chisq=FALSE,format="SPSS")
Ahora vemos, de nuevo, que el 19 % (343) de los participantes masculinos y el 12 % (301) de las mujeres participantes tenían CHD después de 10 años.
BONUS: el significado de todos los argumentos posibles para la función CrossTable...
- digits — Número de dígitos después del punto decimal para proporciones de celdas
- max.width — En el caso de una tabla de 1 x n, el valor predeterminado será imprimir el resultado horizontalmente. Si el número de columnas supera el ancho máximo, la tabla se ajustará para cada incremento sucesivo de columnas de ancho máximo. Si deseas una tabla vertical de una sola columna, configura max.width en 1
- expected — Cuando
TRUE
, chisq seráTRUE
y se incluirán los recuentos de células esperados de χ2 - prop.r — Cuando
TRUE
, se incluirán las proporciones de las filas - prop.c — Cuando
TRUE
, se incluirán las proporciones de las columnas - prop.t — Cuando
TRUE
, se incluirán las proporciones de las tablas - prop.chisq — Cuando
TRUE
, se incluirá la contribución de chi-cuadrado de cada celda - chisq — Cuando
TRUE
, se incluirán los resultados de una prueba de chi-cuadrado - fisher — Cuando
TRUE
, se incluirán los resultados de una exacta de Fischer - mcnemar — Cuando
TRUE
, se incluirán los resultados de una prueba de McNemar - resid — Cuando
TRUE
, se incluirá el residual (Pearson) - sresid — Cuando
TRUE
, se incluirá el residual estandarizado - asresid — Cuando
TRUE
, se incluirá el residual estandarizado ajustado - missing.include — Cuando
TRUE
, elimina los niveles de factor no utilizados - format — SAS (predeterminado) o SPSS, según el tipo de resultado deseado.
- dnn — los nombres que se darán a las dimensiones en el resultado (los nombres de los dimnames).
Disclosure
Este artículo NO da ningún tipo de recomendación médica individual. Si buscas asesoramiento médico, visita a un médico con licencia en tu país.
Referencias
https://www.rdocumentation.org/packages/gmodels/versions/2.18.1.1/topics/CrossTable