1. Introduccion

“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).

2. Objetivos

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.

3. Analisis

3.1 Preparación de la base de datos

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 ...

3.2 Análisis descriptivo

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()
Distribución por comunidad autónoma
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()
Distribución por comunidad autónoma
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"," "," "," "," "))
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"," "," "," "," "))
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.

3.3 Transformación y depuración de los datos

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), ]

3.4 Normalidad estadística

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()`).

3.5 Modelos de regresión

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:

3.5.1 Valoración global con tiempo transcurrido hasta la cita

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

3.5.2 Valoración global por valoración de los diferentes servicios

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

3.5.3 Valoración del servicio de atención primaria y tiempo transcurrido desde la cita hasta la atención médica

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

3.5.4 Valoración global y el estado de salud

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

3.6 Correlaciones con la escala global

3.6.1 Correlacion entre la valoración global y las diferentes modalidades de seguro sanitario

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))

3.6.2 Correlacion entre la valoración global y los modos de consulta

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))

4. Conclusiones

Mediante modelos de regresión hemos intentado buscar relaciones entre la valoración del usuario y diversas variables:

  1. Valoración global con tiempo transcurrido hasta la cita.

  2. Valoración global por valoración de los diferentes servicios

  3. Valoración del servicio de atención primaria y tiempo transcurrido desde la cita hasta la atención médica

  4. 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:

  1. Correlacion entre la valoración global y las diferentes modalidades de seguro sanitario

  2. Correlacion entre la valoración global y los modos de consulta