Se cuenta con una base de datos de 200 individuos y 20 variables que miden características sociodemográficas y el comportamiento de la enfermedad Covid-19 y las siguientes variables:
Las variables dee P91 a P100 tienen como opciones de respuesta (1: Nunca, 2: Pocas veces, 3: Algunas veces, 4: La mayoría de veces, 5: Siempre)
Covid=read_excel("1. ComportamientoCovid.xlsx", sheet = "Datos") # Lectura de Datos en R
str(Covid) # Verificar la estructura de las variables
## tibble [200 × 20] (S3: tbl_df/tbl/data.frame)
## $ Comuna : chr [1:200] "Comuna 5" "COMUNA 22" "comuna 18" "comuna 17" ...
## $ Sexo : chr [1:200] "MUJER" "mujer" "Mujer" "Hombre" ...
## $ EdadCat : chr [1:200] "de 18 a 29 años" "de 30 a 59 años" "de 18 a 29 años" "de 30 a 59 años" ...
## $ Hijos : num [1:200] 0 0 0 0 0 0 0 0 0 0 ...
## $ NHijos : num [1:200] 0 0 0 0 0 0 0 0 0 0 ...
## $ NPersonas : num [1:200] 1 3 1 3 0 1 2 4 0 2 ...
## $ NHabitaciones: num [1:200] 4 1 2 1 2 5 1 2 2 2 ...
## $ Actitud : chr [1:200] "Positiva" "Negativa" "Positiva" "Negativa" ...
## $ Conocimiento : chr [1:200] "Alto" "Alto" "Alto" "Alto" ...
## $ P91 : num [1:200] 1 3 4 2 3 1 5 4 1 1 ...
## $ P92 : num [1:200] 1 2 5 5 4 1 2 2 2 2 ...
## $ P93 : num [1:200] 1 1 1 2 3 1 5 1 2 2 ...
## $ P94 : num [1:200] 2 2 5 5 4 1 5 1 2 5 ...
## $ P95 : num [1:200] 1 2 5 2 4 1 5 1 2 5 ...
## $ P96 : num [1:200] 1 3 2 2 1 1 5 4 2 5 ...
## $ P97 : num [1:200] 1 3 1 2 4 1 5 4 1 2 ...
## $ P98 : num [1:200] 1 1 2 1 4 1 1 2 1 4 ...
## $ P99 : num [1:200] 1 1 2 2 1 1 5 1 1 2 ...
## $ P100 : num [1:200] 1 1 1 1 1 1 1 1 1 1 ...
## $ ApoyoSocial : chr [1:200] "Alto" "Bajo" "Alto" "Alto" ...
attach(Covid)
Variables cuantitativas:
\(65\leq Age \leq 89\)
\(2.1\leq CaMol \leq 2.7\)
\(0.84\leq PhoMol \leq 1.5\)
\(30\leq ALP \leq 115\)
Variables cualitativas:
\(Sex=\left \{ 1=Male; 2=Female \right \}\)
\(Lab=\left \{ 1=Metpath; 2=Deyor; 3=St. Elizabeth's; 4=CB Rouche; 5=YOH; 6=Horizon\right \}\)
\(AgeG=\left \{ 65-69; 70-74; 75-79; 80-84; 85-89 \right \}\)
Aplicando las reglas de consistencia a la base de datos se tiene:
# Carga del archivo de reglas de validación
Rules = editrules::editfile("consistencia.txt")
# Conexión entre las reglas
plot(Rules)
# Verificación de las reglas sobres los datos
Valid_Data = editrules::violatedEdits(Rules, Covid)
summary(Valid_Data)
## Edit violations, 200 observations, 0 completely missing (0%):
##
## editname freq rel
## dat1 200 100%
## dat2 146 73%
## num1 142 71%
##
## Edit violations per record:
##
## errors freq rel
## 1 17 8.5%
## 2 78 39%
## 3 105 52.5%
Covid$ComunaN<-as.factor(substring(Covid$Comuna, 8, 9))
Covid$EdadCatN<-substring(Covid$EdadCat, 4, )
#Después de haber creado las nuevas variables, se borran las variables originales
Covid<-Covid[,-c(1,3)]
library(DT)
datatable(Covid)
visdat::vis_miss(Covid) # Una función que visualiza los datos faltantes en la hoja de calculo
## Warning: `gather_()` was deprecated in tidyr 1.2.0.
## Please use `gather()` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was generated.
# Una función que evalua e identifica los datos faltantes por variable e individuo
miss<-function(Datos,plot=T){
n=nrow(Datos);p=ncol(Datos)
names.obs<-rownames(Datos)
nobs.comp=sum(complete.cases(Datos)) # Cuenta los registros completos
Obs.comp=which(complete.cases(Datos)) # Identifica los registros completos
nobs.miss = sum(!complete.cases(Datos)) # Identifica los registros con datos faltantes.
Obs.miss=which(!complete.cases(Datos)) # Identifica los registros con datos faltantes.
Datos.NA<-is.na(Datos)
Var_Num<- sort(colSums(Datos.NA),decreasing=T)
Var_per<-round(Var_Num/n,3)
Obs_Num<-rowSums(Datos.NA)
names(Obs_Num)<-names.obs
Obs_Num<-sort(Obs_Num,decreasing=T)
Obs_per<-round(Obs_Num/p,3)
lista<-list(n.row = n, n.col = p,n.comp = nobs.comp,Obs.comp = Obs.comp,n.miss = nobs.miss,Obs.miss = Obs.miss, Var.n = Var_Num , Var.p = Var_per, Obs.n= Obs_Num, Obs.per= Obs_per)
if(plot){
#windows(height=10,width=15)
par(mfrow=c(1,2))
coord<-barplot(Var_per,plot=F)
barplot(Var_per,xaxt="n",horiz=T,yaxt="n",xlim=c(-0.2,1), ylim=c(0,max(coord)+1),main= "% datos faltantes por variable")
axis(2,at=coord,labels=names(Var_per), cex.axis=0.5,pos=0,las=2)
axis(1,seq(0,1,0.2),seq(0,1,0.2),pos=0)
coord<-barplot(Obs_per,plot=F)
barplot(Obs_per,xaxt="n",horiz=T,yaxt="n",xlim=c(-0.2,1), ylim=c(0,max(coord)+1),main= "% datos faltantes por registro")
axis(2,at=coord,labels=names(Obs_per),cex.axis=0.5,pos=0,las=2)
axis(1,seq(0,1,0.2),seq(0,1,0.2))
}
return(invisible(lista))
}
Summary.NA = miss(Covid) # Asignamos el resultado a un objeto lista para consultarlo
names(Covid)
## [1] "Sexo" "Hijos" "NHijos" "NPersonas"
## [5] "NHabitaciones" "Actitud" "Conocimiento" "P91"
## [9] "P92" "P93" "P94" "P95"
## [13] "P96" "P97" "P98" "P99"
## [17] "P100" "ApoyoSocial" "ComunaN" "EdadCatN"
level_Sexo=c("mujer"="Mujer","MUJER"="Mujer","mujeR"="Mujer","Hombre"="Hombre")
level_Hijos=c("0"="No","1"="Si")
level_EdadCat=c("18 a 29 años"="18 a 29 años","30 a 59 años"="30 a 59 años","60 años o mas"="60 años o mas")
level_Actitud=c("Positiva"="Positiva","Negativa"="Negativa")
level_Conocimiento=c("Alto"="Alto","Bajo"="Bajo")
level_ApoyoSocial=c("Alto"="Alto","Bajo"="Bajo")
Covid = transform(Covid,
Sexo=factor(dplyr::recode(Sexo,!!!level_Sexo)),
Hijos=factor(dplyr::recode(Hijos,!!!level_Hijos)),
EdadCatN=factor(dplyr::recode(EdadCatN, !!!level_EdadCat),levels=c("18 a 29 años","30 a 59 años","60 años o mas"),ordered=TRUE),
Actitud=factor(dplyr::recode(Actitud,!!!level_Actitud)),
Conocimiento=factor(dplyr::recode(Conocimiento,!!!level_Conocimiento),levels=c("Alto","Bajo"),ordered=TRUE),
ApoyoSocial=factor(dplyr::recode(ApoyoSocial,!!!level_ApoyoSocial),levels=c("Alto","Bajo"),ordered=TRUE)
)
summary(Covid)
Sexo | Hijos | NHijos | NPersonas | NHabitaciones | Actitud | Conocimiento | P91 | P92 | P93 | P94 | P95 | P96 | P97 | P98 | P99 | P100 | ApoyoSocial | ComunaN | EdadCatN | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Hombre: 53 | No:142 | Min. :0.000 | Min. :0.000 | Min. :1.000 | Negativa: 33 | Alto:182 | Min. :1.000 | Min. :1.000 | Min. :1.00 | Min. :1.000 | Min. :1.0 | Min. :1.000 | Min. :1.0 | Min. :1.00 | Min. :1.000 | Min. :1.000 | Alto:177 | 17 :51 | 18 a 29 años : 42 | |
Mujer :147 | Si: 58 | 1st Qu.:0.000 | 1st Qu.:1.000 | 1st Qu.:1.000 | Positiva:167 | Bajo: 18 | 1st Qu.:2.000 | 1st Qu.:2.000 | 1st Qu.:2.00 | 1st Qu.:2.000 | 1st Qu.:2.0 | 1st Qu.:2.000 | 1st Qu.:2.0 | 1st Qu.:2.00 | 1st Qu.:2.000 | 1st Qu.:2.000 | Bajo: 23 | 2 :33 | 30 a 59 años :135 | |
NA | NA | Median :0.000 | Median :2.000 | Median :2.000 | NA | NA | Median :4.000 | Median :5.000 | Median :5.00 | Median :5.000 | Median :5.0 | Median :5.000 | Median :5.0 | Median :5.00 | Median :5.000 | Median :2.500 | NA | 22 :23 | 60 años o mas: 23 | |
NA | NA | Mean :0.535 | Mean :2.285 | Mean :2.285 | NA | NA | Mean :3.375 | Mean :3.925 | Mean :3.69 | Mean :4.075 | Mean :3.9 | Mean :3.805 | Mean :3.6 | Mean :3.67 | Mean :3.475 | Mean :3.185 | NA | 19 :22 | NA | |
NA | NA | 3rd Qu.:1.000 | 3rd Qu.:3.000 | 3rd Qu.:3.000 | NA | NA | 3rd Qu.:5.000 | 3rd Qu.:5.000 | 3rd Qu.:5.00 | 3rd Qu.:5.000 | 3rd Qu.:5.0 | 3rd Qu.:5.000 | 3rd Qu.:5.0 | 3rd Qu.:5.00 | 3rd Qu.:5.000 | 3rd Qu.:5.000 | NA | 18 :10 | NA | |
NA | NA | Max. :5.000 | Max. :7.000 | Max. :6.000 | NA | NA | Max. :5.000 | Max. :5.000 | Max. :5.00 | Max. :5.000 | Max. :5.0 | Max. :5.000 | Max. :5.0 | Max. :5.00 | Max. :5.000 | Max. :5.000 | NA | 1 : 7 | NA | |
NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | (Other):54 | NA |
Exportando datos limpios de R a excel en formato CSV
## Datos limpios de R a excel
write.csv(Covid,"Covid.csv")
La distribución de los individuos por edad, apoyo social y sexo.
barplot(table(Covid$EdadCatN), main="Pacientes por grupo etario",names=levels(Covid$EdadCatN),cex.names=0.8,ylim = c(0,200),xlab="Edad",ylab="Frecuencia")
barplot(table(Covid$Sexo),main="Pacientes por sexo",col=c("blue","gray"),ylim=c(0,200),xlab="Sexo",ylab="Frecuencia")
barplot(table(Covid$ApoyoSocial),main="Pacientes por apoyo social",col=c("blue","gray"),ylim=c(0,200),xlab="Nivel de apoyo social",ylab="Frecuencia")
La estructura de correlación entre las variables cuantitativas: P91-P100
Covid.corNew = cor(na.omit(Covid[,-c(1:7,18:20)]),method="pearson")
corrplot::corrplot(Covid.corNew , method = "ellipse",addCoef.col = "black",type="upper")