“Análisis estadístico Barómetro Sanitario 2022”
En el contexto de la creciente importancia de la salud pública, este análisis se sumerge en los resultados de una encuesta que abarca más de 7400 registros del Barómetro Sanitario del año 2022. Esta extensa recopilación de datos nos ofrece una oportunidad para comprender las complejidades y matices de las percepciones y experiencias de la población en relación con la salud. A través de técnicas de análisis de datos, trataremos de explorar las respuestas detalladas de los participantes, obteniendo patrones, tendencias y relaciones significativas.
El Barómetro Sanitario, el cual se lleva realizando de forma anual desde 1993 por el Ministerio de Sanidad, Consumo y Bienestar Social en colaboración con el Centro de Investigaciones Sociológicas, se erige como un barómetro social fundamental, reflejando la salud en un contexto más amplio de valores, preocupaciones y comportamientos.
Para la realización de este estudio se han empleado los datos correspondientes al barómetro de sanidad 2022, obteniéndose los datos de la página del ministerio de sanidad (enlace a datos).
Este análisis se propone desglosar y examinar minuciosamente los datos recopilados, identificando puntos de intersección que arrojen luz sobre los aspectos que valoran los usuarios y de los que depende su grado de satisfacción final. La misión de este estudio será ofrecer una visión esclarecedora del estado del sistema de salud actual, y al mismo tiempo, que también sirva como guía esencial para futuras estrategias y políticas en el ámbito sanitario.
Fijar directorio
##setwd("/Users/Barbara/Desktop/R")
getwd()
## [1] "/Users/Barbara/Desktop/R"
Abrir paquetes
library(readxl)
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ forcats 1.0.0 ✔ readr 2.1.4
## ✔ ggplot2 3.4.4 ✔ stringr 1.5.0
## ✔ lubridate 1.9.3 ✔ tibble 3.2.1
## ✔ purrr 1.0.2 ✔ tidyr 1.3.0
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(knitr)
library(kableExtra)
##
## Attaching package: 'kableExtra'
##
## The following object is masked from 'package:dplyr':
##
## group_rows
library(ggplot2)
ABRIR BBDD
BBDD22=read_excel("/Users/Barbara/Desktop/R/BBDD.xlsx")
##BBDD22=read_excel("C:/Users/jaime/Desktop/TRABAJO EN GRUPO/BBDD.xlsx")
SELECCIONAR COLUMNAS
Lo primero que vamos a hacer es segmentar la base de datos para trabajar unicamente con las variables que creemos relevantes.
BBDD_resumen=BBDD22 %>% select(REGISTRO, CCAA, PROV, SEXO, EDAD, P2, P3_1,P3_2,P3_3, P3_4, P4, P5ES_1,P5ES_2, P5ES_3,P5ES_4, P5ES_5, P5ES_6, P6A, P6C01,ESTSALUD, ESCIDEOL)
Vamos a ver la estructura de esta base de datos resumen:
str(BBDD_resumen)
## tibble [7,454 × 21] (S3: tbl_df/tbl/data.frame)
## $ REGISTRO: num [1:7454] 2459 5493 1953 2087 2201 ...
## $ CCAA : num [1:7454] 1 1 1 1 1 1 1 1 1 1 ...
## $ PROV : num [1:7454] 4 4 4 4 4 4 4 4 4 4 ...
## $ SEXO : num [1:7454] 2 1 2 2 1 2 2 1 2 2 ...
## $ EDAD : num [1:7454] 52 76 68 68 61 90 50 76 55 48 ...
## $ P2 : num [1:7454] 7 9 8 10 5 10 7 6 6 7 ...
## $ P3_1 : num [1:7454] 1 3 2 1 2 1 2 1 1 2 ...
## $ P3_2 : num [1:7454] 2 1 2 1 2 2 1 1 1 2 ...
## $ P3_3 : num [1:7454] 1 3 2 1 1 1 1 1 1 1 ...
## $ P3_4 : num [1:7454] 2 3 2 1 1 1 1 1 1 2 ...
## $ P4 : num [1:7454] 2 3 3 1 1 1 1 3 1 1 ...
## $ P5ES_1 : num [1:7454] 5 9 7 9 7 3 1 8 5 9 ...
## $ P5ES_2 : num [1:7454] 8 9 5 9 7 8 1 8 5 6 ...
## $ P5ES_3 : num [1:7454] 5 99 6 10 7 10 1 8 7 6 ...
## $ P5ES_4 : num [1:7454] 3 99 10 98 8 10 98 8 9 98 ...
## $ P5ES_5 : num [1:7454] 4 99 5 98 98 98 98 8 98 7 ...
## $ P5ES_6 : num [1:7454] 7 7 6 98 7 10 9 9 9 8 ...
## $ P6A : num [1:7454] 1 0 0 1 1 0 1 1 1 1 ...
## $ P6C01 : num [1:7454] 3 0 0 0 0 0 15 0 15 7 ...
## $ ESTSALUD: num [1:7454] 3 2 2 2 3 2 1 3 3 1 ...
## $ ESCIDEOL: num [1:7454] 10 10 5 98 1 10 98 3 3 5 ...
Como vemos las interpreta todas como numericas porque los numeros en algunas variables representan códigos. Vamos a transformarlas a factores.
BBDD_resumen <- BBDD_resumen %>%
mutate(
CCAA = as.factor(CCAA),
PROV=as.factor(PROV),
SEXO=as.factor(SEXO),
P3_1=as.factor(P3_1),
P3_2=as.factor(P3_2),
P3_3=as.factor(P3_3),
P3_4=as.factor(P3_4),
P4= as.factor(P4),
P6A=as.factor(P6A),
ESTSALUD=as.factor(ESTSALUD),
ESCIDEOL=as.factor(ESCIDEOL)
)
Corroboramos que la estructura ha cambiado
str(BBDD_resumen)
## tibble [7,454 × 21] (S3: tbl_df/tbl/data.frame)
## $ REGISTRO: num [1:7454] 2459 5493 1953 2087 2201 ...
## $ CCAA : Factor w/ 19 levels "1","2","3","4",..: 1 1 1 1 1 1 1 1 1 1 ...
## $ PROV : Factor w/ 52 levels "1","2","3","4",..: 4 4 4 4 4 4 4 4 4 4 ...
## $ SEXO : Factor w/ 2 levels "1","2": 2 1 2 2 1 2 2 1 2 2 ...
## $ EDAD : num [1:7454] 52 76 68 68 61 90 50 76 55 48 ...
## $ P2 : num [1:7454] 7 9 8 10 5 10 7 6 6 7 ...
## $ P3_1 : Factor w/ 5 levels "1","2","3","8",..: 1 3 2 1 2 1 2 1 1 2 ...
## $ P3_2 : Factor w/ 5 levels "1","2","3","8",..: 2 1 2 1 2 2 1 1 1 2 ...
## $ P3_3 : Factor w/ 5 levels "1","2","3","8",..: 1 3 2 1 1 1 1 1 1 1 ...
## $ P3_4 : Factor w/ 5 levels "1","2","3","8",..: 2 3 2 1 1 1 1 1 1 2 ...
## $ P4 : Factor w/ 7 levels "1","2","3","4",..: 2 3 3 1 1 1 1 3 1 1 ...
## $ P5ES_1 : num [1:7454] 5 9 7 9 7 3 1 8 5 9 ...
## $ P5ES_2 : num [1:7454] 8 9 5 9 7 8 1 8 5 6 ...
## $ P5ES_3 : num [1:7454] 5 99 6 10 7 10 1 8 7 6 ...
## $ P5ES_4 : num [1:7454] 3 99 10 98 8 10 98 8 9 98 ...
## $ P5ES_5 : num [1:7454] 4 99 5 98 98 98 98 8 98 7 ...
## $ P5ES_6 : num [1:7454] 7 7 6 98 7 10 9 9 9 8 ...
## $ P6A : Factor w/ 8 levels "0","1","2","3",..: 2 1 1 2 2 1 2 2 2 2 ...
## $ P6C01 : num [1:7454] 3 0 0 0 0 0 15 0 15 7 ...
## $ ESTSALUD: Factor w/ 7 levels "1","2","3","4",..: 3 2 2 2 3 2 1 3 3 1 ...
## $ ESCIDEOL: Factor w/ 12 levels "1","2","3","4",..: 10 10 5 11 1 10 11 3 3 5 ...
Obtenemos la distribución porcentual de registros en función de las comunidades autónomas. Vemos que las 4 primeras (Andalucía, Cataluña, C. Madrid y C. Valenciana) se corresponden con las provincias más pobladas de España, por lo que se da más peso a las comunidades con más población.
# Nombrar
BBDD_resumen <- BBDD_resumen %>%
mutate(
CCAA_COD = case_when(
CCAA == 1 ~ "Andalucía",
CCAA == 2 ~ "Aragón",
CCAA == 3 ~ "Asturias (Principado de)",
CCAA == 4 ~ "Balears (Illes)",
CCAA == 5 ~ "Canarias",
CCAA == 6 ~ "Cantabria",
CCAA == 7 ~ "Castilla-La Mancha",
CCAA == 8 ~ "Castilla y León",
CCAA == 9 ~ "Cataluña",
CCAA == 10 ~ "Comunitat Valenciana",
CCAA == 11 ~ "Extremadura",
CCAA == 12 ~ "Galicia",
CCAA == 13 ~ "Madrid (Comunidad de)",
CCAA == 14 ~ "Murcia (Región de)",
CCAA == 15 ~ "Navarra (Comunidad Foral de)",
CCAA == 16 ~ "País Vasco",
CCAA == 17 ~ "Rioja (La)",
CCAA == 18 ~ "Ceuta (Ciudad Autónoma de)",
CCAA == 19 ~ "Melilla (Ciudad Autónoma de)",
TRUE ~ as.character(CCAA) # Manejar otros casos
)
)
# Calcular el porcentaje
porcentaje_CCAA <- prop.table(table(BBDD_resumen$CCAA_COD)) * 100
# Agregar la suma total
porcentaje_CCAA_total <- c(porcentaje_CCAA, Total = sum(porcentaje_CCAA))
porcentaje_CCAA_total= sort(porcentaje_CCAA_total, decreasing = TRUE)
kable(porcentaje_CCAA_total, caption = "Distribución por comunidad autónoma") %>%
kable_styling()
| x | |
|---|---|
| Total | 100.0000000 |
| Andalucía | 11.7654950 |
| Cataluña | 11.0142206 |
| Madrid (Comunidad de) | 10.4507647 |
| Comunitat Valenciana | 8.4920848 |
| Galicia | 6.1577676 |
| Castilla y León | 5.7016367 |
| Castilla-La Mancha | 5.2320902 |
| País Vasco | 4.8698685 |
| Canarias | 4.8162061 |
| Murcia (Región de) | 4.6149718 |
| Aragón | 4.4003220 |
| Asturias (Principado de) | 4.4003220 |
| Extremadura | 4.0381003 |
| Balears (Illes) | 3.8100349 |
| Navarra (Comunidad Foral de) | 3.4075664 |
| Cantabria | 3.3002415 |
| Rioja (La) | 2.4148108 |
| Ceuta (Ciudad Autónoma de) | 0.6171183 |
| Melilla (Ciudad Autónoma de) | 0.4963778 |
porcentaje_CCAA= sort(porcentaje_CCAA, decreasing = TRUE)
barplot(porcentaje_CCAA, names.arg = NULL, ylab = "Porcentaje", xlab = "CCAA",
main = "Porcentaje CCAA Total", col = "skyblue",)
Calculando la distribución de registros por sexo, obtenemos 46,5% pra registros de hombres y 53,5% para registros de mujeres, siendo esta diferencia poco significativa.
# Nombrar
BBDD_resumen <- BBDD_resumen %>%
mutate(
SEXO_COD = case_when(
SEXO == 1 ~ "Hombre",
SEXO == 2 ~ "Mujer",
TRUE ~ as.character(SEXO) # Manejar otros casos
)
)
# Calcular el porcentaje
porcentaje_SEXO <- prop.table(table(BBDD_resumen$SEXO_COD)) * 100
# Agregar la suma total
porcentaje_SEXO_total <- c(porcentaje_SEXO, Total = sum(porcentaje_SEXO))
porcentaje_SEXO_total= sort(porcentaje_SEXO_total, decreasing = TRUE)
kable(porcentaje_SEXO_total, caption = "Distribución por comunidad autónoma") %>%
kable_styling()
| x | |
|---|---|
| Total | 100.00000 |
| Mujer | 53.54172 |
| Hombre | 46.45828 |
porcentaje_SEXO= sort(porcentaje_SEXO, decreasing = TRUE)
barplot(porcentaje_SEXO, names.arg = NULL, ylab = "Porcentaje", xlab = "SEXO",
main = "Porcentaje CCAA Total", col = "skyblue")
Desciptivos variable edad
# Variable: EDAD
summary(BBDD_resumen$EDAD)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 18.00 39.00 52.00 51.72 65.00 98.00
Descriptivos de las variables: P2:Escala de satisfacción (1-10) con el funcionamiento del sistema sanitario español
Tipo de servicio sanitario, público o privado, que utilizaría en caso de necesitar acudir a una consulta: p3_1: Consultas de médicos/as de cabecera (o de familia) y pediatría p3_2: Consultas de especialistas p3_3: Ingreso en hospital p3_4: Urgencias
P4: Modalidades de seguro sanitario público de los que se es titular o beneficiario/a
Escala de satisfacción (1-10) de diferentes servicios sanitarios públicos: P5ES_1: Consultas de atención primaria en centros de salud (médicos/as de familia o de cabecera) P5ES_2: Consultas de atención especializada (especialistas) P5ES_3: Urgencias en hospitales públicos P5ES_4: Urgencias 061 y 112 P5ES_5 :Urgencias de centros de atención primaria P5ES_6: Ingreso y asistencia en hospitales públicos
# Variables P2, P3_1, P3_2, P3_3, P3_4, P4, P5ES_1, P5ES_2, P5ES_3, P5ES_4, P5ES_5, P5ES_6
lapply(BBDD_resumen %>%
select(P2, starts_with("P3"), P4, starts_with("P5ES")), summary)
## $P2
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1.000 5.000 7.000 6.921 8.000 99.000
##
## $P3_1
## 1 2 3 8 9
## 5182 2041 145 59 27
##
## $P3_2
## 1 2 3 8 9
## 4301 2829 224 65 35
##
## $P3_3
## 1 2 3 8 9
## 5715 1435 171 98 35
##
## $P3_4
## 1 2 3 8 9
## 5446 1763 136 82 27
##
## $P4
## 1 2 3 4 5 8 9
## 6708 215 387 27 92 23 2
##
## $P5ES_1
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1.000 5.000 7.000 7.175 8.000 99.000
##
## $P5ES_2
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1.000 5.000 7.000 9.445 8.000 99.000
##
## $P5ES_3
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1.000 5.000 7.000 9.736 8.000 99.000
##
## $P5ES_4
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1.00 7.00 9.00 33.89 98.00 99.00
##
## $P5ES_5
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1.00 5.00 7.00 15.22 8.00 99.00
##
## $P5ES_6
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1.00 6.00 8.00 14.43 9.00 99.00
Descriptivos de la variable p6A, modo de consulta al médico de cabecera o medicina general o de familia en el último año: 1.- En la consulta 2.- Por teléfono 3.- En el domicilio 4.- Por correo electrónico o chat 5.- Por videoconsulta 8.- N.R./No está seguro/a 9.- N.C. 0.- N.P.
# Variable: P6A
table(BBDD_resumen$P6A)
##
## 0 1 2 3 4 5 8 9
## 1920 3695 1740 30 30 11 16 12
Descriptivos de la variable P6C01: Días transcurridos hasta le/la atendió el/la médico/a de cabecera de la sanidad pública la última vez.
# Variable: P6C01
summary(BBDD_resumen$P6C01)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.000 0.000 0.000 4.787 7.000 99.000
Descriptivos de la avriable ESTSALUD, percención que el usuario tiene sobre su estado de salud.
# Variable: ESTSALUD
table(BBDD_resumen$ESTSALUD)
##
## 1 2 3 4 5 8 9
## 1515 4072 1537 227 79 9 15
Variable que recoge la escala de autoubicación ideológica del usuario
# Variable: ESCIDEOL
table(BBDD_resumen$ESCIDEOL)
##
## 1 2 3 4 5 6 7 8 9 10 98 99
## 649 341 781 592 1864 463 447 425 137 483 439 833
#LAS DE ESCALA LAS PASE A FORMATO FACTOR, PERO QUIZAS SEA CONVENIENTE TRATARLAS COMO NUMERICAS?
summary(BBDD_resumen %>% select_if(is.numeric))
## REGISTRO EDAD P2 P5ES_1
## Min. : 64 Min. :18.00 Min. : 1.000 Min. : 1.000
## 1st Qu.: 2163 1st Qu.:39.00 1st Qu.: 5.000 1st Qu.: 5.000
## Median : 4053 Median :52.00 Median : 7.000 Median : 7.000
## Mean : 4540 Mean :51.72 Mean : 6.921 Mean : 7.175
## 3rd Qu.: 6477 3rd Qu.:65.00 3rd Qu.: 8.000 3rd Qu.: 8.000
## Max. :12873 Max. :98.00 Max. :99.000 Max. :99.000
## P5ES_2 P5ES_3 P5ES_4 P5ES_5
## Min. : 1.000 Min. : 1.000 Min. : 1.00 Min. : 1.00
## 1st Qu.: 5.000 1st Qu.: 5.000 1st Qu.: 7.00 1st Qu.: 5.00
## Median : 7.000 Median : 7.000 Median : 9.00 Median : 7.00
## Mean : 9.445 Mean : 9.736 Mean :33.89 Mean :15.22
## 3rd Qu.: 8.000 3rd Qu.: 8.000 3rd Qu.:98.00 3rd Qu.: 8.00
## Max. :99.000 Max. :99.000 Max. :99.00 Max. :99.00
## P5ES_6 P6C01
## Min. : 1.00 Min. : 0.000
## 1st Qu.: 6.00 1st Qu.: 0.000
## Median : 8.00 Median : 0.000
## Mean :14.43 Mean : 4.787
## 3rd Qu.: 9.00 3rd Qu.: 7.000
## Max. :99.00 Max. :99.000
#Realizaremos un análisis descriptivo más pormenorizado de la variable ESTSALUD, generando una tabla que reuna las frecuencias absolutas y relativas de las diferentes respuestas
# Se trata de una variable cualitativa ordinal. Con la funcion table anterior hemos visto que toma valores discretos entre el 1 y 5 y valores de 8 y 9. Una forma óptima de analizarla es con tablas de frecuencias relativas, absolutas y acumuladas.
#Procedemos a hacerlas
Frec.abs=table(BBDD_resumen$ESTSALUD)
Frec.rel=round(prop.table(Frec.abs),2)
Frec.abs.acum=cumsum(Frec.abs)
Frec.rel.acum=cumsum(Frec.rel)
tabla=cbind(Frec.abs,Frec.rel ,Frec.abs.acum, Frec.rel.acum )
etiquetas=c("Muy bueno","Bueno","Regular","Malo","Muy malo","N.S.","N.C.")
rownames(tabla)=etiquetas
#Para añadir el título tendremos que añadir el paquete "KableExtra"
kable( tabla,row.names=TRUE, align ="c")%>%
add_header_above(c("ESTADO DE SALUD"," "," "," "," "))
| Frec.abs | Frec.rel | Frec.abs.acum | Frec.rel.acum | |
|---|---|---|---|---|
| Muy bueno | 1515 | 0.20 | 1515 | 0.20 |
| Bueno | 4072 | 0.55 | 5587 | 0.75 |
| Regular | 1537 | 0.21 | 7124 | 0.96 |
| Malo | 227 | 0.03 | 7351 | 0.99 |
| Muy malo | 79 | 0.01 | 7430 | 1.00 |
| N.S. | 9 | 0.00 | 7439 | 1.00 |
| N.C. | 15 | 0.00 | 7454 | 1.00 |
# Esta parte no sé si sería correcta: las respuestas NC y NS no nos aportan nada en ver el estado de salud general
#Procedemos a eliminar los valores iguales a 8 y 9
Est_salud_sin_NC_NS=BBDD_resumen$ESTSALUD[!(BBDD_resumen$ESTSALUD %in%c(8,9))]
str(Est_salud_sin_NC_NS)
## Factor w/ 7 levels "1","2","3","4",..: 3 2 2 2 3 2 1 3 3 1 ...
length(unique(Est_salud_sin_NC_NS))
## [1] 5
table(Est_salud_sin_NC_NS)
## Est_salud_sin_NC_NS
## 1 2 3 4 5 8 9
## 1515 4072 1537 227 79 0 0
Frec.abs=table(Est_salud_sin_NC_NS)
Frec.rel=round(prop.table(Frec.abs),2)
Frec.abs.acum=cumsum(Frec.abs)
Frec.rel.acum=cumsum(Frec.rel)
tabla=cbind(Frec.abs,Frec.rel ,Frec.abs.acum, Frec.rel.acum )
etiquetas=c("Muy bueno","Bueno","Regular","Malo","Muy malo","","")
rownames(tabla)=etiquetas
kable( tabla,row.names=TRUE)%>%
add_header_above(c("ESTADO DE SALUD"," "," "," "," "))
| Frec.abs | Frec.rel | Frec.abs.acum | Frec.rel.acum | |
|---|---|---|---|---|
| Muy bueno | 1515 | 0.20 | 1515 | 0.20 |
| Bueno | 4072 | 0.55 | 5587 | 0.75 |
| Regular | 1537 | 0.21 | 7124 | 0.96 |
| Malo | 227 | 0.03 | 7351 | 0.99 |
| Muy malo | 79 | 0.01 | 7430 | 1.00 |
| 0 | 0.00 | 7430 | 1.00 | |
| 0 | 0.00 | 7430 | 1.00 |
##No me gusta como se queda ya que quedan los valores 8 y 9 pero con 0 registros.
##Podemos eliminar esta parte del código si no nos convence
#Análisis descriptivo de la variable EDAD
# Se trata de una variable cuantitativa discreta.
# La representaremos con un gáfico de barras para ver la distribución de esta
intervalos=cut(BBDD_resumen$EDAD, breaks=seq(18,98,by=10),include.lowest=TRUE)
barplot((table(intervalos)),main="Distribución de edades",xlab="Grupo de edad",ylab = "Frecuencia", col = "skyblue")
#Análisis descriptivo de la variable EDAD
#Diagrama de cajas
boxplot_edad=boxplot((table(intervalos)),main="Distribución de edades",xlab="Grupo de edad",ylab = "Frecuencia", col = "skyblue")
boxplot_edad$out
## numeric(0)
#vemos que no hay ningún valor atípico
#Análisis descriptivo de la variable EDAD
#Desviación tipica
des_tipica_edad=sd(BBDD_resumen$EDAD)*sqrt(length(BBDD_resumen$EDAD)-1)/sqrt(length(BBDD_resumen$EDAD))
des_tipica_edad
## [1] 16.80206
#varianza
des_tipica_edad^2
## [1] 282.3091
# Variable: P6C01
str(BBDD_resumen$P6C01)
## num [1:7454] 3 0 0 0 0 0 15 0 15 7 ...
summary(BBDD_resumen$P6C01)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.000 0.000 0.000 4.787 7.000 99.000
#se trata de una variable cuantitativa discreta
# Variable: P6C01
unique(BBDD_resumen$P6C01)
## [1] 3 0 15 7 2 14 10 4 8 11 5 28 30 19 13 98 9 6 12 20 27 16 18 60 90
## [26] 25 22 17 99 21 24 33 31 50 45 37 40 23 55 32 61 1 26
length(unique(BBDD_resumen$P6C01))
## [1] 43
#La variable P6C01 toma 43 valores diferentes entre 0 y 99
# Variable: P6C01
rangos=cut(BBDD_resumen$P6C01,breaks=seq(0,100,by=20),include.lowest =TRUE )
barplot(table(rangos))
#vemos que la gran mayoria de datos se concentran en los valores inferiores
# Variable: P6C01
#Ahora tenemos que el valor medio es 8,3 días para recibir la atención.
Tras un extenso estudio de las variables implicadas en esta investigación y la puesta en práctica de los supuestos de normalidad y distintos modelos de regresión lineal, se ha llegado a la conclusión de que, antes de aplicar estos modelos, es necesario transformar y depurar las variables.
En este primer caso se ha recodificado las categorías “No sabe” y “No contesta” en NA para que no participen en los modelos, así como algunos outliers (casos atípicos aislados) que hemos encontrado.
#quitar ns/nc, estan catalogados como categorias, asi que vamos a pasarlos a NA
BBDD_filtros=BBDD_resumen
BBDD_filtros$P5ES_1[BBDD_filtros$P5ES_1 %in% c(98, 99)] <- NA
BBDD_filtros$P5ES_2[BBDD_filtros$P5ES_2 %in% c(98, 99)] <- NA
BBDD_filtros$P5ES_3[BBDD_filtros$P5ES_3 %in% c(98, 99)] <- NA
BBDD_filtros$P5ES_4[BBDD_filtros$P5ES_4 %in% c(98, 99)] <- NA
BBDD_filtros$P5ES_5[BBDD_filtros$P5ES_5 %in% c(98, 99)] <- NA
BBDD_filtros$P2[BBDD_filtros$P2 %in% c(98, 99)] <- NA
BBDD_filtros$P6C01[BBDD_filtros$P6C01 %in% c(0, 98, 99, 90, 61, 60)] <- NA
BBDD_filtros$ESCIDEOL[BBDD_filtros$ESCIDEOL %in% c(98,99)] <- NA
Sin embargo, estas no son las únicas modificaciones aplicadas. Ya que se han encontrado una serie de respuestas incongruentes entres las diferentes variables y que se han procedido a eliminar del estudio.
# Eliminar casos donde P2 > 8 y P6C01 > 20
BBDD_filtros <- BBDD_filtros[!(BBDD_filtros$P2 > 6 & BBDD_filtros$P6C01 > 20), ]
BBDD_filtros <- BBDD_filtros[!(BBDD_filtros$P2 < 4 & BBDD_filtros$P6C01 < 10), ]
BBDD_filtros <- BBDD_filtros[!(BBDD_filtros$P5ES_1 > 6 & BBDD_filtros$P6C01 > 20), ]
BBDD_filtros <- BBDD_filtros[!(BBDD_filtros$P5ES_1 < 4 & BBDD_filtros$P6C01 < 10), ]
# Eliminar casos donde P5ES_1, P5ES_2, P5ES_3, P5ES_4, y P5ES_5 son mayores que 5 y P2 es menor que 4
BBDD_filtros <- BBDD_filtros[!(BBDD_filtros$P5ES_1 > 5 &
BBDD_filtros$P5ES_2 > 5 &
BBDD_filtros$P5ES_3 > 5 &
BBDD_filtros$P5ES_4 > 5 &
BBDD_filtros$P5ES_5 > 5 &
BBDD_filtros$P2 < 5), ]
BBDD_filtros <- BBDD_filtros[!(BBDD_filtros$P5ES_1 < 4 &
BBDD_filtros$P5ES_2 < 4 &
BBDD_filtros$P5ES_3 < 4 &
BBDD_filtros$P5ES_4 < 4 &
BBDD_filtros$P5ES_5 < 4 &
BBDD_filtros$P2 > 6), ]
En el ámbito del análisis estadístico, la evaluación de la normalidad de los datos desempeña un papel crucial para la aplicación de diversos métodos y modelos estadísticos.
Para visualizar y comprender la distribución de los datos, dos herramientas fundamentales que emplearemos son el histograma y el Quantile-Quantile Plot (QQ Plot). El histograma proporciona una representación gráfica de la distribución de frecuencias, permitiendo identificar patrones, simetrías y posibles desviaciones de la normalidad. Por otro lado, el QQ Plot ofrece una comparación más detallada entre la distribución de los datos y la distribución normal teórica, facilitando la identificación de posibles discrepancias en diferentes partes de la distribución.
# La representaremos con un gáfico de barras para ver la distribución de esta variable.
library(ggplot2)
# Crea el barplot
ggplot(BBDD_filtros, aes(x = P2)) +
geom_bar(fill = "blue", alpha = 0.7) +
labs(title = "Distribución de la valoración global", x = "Valoración", y = "Frecuencia") +
theme_minimal()
## Warning: Removed 3303 rows containing non-finite values (`stat_count()`).
summary(BBDD_filtros$P2)
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## 1.000 5.000 6.000 6.173 7.000 10.000 3303
P2_frecuencias <- table(BBDD_filtros$P2)
# Muestra las frecuencias
print(P2_frecuencias)
##
## 1 2 3 4 5 6 7 8 9 10
## 64 56 65 336 716 852 700 524 139 146
Los siguientes estadisticos y graficos son para estudiar la normalidad
# Ejemplo de un QQ plot en R
qqnorm(BBDD_filtros$P2)
qqline(BBDD_filtros$P2)
Los resultados indican que la variable en cuestión tiene una ligera
asimetría hacia la izquierda (asimetría negativo), ya que el valor de
skewness es -0.23. Esto significa que la cola izquierda de la
distribución es ligeramente más larga o pesada que la cola derecha. La
magnitud del valor de skewness es relativamente pequeña, lo que sugiere
que la asimetría no es pronunciada.
En cuanto a la curtosis, el valor es 0.4379441. Este valor positivo indica que la distribución de la variable es más puntiaguda (leptocúrtica) en comparación con una distribución normal. En otras palabras, hay una concentración relativamente mayor de datos en torno a la media, lo que implica colas más pesadas y extremos más pronunciados en comparación con una distribución normal estándar.
En resumen, los resultados muestran que la variable presenta una leve asimetría hacia la izquierda y una distribución más puntiaguda de lo que se esperaría en una distribución normal. Estos hallazgos son esenciales para comprender la forma de la distribución y pueden influir en la selección de métodos estadísticos adecuados. Es recomendable considerar estas características al realizar análisis posteriores y al interpretar los resultados en el contexto de la variable estudiada.
library(e1071)
# Crear un subconjunto excluyendo filas con valores faltantes en la columna P2
BBDD_filtros_subset <- subset(BBDD_filtros, !is.na(P2))
# Calcular la sesgo y la curtosis en el subconjunto
library(e1071)
skew_val <- skewness(BBDD_filtros_subset$P2)
kurt_val <- kurtosis(BBDD_filtros_subset$P2)
print(skew_val)
## [1] -0.2306963
print(kurt_val)
## [1] 0.4379441
# La representaremos con un gáfico de barras para ver la distribución de esta variable.
library(ggplot2)
# Crea el barplot
ggplot(BBDD_filtros, aes(x = P5ES_1)) +
geom_bar(fill = "blue", alpha = 0.7) +
labs(title = "Distribución de la valoración con las consultas de atención primaria en centros de salud (médicos/as de familia o de cabecera)", x = "Valoración", y = "Frecuencia") +
theme_minimal()
## Warning: Removed 3303 rows containing non-finite values (`stat_count()`).
ggplot(BBDD_filtros, aes(x = P5ES_2)) +
geom_bar(fill = "blue", alpha = 0.7) +
labs(title = "Distribución de la valoración con las consultas de atención primaria en centros de salud (médicos/as de familia o de cabecera)", x = "Valoración", y = "Frecuencia") +
theme_minimal()
## Warning: Removed 3373 rows containing non-finite values (`stat_count()`).
ggplot(BBDD_filtros, aes(x = P5ES_3)) +
geom_bar(fill = "blue", alpha = 0.7) +
labs(title = "Distribución de la valoración con las consultas de atención primaria en centros de salud (médicos/as de familia o de cabecera)", x = "Valoración", y = "Frecuencia") +
theme_minimal()
## Warning: Removed 3399 rows containing non-finite values (`stat_count()`).
ggplot(BBDD_filtros, aes(x = P5ES_4)) +
geom_bar(fill = "blue", alpha = 0.7) +
labs(title = "Distribución de la valoración con las consultas de atención primaria en centros de salud (médicos/as de familia o de cabecera)", x = "Valoración", y = "Frecuencia") +
theme_minimal()
## Warning: Removed 4368 rows containing non-finite values (`stat_count()`).
ggplot(BBDD_filtros, aes(x = P5ES_5)) +
geom_bar(fill = "blue", alpha = 0.7) +
labs(title = "Distribución de la valoración con las consultas de atención primaria en centros de salud (médicos/as de familia o de cabecera)", x = "Valoración", y = "Frecuencia") +
theme_minimal()
## Warning: Removed 3589 rows containing non-finite values (`stat_count()`).
La regresión lineal es una técnica estadística fundamental que se utiliza para modelar la relación entre una variable dependiente y una o más variables independientes. En su forma más simple, la regresión lineal asume una relación lineal entre las variables, lo que permite prever o explicar el valor de la variable dependiente en función de las variables independientes. Este método es ampliamente utilizado en diversas disciplinas para realizar predicciones y entender la relación entre variables.
A pesar de que los modelos de regresión fueron más de los aquí citados, vamos a explicar los que mayor repercusión tuvieron en la investigación:
Basándonos en un nivel de significancia de 0.05, los resultados sugieren que tanto los coeficientes individuales como el modelo en su conjunto son estadísticamente significativos.
El coeficiente asociado con la variable independiente P6C01 (días tanscurridos) es -0.1183.Esto indica que, en promedio, por cada día que pasa (unidad que P6C01 aumenta) la valoración global disminuye en 0,1183 unidades de satisfacción. Por lo que para que la satisfacción baje un punto entero, tendrían que transcurrir casi 10 días.
El coeficiente de determinación (R2) de 0.1423 indica que aproximadamente el 14.23% de la variabilidad en la variable dependiente P2 puede ser explicada por la variable independiente P6C01 P6C01. Es importante tener en cuenta que R2 varía entre 0 y 1, donde 0 indica que el modelo no explica ninguna variabilidad y 1 indica que el modelo explica toda la variabilidad. En este contexto, aunque R 2 no es muy alto, sugiere que existe una asociación entre los días transcurridos y la valoración global.
modelo1=lm(P2~P6C01, BBDD_filtros)
modelo1
##
## Call:
## lm(formula = P2 ~ P6C01, data = BBDD_filtros)
##
## Coefficients:
## (Intercept) P6C01
## 7.2793 -0.1183
summary(modelo1)
##
## Call:
## lm(formula = P2 ~ P6C01, data = BBDD_filtros)
##
## Residuals:
## Min 1Q Median 3Q Max
## -5.0967 -1.0428 0.0755 1.1937 4.4946
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 7.279293 0.052136 139.62 <2e-16 ***
## P6C01 -0.118258 0.005339 -22.15 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.74 on 2958 degrees of freedom
## (3941 observations deleted due to missingness)
## Multiple R-squared: 0.1423, Adjusted R-squared: 0.142
## F-statistic: 490.6 on 1 and 2958 DF, p-value: < 2.2e-16
plot(P2~P6C01, BBDD_filtros)
abline(lm(P2~P6C01, BBDD_filtros), col="blue")
table(BBDD_filtros$P6C01)
##
## 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
## 2 414 460 261 199 76 536 100 28 241 11 45 7 126 268 9 10 9 2 61
## 21 22 23 24 25 26 27 28 30 31 32 33 37 40 45 50 55
## 33 1 1 1 6 1 1 5 32 1 2 1 1 2 5 1 1
El coeficiente de determinación (R2) indica que aproximadamente el 32.2% de la variabilidad en P2 puede ser explicada por la variable independiente P5ES_5. Esto sugiere que el modelo tiene un mejor ajuste en comparación con el modelo anterior, ya que una mayor proporción de la variabilidad en la variable dependiente es explicada por la variable independiente.
Estos resultados sugieren que, en promedio, por cada punto que aumenta la valoración de la asistencia a Urgencias en centros de atención primaria, la valoración global aumenta en 0,4669 puntos. Lo que, en comparación con los otros servicios del sistema sanitario, tiene una incidencia y un peso importante.
En resumen, el modelo de regresión lineal sugiere una relación significativa entre P2 y P5ES_5, y el modelo tiene un buen ajuste, explicando el 32.2% de la variabilidad en P2. Estos resultados proporcionan información valiosa para comprender la asociación entre las variables y pueden ser fundamentales en la toma de decisiones y la interpretación de los datos.
modelo2=lm(P2~P5ES_5, BBDD_filtros)
modelo2
##
## Call:
## lm(formula = P2 ~ P5ES_5, data = BBDD_filtros)
##
## Coefficients:
## (Intercept) P5ES_5
## 3.2752 0.4669
plot(P2~P5ES_5, BBDD_filtros)
abline(lm(P2~P5ES_5, BBDD_filtros), col="blue")
summary(modelo2)
##
## Call:
## lm(formula = P2 ~ P5ES_5, data = BBDD_filtros)
##
## Residuals:
## Min 1Q Median 3Q Max
## -6.0101 -1.0101 -0.0101 0.9899 6.2579
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 3.27521 0.07704 42.52 <2e-16 ***
## P5ES_5 0.46686 0.01178 39.65 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.469 on 3310 degrees of freedom
## (3589 observations deleted due to missingness)
## Multiple R-squared: 0.322, Adjusted R-squared: 0.3218
## F-statistic: 1572 on 1 and 3310 DF, p-value: < 2.2e-16
Estos resultados sugieren que, en promedio, por cada día que transcurre (unidad que P6C01 aumenta), la valoración del servicio de atención primaria (P5ES_1) disminuye en 0.1486 unidades.
El coeficiente de determinación (R2) indica que aproximadamente el 17.3% de la variabilidad en P5ES_1 puede ser explicada por la variable independiente P6C01. Aunque el R2 no es muy alto, sugiere que existe una asociación entre P6C01 y P5ES_1, y el modelo tiene un ajuste razonable.
modelo5=lm(P5ES_1~P6C01, BBDD_filtros)
modelo5
##
## Call:
## lm(formula = P5ES_1 ~ P6C01, data = BBDD_filtros)
##
## Coefficients:
## (Intercept) P6C01
## 7.4755 -0.1486
table(BBDD_filtros$P5ES_1)
##
## 1 2 3 4 5 6 7 8 9 10
## 108 61 80 421 760 697 536 515 205 215
plot(P5ES_1~P6C01, BBDD_filtros)
abline(lm(P5ES_1~P6C01, BBDD_filtros), col="blue")
summary(modelo5)
##
## Call:
## lm(formula = P5ES_1 ~ P6C01, data = BBDD_filtros)
##
## Residuals:
## Min 1Q Median 3Q Max
## -4.9899 -1.4356 -0.0298 1.5644 5.4958
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 7.475548 0.058334 128.15 <2e-16 ***
## P6C01 -0.148566 0.005974 -24.87 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.947 on 2958 degrees of freedom
## (3941 observations deleted due to missingness)
## Multiple R-squared: 0.1729, Adjusted R-squared: 0.1727
## F-statistic: 618.5 on 1 and 2958 DF, p-value: < 2.2e-16
Cuando probamos modelos de regresión de la valoración global y el estado de salud de los encuestados no existen modelos significativos a nivel estadístico. Pero sí que observamos que, normalmente, las personas con buen estado de salud tienen una media superior a las personas que consideran su estado de salud como malo.
# Crear la variable P4_1
BBDD_filtros$salud_bueno = ifelse(BBDD_filtros$ESTSALUD == 1, 1,ifelse(BBDD_filtros$ESTSALUD == 2,1, 0))
BBDD_filtros$salud_malo = ifelse(BBDD_filtros$ESTSALUD == 4, 1,ifelse(BBDD_filtros$ESTSALUD == 5,1, 0))
BBDD_filtros$salud_bueno=as.factor(BBDD_filtros$salud_bueno)
BBDD_filtros$salud_malo=as.factor(BBDD_filtros$salud_malo)
media_p2_por_salud_BUENO <- aggregate(P2 ~ salud_bueno, data = BBDD_filtros, FUN = mean)
# Mostrar el resultado
print(media_p2_por_salud_BUENO)
## salud_bueno P2
## 1 0 5.938272
## 2 1 6.259711
media_p2_por_salud_MALO <- aggregate(P2 ~ salud_malo, data = BBDD_filtros, FUN = mean)
# Mostrar el resultado
print(media_p2_por_salud_MALO)
## salud_malo P2
## 1 0 6.188061
## 2 1 5.816327
modelo6=lm(P2~salud_bueno, BBDD_filtros)
modelo6
##
## Call:
## lm(formula = P2 ~ salud_bueno, data = BBDD_filtros)
##
## Coefficients:
## (Intercept) salud_bueno1
## 5.9383 0.3214
table(BBDD_filtros$P2)
##
## 1 2 3 4 5 6 7 8 9 10
## 64 56 65 336 716 852 700 524 139 146
plot(P2~salud_bueno, BBDD_filtros)
abline(lm(P2~salud_bueno, BBDD_filtros), col="blue")
summary(modelo6)
##
## Call:
## lm(formula = P2 ~ salud_bueno, data = BBDD_filtros)
##
## Residuals:
## Min 1Q Median 3Q Max
## -5.2597 -1.2597 -0.2597 1.0617 4.0617
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 5.93827 0.05697 104.24 < 2e-16 ***
## salud_bueno1 0.32144 0.06668 4.82 1.49e-06 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.776 on 3596 degrees of freedom
## (3303 observations deleted due to missingness)
## Multiple R-squared: 0.00642, Adjusted R-squared: 0.006144
## F-statistic: 23.24 on 1 and 3596 DF, p-value: 1.491e-06
modelo6=lm(P2~salud_malo, BBDD_filtros)
modelo6
##
## Call:
## lm(formula = P2 ~ salud_malo, data = BBDD_filtros)
##
## Coefficients:
## (Intercept) salud_malo1
## 6.1881 -0.3717
table(BBDD_filtros$P2)
##
## 1 2 3 4 5 6 7 8 9 10
## 64 56 65 336 716 852 700 524 139 146
plot(P2~salud_malo, BBDD_filtros)
abline(lm(P2~salud_malo, BBDD_filtros), col="blue")
summary(modelo6)
##
## Call:
## lm(formula = P2 ~ salud_malo, data = BBDD_filtros)
##
## Residuals:
## Min 1Q Median 3Q Max
## -5.1881 -1.1881 -0.1881 0.8119 4.1837
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 6.1881 0.0303 204.193 <2e-16 ***
## salud_malo1 -0.3717 0.1499 -2.479 0.0132 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.78 on 3596 degrees of freedom
## (3303 observations deleted due to missingness)
## Multiple R-squared: 0.001707, Adjusted R-squared: 0.001429
## F-statistic: 6.147 on 1 and 3596 DF, p-value: 0.01321
Los que presentan una mayor satisfacción con el sistema sanitario son los que cuentan con una modalidad de mutualidad del estado pero con atención por la sanidad pública, mientras que no existe gran diferencia entre los que tienen seguro privado o público.
BBDD_filtros$P2_RECO = ifelse(BBDD_filtros$P2 == 1, "Satisfacción baja (1-4)",ifelse(BBDD_filtros$P2 == 2, "Satisfacción baja (1-4)", ifelse(BBDD_filtros$P2 == 3, "Satisfacción baja (1-4)",ifelse(BBDD_filtros$P2 == 4, "Satisfacción baja (1-4)", ifelse(BBDD_filtros$P2 == 5, "Satisfacción media (5-6)",ifelse(BBDD_filtros$P2 == 6,"Satisfacción media (5-6)", ifelse(BBDD_filtros$P2 == 7, "Satisfacción alta (7-10)", ifelse(BBDD_filtros$P2 == 8, "Satisfacción alta (7-10)", ifelse(BBDD_filtros$P2 == 9, "Satisfacción alta (7-10)", ifelse(BBDD_filtros$P2 == 10, "Satisfacción alta (7-10)", NA))))))))))
BBDD_filtros$P4_RECO = ifelse(BBDD_filtros$P4 == 1, "Seguridad Social",ifelse(BBDD_filtros$P4 == 2, "Mutualidad con att. por la sanidad pública", ifelse(BBDD_filtros$P4 == 3, "Mutualidad con att. por la sanidad privada",ifelse(BBDD_filtros$P4 == 4, "Otras respuestas", ifelse(BBDD_filtros$P4 == 5, "Otras respuestas",ifelse(BBDD_filtros$P4 == 8,NA, ifelse(BBDD_filtros$P4 == 9, NA,NA)))))))
# Crear una tabla de contingencia
tabla_contingencia_P4= table(BBDD_filtros$P2_RECO, BBDD_filtros$P4_RECO)
tabla_contingencia_P4= prop.table(tabla_contingencia_P4, margin = 2)*100
print(tabla_contingencia_P4)
##
## Mutualidad con att. por la sanidad privada
## Satisfacción alta (7-10) 17.000000
## Satisfacción baja (1-4) 16.000000
## Satisfacción media (5-6) 67.000000
##
## Mutualidad con att. por la sanidad pública
## Satisfacción alta (7-10) 56.880734
## Satisfacción baja (1-4) 9.174312
## Satisfacción media (5-6) 33.944954
##
## Otras respuestas Seguridad Social
## Satisfacción alta (7-10) 28.571429 42.334233
## Satisfacción baja (1-4) 14.285714 14.581458
## Satisfacción media (5-6) 57.142857 43.084308
# Definir colores según tu descripción
colores <- c( "lightgreen","lightcoral", "lightgray")
# Convertir la tabla de contingencia a un data frame
df_contingencia_P4 <- as.data.frame(tabla_contingencia_P4)
# Asegúrate de que Var2 tiene el mismo número de categorías que colores
num_categorias <- length(unique(df_contingencia_P4$Var2))
colores_ajustados <- colores[1:num_categorias]
# Crear el gráfico de barras apiladas con ggplot2
ggplot(df_contingencia_P4, aes(x = Var2, y = Freq, fill = Var1)) +
geom_bar(stat = "identity") +
labs(title = "Satisfacción global por modalidad",
x = "Categoría P4",
y = "Porcentaje") +
scale_fill_manual(values = colores) +
theme_minimal() +
theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1))
En general, todos los modos de consulta presentan % muy parecidos. Sin embargo, destaca la alta satisfacción global de las personas que son atendidas por videoconferencias (puede deberse seguramente a que son menos respuestas) se puede apreciar tambien un ligero aumento de la satisfacción baja entre los que son atendidos por correo electrónico
BBDD_filtros$P6A_RECO = ifelse(BBDD_filtros$P6A == 1, "En la consulta",ifelse(BBDD_filtros$P6A == 2, "Por teléfono", ifelse(BBDD_filtros$P6A == 3, "En el domicilio",ifelse(BBDD_filtros$P6A == 4, "Por correo electrónico o chat", ifelse(BBDD_filtros$P6A == 5, "Por videoconferencia",NA)))))
# Crear una tabla de contingencia
tabla_contingencia_P6A= table(BBDD_filtros$P2_RECO, BBDD_filtros$P6A_RECO)
tabla_contingencia_P6A= prop.table(tabla_contingencia_P6A, margin = 2)*100
print(tabla_contingencia_P6A)
##
## En el domicilio En la consulta
## Satisfacción alta (7-10) 28.57143 48.87955
## Satisfacción baja (1-4) 57.14286 13.49206
## Satisfacción media (5-6) 14.28571 37.62838
##
## Por correo electrónico o chat Por teléfono
## Satisfacción alta (7-10) 42.85714 42.77457
## Satisfacción baja (1-4) 14.28571 14.83622
## Satisfacción media (5-6) 42.85714 42.38921
##
## Por videoconferencia
## Satisfacción alta (7-10) 50.00000
## Satisfacción baja (1-4) 0.00000
## Satisfacción media (5-6) 50.00000
# Convertir la tabla de contingencia a un data frame
df_contingencia_P6A <- as.data.frame(tabla_contingencia_P6A)
num_categorias <- length(unique(df_contingencia_P6A$Var2))
colores_ajustados <- colores[1:num_categorias]
# Definir colores según tu descripción
colores <- c( "lightgreen","lightcoral", "lightgray")
# Crear el gráfico de barras apiladas con ggplot2
ggplot(df_contingencia_P6A, aes(x = Var2, y = Freq, fill = Var1)) +
geom_bar(stat = "identity") +
labs(title = "Valoración por tipo de consulta",
x = "Categoría P6",
y = "Porcentaje") +
scale_fill_manual(values = colores) +
theme_minimal() +
theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1))
Mediante modelos de regresión hemos intentado buscar relaciones entre la valoración del usuario y diversas variables:
Valoración global con tiempo transcurrido hasta la cita.
Valoración global por valoración de los diferentes servicios
Valoración del servicio de atención primaria y tiempo transcurrido desde la cita hasta la atención médica
Valoración global y el estado de salud
Se han obtenido evidencias estadísticas de relación entre estas variables, pero con resultados de r muy bajos. No se dan relaciones muy fuertes.
Con modelos de correlación, hemos intentado buscar relación entre la valoración general del usuario respecta a:
Correlacion entre la valoración global y las diferentes modalidades de seguro sanitario
Correlacion entre la valoración global y los modos de consulta