Artículo consumo y valores 2023

knitr::include_graphics("img.gif")

Conformación de la base

Se parte de la base del tiempo 1, con 1210 casos

Para valores personales se utilizaron las medias crudas (sin centrar), que es lo que recomienda schwartz cuando se usan los valores como predictores.

Alcohol se dicotomizó como el artículo de Mau del anuario (Audit 1 y 3 dividen las puntuaciones en 0-1-2 y 3-4; Audit 2 las divide 0-1 y 2-3-4).

Se incluyeron las variables sexo y edad. Se eliminaron casos con valores faltantes, quedando 1130 casos.

media_valores <- rowMeans(tiempo_1[42:62], na.rm = T)
base <- data.frame(tiempo_1[1],
                   AT=rowMeans(tiempo_1[c(44,49,53,59,60)], na.rm = T),
                   AC=rowMeans(tiempo_1[c(42,47,51,52,56,62)], na.rm = T),
                   AP=rowMeans(tiempo_1[c(43,45,54,58)], na.rm = T),
                   C=rowMeans(tiempo_1[c(46,48,50,55,57,61)], na.rm = T),
                   AT_c=rowMeans(tiempo_1[c(44,49,53,59,60)], na.rm = T)-media_valores,
                   AC_c=rowMeans(tiempo_1[c(42,47,51,52,56,62)], na.rm = T)-media_valores,
                   AP_c=rowMeans(tiempo_1[c(43,45,54,58)], na.rm = T)-media_valores,
                   C_c=rowMeans(tiempo_1[c(46,48,50,55,57,61)], na.rm = T)-media_valores,
                   uni=rowMeans(tiempo_1[c(44,49,60)], na.rm = T),
                   ben=rowMeans(tiempo_1[c(53,59)], na.rm = T),
                   adi=rowMeans(tiempo_1[c(42,52)], na.rm = T),
                   hed=rowMeans(tiempo_1[c(51,62)], na.rm = T),
                   est=rowMeans(tiempo_1[c(47,56)], na.rm = T),
                   log=rowMeans(tiempo_1[c(45,54)], na.rm = T),
                   pod=rowMeans(tiempo_1[c(43,58)], na.rm = T),
                   con=rowMeans(tiempo_1[c(48,57)], na.rm = T),
                   tra=rowMeans(tiempo_1[c(50,61)], na.rm = T),
                   seg=rowMeans(tiempo_1[c(46,55)], na.rm = T),
                   alcohol_1=ifelse(tiempo_1[22]<3,0,1),
                   alcohol_2=ifelse(tiempo_1[23]<2,0,1),
                   alcohol_3=ifelse(tiempo_1[24]<3,0,1),
                   alcohol_prob=rowSums(tiempo_1[25:31],na.rm = T),
                   alcohol_total=rowSums(tiempo_1[22:31],na.rm = T),
                   tiempo_1[c(2:3,42:62,22:31)])
base <- base[complete.cases(base),]
colnames(base)[c(10:12,15:37,38:40,41:47)+10] <- c("alcohol_1","alcohol_2","alcohol_3",
                                                stringr::str_sub(colnames(base[15:16+10]),1,-4),
                                                paste0(c("sd","po","un","ac","se","st","co","un","tr","he",
                                                         "sd","be","ac","se","st","co","po","be","un","tr","he"),
                                                       stringr::str_sub(colnames(base[17:37+10]),4,-4)),
                                                stringr::str_sub(colnames(base[38:40+10]),1,-6),
                                                stringr::str_sub(colnames(base[41:47+10]),1,-4))
base$sexo <- factor(base$sexo)

Búsqueda de outliers

Mahalanobis

Primero transformé las variables originales con Box-Cox para aplicar distancias de mahalanobis en la identificación de outliers.

temp <- base[17:47+10]
temp[22:31] <- temp[22:31]+1


for(i in 1:31){
  bc <- boxcox(unlist(temp[i]) ~ 1,data=temp, plotit = F)
  lamda<-bc$x[which.max(bc$y)]
  temp[i]<-ifelse(lamda==0,log(temp[i]),(temp[i]^lamda-1)/lamda)
}

temp$mahalanobis <- mahalanobis(temp, colMeans(temp), cov(temp))
temp$pvalue <- pchisq(temp$mahalanobis, df=ncol(temp)-1, lower.tail=FALSE)

base <- base[which(temp$pvalue>0.05),]

rm(list = c("temp", "bc", "i","lamda"))

A partir de las distancias de mahalanobis se detectaron 189 casos cuyas distancias multivariadas se alejaron significativamente del resto de datos, quedando un total de 941 casos.

Cualitativo

Se realizó un análisis cualitativo de los puntajes de audit para evaluar la concordancia entre respuestas (por ejemplo, si nunca consumió alcohol, no puede presentar CEEA más de una vez al mes).

base <- base[!(base$audit01==0&
       (base$audit02>1|
          base$audit02>1|
          base$audit03>1|
          base$audit04>1|
          base$audit05>1|
          base$audit06>1|
          base$audit08>1)),]

A partir de este análisis se eliminaron 27 casos con respuestas incongruentes, resultando en una base final de 914 casos.

Preliminares

Audit 1

Primero se ajustó el modelo nulo y luego se compararon los AIC de ese modelo con un modelo sólo con edad y sólo con sexo.

mod_nulo<-glm(alcohol_1~1, data=base, family=binomial)
mod_edad <- glm(alcohol_1~edad, data=base, family=binomial)
mod_sexo <- glm(alcohol_1~sexo, data=base, family=binomial)

anova(mod_nulo, mod_edad, test = "Chisq")
## Analysis of Deviance Table
## 
## Model 1: alcohol_1 ~ 1
## Model 2: alcohol_1 ~ edad
##   Resid. Df Resid. Dev Df Deviance  Pr(>Chi)    
## 1       913     284.00                          
## 2       912     250.18  1   33.827 6.025e-09 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
anova(mod_nulo, mod_sexo, test = "Chisq")
## Analysis of Deviance Table
## 
## Model 1: alcohol_1 ~ 1
## Model 2: alcohol_1 ~ sexo
##   Resid. Df Resid. Dev Df Deviance Pr(>Chi)
## 1       913      284.0                     
## 2       912      281.7  1   2.3022   0.1292

El modelo con sexo como predictor no mejoró significativamente respecto del nulo. Por ello, los siguientes modelos para Audit 1 se ajustarán solo controlando por edad.

Pred.: Autotrascendencia (AT)

ajuste<-glm(alcohol_1~AT+edad, data=base, family=binomial)
# plot(simulateResiduals(ajuste))
anova(mod_edad, ajuste, test = "Chisq")
## Analysis of Deviance Table
## 
## Model 1: alcohol_1 ~ edad
## Model 2: alcohol_1 ~ AT + edad
##   Resid. Df Resid. Dev Df Deviance Pr(>Chi)
## 1       912     250.18                     
## 2       911     250.15  1 0.027723   0.8678
# ajuste<-glm(alcohol_1~uni+edad+sexo, data=base, family=binomial)
# # plot(simulateResiduals(ajuste))
# anova(mod_edad, ajuste, test = "Chisq")
# 
# ajuste<-glm(alcohol_1~ben+edad+sexo, data=base, family=binomial)
# # plot(simulateResiduals(ajuste))
# anova(mod_edad, ajuste, test = "Chisq")

Se cumplen los supuestos del modelo, pero AT no resultó significativo en la predicción de consumo de alcohol.

Pred.: Autopromoción (AP)

ajuste<-glm(alcohol_1~AP+edad, data=base, family=binomial)
# plot(simulateResiduals(ajuste))
anova(mod_edad, ajuste, test = "Chisq")
## Analysis of Deviance Table
## 
## Model 1: alcohol_1 ~ edad
## Model 2: alcohol_1 ~ AP + edad
##   Resid. Df Resid. Dev Df Deviance Pr(>Chi)
## 1       912     250.18                     
## 2       911     249.88  1  0.29739   0.5855
# 
# ajuste<-glm(alcohol_1~pod+edad+sexo, data=base, family=binomial)
# # plot(simulateResiduals(ajuste))
# anova(mod_edad, ajuste, test = "Chisq")
# 
# ajuste<-glm(alcohol_1~log+edad+sexo, data=base, family=binomial)
# # plot(simulateResiduals(ajuste))
# anova(mod_edad, ajuste, test = "Chisq")

Se cumplen los supuestos del modelo, pero AP no resultó significativo en la predicción de consumo de alcohol.

Pred.: Apertura al cambio (AC)

ajuste<-glm(alcohol_1~AC+edad, data=base, family=binomial)
# plot(simulateResiduals(ajuste))
anova(mod_edad, ajuste, test = "Chisq")
## Analysis of Deviance Table
## 
## Model 1: alcohol_1 ~ edad
## Model 2: alcohol_1 ~ AC + edad
##   Resid. Df Resid. Dev Df Deviance Pr(>Chi)   
## 1       912     250.18                        
## 2       911     240.58  1   9.5949 0.001951 **
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
summary(ajuste)
## 
## Call:
## glm(formula = alcohol_1 ~ AC + edad, family = binomial, data = base)
## 
## Coefficients:
##             Estimate Std. Error z value Pr(>|z|)    
## (Intercept) -20.0257     3.0759  -6.510 7.49e-11 ***
## AC            0.8975     0.3110   2.886   0.0039 ** 
## edad          0.7431     0.1409   5.274 1.33e-07 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 284.00  on 913  degrees of freedom
## Residual deviance: 240.58  on 911  degrees of freedom
## AIC: 246.58
## 
## Number of Fisher Scoring iterations: 7
OR <- exp(ajuste$coefficients[2])
IC_OR<-exp(confint(ajuste))[2,]
## Waiting for profiling to be done...
# ajuste<-glm(alcohol_1~hed+edad+sexo, data=base, family=binomial)
# # plot(simulateResiduals(ajuste))
# anova(mod_edad, ajuste, test = "Chisq")
# 
# ajuste<-glm(alcohol_1~est+edad+sexo, data=base, family=binomial)
# # plot(simulateResiduals(ajuste))
# anova(mod_edad, ajuste, test = "Chisq")
# 
# ajuste<-glm(alcohol_1~adi+edad+sexo, data=base, family=binomial)
# # plot(simulateResiduals(ajuste))
# anova(mod_edad, ajuste, test = "Chisq")

Se cumplen los supuestos del modelo y C fue significativo en la predicción de consumo de alcohol (\(OR\) = 2.45; \(IC_{95}\) = [1.37; 4.66]). De acuerdo a este resultado por cada unidad que aumenta la apertura al cambio, el riesgo de presentar una frecuencia de consumo elevada aumenta en un 145.34%.

Hosmer-Lemenshow

Test de bondad de ajuste para evaluar si los datos dan evidencia de que el modelo propuesto es válido. Se busca NO rechazar.

htest <- hoslem.test(base$alcohol_1, ajuste$fitted.values, g=1)
## Warning in pchisq(chisq, g - 2): NaNs produced
htest
## 
##  Hosmer and Lemeshow goodness of fit (GOF) test
## 
## data:  base$alcohol_1, ajuste$fitted.values
## X-squared = 2.7932e-19, df = -1, p-value = NA
sum(htest$expected<5) # Si hay menores que 5 tengo que rearmar los grupos
## [1] 0
# con el argumento "g" para que sea válido el test (arranqué en 10 y fui bajando)

No se encontró una solución válida para el test de HL por tener valores esperados inferiores a 5 incluso dividiendo en solo dos grupos.

Curva ROC

Primero divido a la muestra en entrenamiento (70%) y testeo (30%) y luego estimo la curva ROC para encontrar el punto de corte óptimo.

set.seed(195)
train<-sample(1:nrow(base), nrow(base)*0.7)

ajuste2<-glm(alcohol_1~AC+edad, data=base, family=binomial, subset=train)

clase<-base$alcohol_1[-train]
ajustados<-predict(ajuste2,newdata = base[-train,],type="response")
ROC <- rocit(score=ajustados,class=clase)
distancia <- sqrt(ROC$FPR^2 +(ROC$TPR-1)^2)
plot(ROC)

plot(ROC$Cutoff,distancia,pch=20)

minimo <- ROC$Cutoff[which.min(distancia)]
tita<-minimo
ajustados1<-predict(ajuste2,newdata = base[-train,],type="response")
predichos1<-ifelse(ajustados1>tita,1,0)
confusion<-table(base$alcohol_1[-train], predichos1)
tasa_error_te1<-mean(base$alcohol_1[-train]!=predichos1) 

sensibilidad<-confusion[2,2]/sum(confusion[2,]) # capacidad del modelo para detectar los positivos
especificidad<-confusion[1,1]/sum(confusion[1,]) #capacidad del modelo para detectar los negativos

Tasa de error en la predicción

A partir de la curva ROC encontramos que para la predicción con este modelo el punto de corte ideal (el más cercano al punto de mayor sensibilidad y especificidad) es p=0.0695. Con ese punto de corte conformamos una tabla de confusión con la submuestra de testeo y obtenemos una tasa de error en la predicción del 16.36%, con una alta especificidad (83.96%) y sensibilidad moderada (71.43%).

confusion
##    predichos1
##       0   1
##   0 225  43
##   1   2   5

Pred.: Conservación (C)

ajuste<-glm(alcohol_1~C+edad, data=base, family=binomial)
# plot(simulateResiduals(ajuste))
anova(mod_edad, ajuste, test = "Chisq")
## Analysis of Deviance Table
## 
## Model 1: alcohol_1 ~ edad
## Model 2: alcohol_1 ~ C + edad
##   Resid. Df Resid. Dev Df Deviance Pr(>Chi)   
## 1       912     250.18                        
## 2       911     240.07  1   10.107 0.001477 **
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
summary(ajuste)
## 
## Call:
## glm(formula = alcohol_1 ~ C + edad, family = binomial, data = base)
## 
## Coefficients:
##             Estimate Std. Error z value Pr(>|z|)    
## (Intercept) -12.6218     2.4445  -5.163 2.43e-07 ***
## C            -0.7283     0.2376  -3.065  0.00218 ** 
## edad          0.7335     0.1401   5.235 1.65e-07 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 284.00  on 913  degrees of freedom
## Residual deviance: 240.07  on 911  degrees of freedom
## AIC: 246.07
## 
## Number of Fisher Scoring iterations: 7
OR <- exp(ajuste$coefficients[2])
IC_OR<-exp(confint(ajuste))[2,]
## Waiting for profiling to be done...
# ajuste<-glm(alcohol_1~con+edad+sexo, data=base, family=binomial)
# # plot(simulateResiduals(ajuste))
# anova(mod_edad, ajuste, test = "Chisq")
# 
# ajuste<-glm(alcohol_1~tra+edad+sexo, data=base, family=binomial)
# # plot(simulateResiduals(ajuste))
# anova(mod_edad, ajuste, test = "Chisq")
# 
# ajuste<-glm(alcohol_1~seg+edad+sexo, data=base, family=binomial)
# # plot(simulateResiduals(ajuste))
# anova(mod_edad, ajuste, test = "Chisq")
# 
# summary(glm(alcohol_1~seg+tra+con+edad+sexo, data=base, family=binomial))

Se cumplen los supuestos del modelo y AC fue significativo en la predicción de consumo de alcohol (\(OR\) = 0.48; \(IC_{95}\) = [0.3; 0.76]). De acuerdo a este resultado por cada unidad que aumenta la conservación, el riesgo de presentar una frecuencia de consumo elevada disminuye en un 51.73%.

Hosmer-Lemenshow

Test de bondad de ajuste para evaluar si los datos dan evidencia de que el modelo propuesto es válido. Se busca NO rechazar.

htest <- hoslem.test(base$alcohol_1, ajuste$fitted.values, g=1)
## Warning in pchisq(chisq, g - 2): NaNs produced
htest
## 
##  Hosmer and Lemeshow goodness of fit (GOF) test
## 
## data:  base$alcohol_1, ajuste$fitted.values
## X-squared = 1.3016e-19, df = -1, p-value = NA
sum(htest$expected<5) # Si hay menores que 5 tengo que rearmar los grupos
## [1] 0
# con el argumento "g" para que sea válido el test (arranqué en 10 y fui bajando)

No se encontró una solución válida para el test de HL por tener valores esperados inferiores a 5 incluso dividiendo en solo dos grupos.

Curva ROC

Primero divido a la muestra en entrenamiento (70%) y testeo (30%).

set.seed(195)
train<-sample(1:nrow(base), nrow(base)*0.7)

ajuste2<-glm(alcohol_1~edad+C, data=base, family=binomial, subset=train)

clase<-base$alcohol_1[-train]
ajustados<-predict(ajuste2,newdata = base[-train,],type="response")
ROC <- rocit(score=ajustados,class=clase)
distancia <- sqrt(ROC$FPR^2 +(ROC$TPR-1)^2)
plot(ROC)

plot(ROC$Cutoff,distancia,pch=20)

minimo <- ROC$Cutoff[which.min(distancia)]
tita<-minimo
ajustados1<-predict(ajuste2,newdata = base[-train,],type="response")
predichos1<-ifelse(ajustados1>tita,1,0)
confusion<-table(base$alcohol_1[-train], predichos1)
tasa_error_te1<-mean(base$alcohol_1[-train]!=predichos1) 

sensibilidad<-confusion[2,2]/sum(confusion[2,]) # capacidad del modelo para detectar los positivos
especificidad<-confusion[1,1]/sum(confusion[1,]) #capacidad del modelo para detectar los negativos

Tasa de error en la predicción

A partir de la curva ROC encontramos que para la predicción con este modelo el punto de corte ideal (el más cercano al punto de mayor sensibilidad y especificidad) es p=0.052. Con ese punto de corte conformamos una tabla de confusión con la submuestra de testeo y obtenemos una tasa de error en la predicción del 26.55%, con una alta especificidad (73.88%), pero bastante baja sensibilidad (57.14%).

confusion
##    predichos1
##       0   1
##   0 198  70
##   1   3   4

Modelo final (Audit 1)

Se tomó como punto de base el modelo con edad y conservación por ser el que obtuvo una menor deviance y se comparó con el modelo que además tenía apertura al cambio.

mod_C<-glm(alcohol_1~edad+C, data=base, family=binomial)
mod_total <- glm(alcohol_1~edad+C+AC, data=base, family=binomial)
# plot(simulateResiduals(mod_total))
anova(mod_C, mod_total, test = "Chisq")
## Analysis of Deviance Table
## 
## Model 1: alcohol_1 ~ edad + C
## Model 2: alcohol_1 ~ edad + C + AC
##   Resid. Df Resid. Dev Df Deviance  Pr(>Chi)    
## 1       911     240.07                          
## 2       910     225.92  1   14.145 0.0001693 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
summary(mod_total)
## 
## Call:
## glm(formula = alcohol_1 ~ edad + C + AC, family = binomial, data = base)
## 
## Coefficients:
##             Estimate Std. Error z value Pr(>|z|)    
## (Intercept) -18.5657     3.2155  -5.774 7.75e-09 ***
## edad          0.7777     0.1484   5.239 1.61e-07 ***
## C            -0.8568     0.2352  -3.644 0.000269 ***
## AC            1.1232     0.3270   3.435 0.000593 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 284.00  on 913  degrees of freedom
## Residual deviance: 225.92  on 910  degrees of freedom
## AIC: 233.92
## 
## Number of Fisher Scoring iterations: 7
OR_edad <- exp(mod_total$coefficients[2])
OR_C <- exp(mod_total$coefficients[3])
OR_AC <- exp(mod_total$coefficients[4])
IC_OR_edad<-exp(confint(mod_total))[2,]
## Waiting for profiling to be done...
IC_OR_C<-exp(confint(mod_total))[3,]
## Waiting for profiling to be done...
IC_OR_AC<-exp(confint(mod_total))[4,]
## Waiting for profiling to be done...
R2 <- NagelkerkeR2(mod_total)$R2

Se cumplen los supuestos del modelo y edad, conservación y apertura al cambio fueron significativos en la predicción de consumo de alcohol (\(OR_{edad}\) = 2.18, \(IC_{95}\) = [1.65; 2.97]; \(OR_{Conservacion}\) = 0.42, \(IC_{95}\) = [0.26; 0.66]; \(OR_{AperturaAlCambio}\) = 3.07, \(IC_{95}\) = [1.67; 6.05]). De acuerdo a este resultado, manteniendo fijas las demás variables, el riesgo de presentar una frecuencia alta de consumo es 117.65% mayor por cada año que aumenta la edad, 207.45% mayor por cada unidad que aumenta la apertura al cambio y 57.55% menor por cada unidad que aumenta la conservación.

A partir del pseudo-R2 de Nagelkerke (\(R^2\) = 0.231) se estima que el modelo propuesto explica el 23.05% de la variabilidad de Audit 1.

Hosmer-Lemenshow

Test de bondad de ajuste para evaluar si los datos dan evidencia de que el modelo propuesto es válido. Se busca NO rechazar.

htest <- hoslem.test(base$alcohol_1, mod_total$fitted.values, g=1)
## Warning in pchisq(chisq, g - 2): NaNs produced
htest
## 
##  Hosmer and Lemeshow goodness of fit (GOF) test
## 
## data:  base$alcohol_1, mod_total$fitted.values
## X-squared = 4.3918e-17, df = -1, p-value = NA
sum(htest$expected<5) # Si hay menores que 5 tengo que rearmar los grupos
## [1] 0
# con el argumento "g" para que sea válido el test (arranqué en 10 y fui bajando)

No se encontró una solución válida para el test de HL por tener valores esperados inferiores a 5 incluso dividiendo en solo dos grupos.

Curva ROC

Primero divido a la muestra en entrenamiento (70%) y testeo (30%).

set.seed(195)
train<-sample(1:nrow(base), nrow(base)*0.7)

ajuste2<-glm(alcohol_1~edad+C+AC, data=base, family=binomial, subset=train)

clase<-base$alcohol_1[-train]
ajustados<-predict(ajuste2,newdata = base[-train,],type="response")
ROC <- rocit(score=ajustados,class=clase)
distancia <- sqrt(ROC$FPR^2 +(ROC$TPR-1)^2)
plot(ROC)

plot(ROC$Cutoff,distancia,pch=20)

minimo <- ROC$Cutoff[which.min(distancia)]
tita<-minimo
ajustados1<-predict(ajuste2,newdata = base[-train,],type="response")
predichos1<-ifelse(ajustados1>tita,1,0)
confusion<-table(base$alcohol_1[-train], predichos1)
tasa_error_te1<-mean(base$alcohol_1[-train]!=predichos1) 

sensibilidad<-confusion[2,2]/sum(confusion[2,]) # capacidad del modelo para detectar los positivos
especificidad<-confusion[1,1]/sum(confusion[1,]) #capacidad del modelo para detectar los negativos

Tasa de error en la predicción

A partir de la curva ROC encontramos que para la predicción con este modelo el punto de corte ideal (el más cercano al punto de mayor sensibilidad y especificidad) es p=0.0442. Con ese punto de corte conformamos una tabla de confusión con la submuestra de testeo y obtenemos una tasa de error en la predicción del 28%, con una moderada especificidad (72.01%) y sensibilidad (71.43%).

confusion
##    predichos1
##       0   1
##   0 193  75
##   1   2   5

Audit 2

Primero se ajustó el modelo nulo y luego se compararon los AIC de ese modelo con un modelo sólo con edad y sólo con sexo.

mod_nulo<-glm(alcohol_2~1, data=base, family=binomial)
mod_edad <- glm(alcohol_2~edad, data=base, family=binomial)
mod_sexo <- glm(alcohol_2~sexo, data=base, family=binomial)
mod_base <- glm(alcohol_2~sexo+edad, data=base, family=binomial)

anova(mod_nulo, mod_edad, test = "Chisq")
## Analysis of Deviance Table
## 
## Model 1: alcohol_2 ~ 1
## Model 2: alcohol_2 ~ edad
##   Resid. Df Resid. Dev Df Deviance  Pr(>Chi)    
## 1       913     513.88                          
## 2       912     439.37  1   74.511 < 2.2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
anova(mod_nulo, mod_sexo, test = "Chisq")
## Analysis of Deviance Table
## 
## Model 1: alcohol_2 ~ 1
## Model 2: alcohol_2 ~ sexo
##   Resid. Df Resid. Dev Df Deviance Pr(>Chi)  
## 1       913     513.88                       
## 2       912     510.88  1   2.9982  0.08336 .
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

El modelo con sexo obtuvo una significación marginal, pero se decidió incluirlo de todos modos. Por ello, los siguientes modelos para Audit 2 se ajustarán controlando por edad y sexo.

Pred.: Autotrascendencia (AT)

ajuste<-glm(alcohol_2~AT+edad+sexo, data=base, family=binomial)
# plot(simulateResiduals(ajuste))
anova(mod_base, ajuste, test = "Chisq")
## Analysis of Deviance Table
## 
## Model 1: alcohol_2 ~ sexo + edad
## Model 2: alcohol_2 ~ AT + edad + sexo
##   Resid. Df Resid. Dev Df  Deviance Pr(>Chi)
## 1       911     431.34                      
## 2       910     431.34  1 2.488e-05    0.996
# ajuste<-glm(alcohol_2~uni+edad+sexo, data=base, family=binomial)
# # plot(simulateResiduals(ajuste))
# anova(mod_edad, ajuste, test = "Chisq")
# 
# ajuste<-glm(alcohol_2~ben+edad+sexo, data=base, family=binomial)
# # plot(simulateResiduals(ajuste))
# anova(mod_edad, ajuste, test = "Chisq")

Se cumplen los supuestos del modelo, pero AT no resultó significativo en la predicción de consumo de alcohol.

Pred.: Autopromoción (AP)

ajuste<-glm(alcohol_2~AP+edad+sexo, data=base, family=binomial)
# plot(simulateResiduals(ajuste))
anova(mod_base, ajuste, test = "Chisq")
## Analysis of Deviance Table
## 
## Model 1: alcohol_2 ~ sexo + edad
## Model 2: alcohol_2 ~ AP + edad + sexo
##   Resid. Df Resid. Dev Df Deviance Pr(>Chi)
## 1       911     431.34                     
## 2       910     431.29  1 0.047318   0.8278
# ajuste<-glm(alcohol_2~pod+edad+sexo, data=base, family=binomial)
# # plot(simulateResiduals(ajuste))
# anova(mod_edad, ajuste, test = "Chisq")
# 
# ajuste<-glm(alcohol_2~log+edad+sexo, data=base, family=binomial)
# # plot(simulateResiduals(ajuste))
# anova(mod_edad, ajuste, test = "Chisq")

Se cumplen los supuestos del modelo, pero AP no resultó significativo en la predicción de consumo de alcohol.

Pred.: Apertura al cambio (AC)

ajuste<-glm(alcohol_2~AC+edad+sexo, data=base, family=binomial)
# plot(simulateResiduals(ajuste))
anova(mod_base, ajuste, test = "Chisq")
## Analysis of Deviance Table
## 
## Model 1: alcohol_2 ~ sexo + edad
## Model 2: alcohol_2 ~ AC + edad + sexo
##   Resid. Df Resid. Dev Df Deviance Pr(>Chi)
## 1       911     431.34                     
## 2       910     431.05  1  0.29079   0.5897
# ajuste<-glm(alcohol_2~adi+edad+sexo, data=base, family=binomial)
# # plot(simulateResiduals(ajuste))
# anova(mod_edad, ajuste, test = "Chisq")
# 
# ajuste<-glm(alcohol_2~hed+edad+sexo, data=base, family=binomial)
# # plot(simulateResiduals(ajuste))
# anova(mod_edad, ajuste, test = "Chisq")
# 
# ajuste<-glm(alcohol_2~est+edad+sexo, data=base, family=binomial)
# # plot(simulateResiduals(ajuste))
# anova(mod_edad, ajuste, test = "Chisq")

Se cumplen los supuestos del modelo, pero AC no resultó significativo en la predicción de consumo de alcohol.

Pred.: Conservación (C)

ajuste<-glm(alcohol_2~C+edad+sexo, data=base, family=binomial)
# plot(simulateResiduals(ajuste))
anova(mod_base, ajuste, test = "Chisq")
## Analysis of Deviance Table
## 
## Model 1: alcohol_2 ~ sexo + edad
## Model 2: alcohol_2 ~ C + edad + sexo
##   Resid. Df Resid. Dev Df Deviance Pr(>Chi)  
## 1       911     431.34                       
## 2       910     426.01  1   5.3225  0.02105 *
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
summary(ajuste)
## 
## Call:
## glm(formula = alcohol_2 ~ C + edad + sexo, family = binomial, 
##     data = base)
## 
## Coefficients:
##              Estimate Std. Error z value Pr(>|z|)    
## (Intercept) -13.40995    1.72878  -7.757 8.70e-15 ***
## C            -0.35935    0.15800  -2.274  0.02295 *  
## edad          0.77434    0.09981   7.758 8.64e-15 ***
## sexom        -0.73349    0.27171  -2.700  0.00694 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 513.88  on 913  degrees of freedom
## Residual deviance: 426.01  on 910  degrees of freedom
## AIC: 434.01
## 
## Number of Fisher Scoring iterations: 6
OR_C <- exp(ajuste$coefficients[2])
OR_edad <- exp(ajuste$coefficients[3])
OR_sexo <- exp(ajuste$coefficients[4])
IC_OR_C<-exp(confint(ajuste))[2,]
## Waiting for profiling to be done...
IC_OR_edad<-exp(confint(ajuste))[3,]
## Waiting for profiling to be done...
IC_OR_sexo<-exp(confint(ajuste))[4,]
## Waiting for profiling to be done...
R2 <- NagelkerkeR2(ajuste)$R2


# ajuste<-glm(alcohol_2~con+edad+sexo, data=base, family=binomial)
# # plot(simulateResiduals(ajuste))
# anova(mod_edad, ajuste, test = "Chisq")
# 
# ajuste<-glm(alcohol_2~tra+edad+sexo, data=base, family=binomial)
# # plot(simulateResiduals(ajuste))
# anova(mod_edad, ajuste, test = "Chisq")
# 
# ajuste<-glm(alcohol_2~seg+edad+sexo, data=base, family=binomial)
# # plot(simulateResiduals(ajuste))
# anova(mod_edad, ajuste, test = "Chisq")
# 
# summary(glm(alcohol_2~seg+tra+con+edad+sexo, data=base, family=binomial))

Se cumplen los supuestos del modelo y la edad, el sexo y la conservación fueron significativos en la predicción de consumo de alcohol (\(OR_{edad}\) = 2.17, \(IC_{95}\) = [1.8; 2.66]; \(OR_{sexo}\) = 0.48, \(IC_{95}\) = [0.28; 0.81]; \(OR_{Conservación}\) = 0.7, \(IC_{95}\) = [0.51; 0.95]). De acuerdo a este resultado, manteniendo fijas las demás variables, el riesgo de presentar CEEA es 116.92% mayor por cada año que aumenta la edad, 30.19% menor por cada unidad que aumenta la conservación y 51.98% en varones que en mujeres.

A partir del pseudo-R2 de Nagelkerke (\(R^2\) = 0.213) se estima que el modelo propuesto explica el 21.31% de la variabilidad de Audit 2.

Hosmer-Lemenshow

Test de bondad de ajuste para evaluar si los datos dan evidencia de que el modelo propuesto es válido. Se busca NO rechazar.

htest <- hoslem.test(base$alcohol_2, ajuste$fitted.values, g=1)
## Warning in pchisq(chisq, g - 2): NaNs produced
htest
## 
##  Hosmer and Lemeshow goodness of fit (GOF) test
## 
## data:  base$alcohol_2, ajuste$fitted.values
## X-squared = 2.5847e-17, df = -1, p-value = NA
sum(htest$expected<5) # Si hay menores que 5 tengo que rearmar los grupos
## [1] 0
# con el argumento "g" para que sea válido el test (arranqué en 10 y fui bajando)

No se encontró una solución válida para el test de HL por tener valores esperados inferiores a 5 incluso dividiendo en solo dos grupos.

Curva ROC

Primero divido a la muestra en entrenamiento (70%) y testeo (30%) y luego estimo la curva ROC para encontrar el punto de corte óptimo.

set.seed(195)
train<-sample(1:nrow(base), nrow(base)*0.7)

ajuste2<-glm(alcohol_2~C+edad+sexo, data=base, family=binomial, subset=train)

clase<-base$alcohol_2[-train]
ajustados<-predict(ajuste2,newdata = base[-train,],type="response")
ROC <- rocit(score=ajustados,class=clase)
distancia <- sqrt(ROC$FPR^2 +(ROC$TPR-1)^2)
plot(ROC)

plot(ROC$Cutoff,distancia,pch=20)

minimo <- ROC$Cutoff[which.min(distancia)]
tita<-minimo
ajustados1<-predict(ajuste2,newdata = base[-train,],type="response")
predichos1<-ifelse(ajustados1>tita,1,0)
confusion<-table(base$alcohol_2[-train], predichos1)
tasa_error_te1<-mean(base$alcohol_2[-train]!=predichos1) 

sensibilidad<-confusion[2,2]/sum(confusion[2,]) # capacidad del modelo para detectar los positivos
especificidad<-confusion[1,1]/sum(confusion[1,]) #capacidad del modelo para detectar los negativos

Tasa de error en la predicción

A partir de la curva ROC encontramos que para la predicción con este modelo el punto de corte ideal (el más cercano al punto de mayor sensibilidad y especificidad) es p=0.0953. Con ese punto de corte conformamos una tabla de confusión con la submuestra de testeo y obtenemos una tasa de error en la predicción del 28%, con especificidad (71.83%) y sensibilidad (73.91%) moderadas.

confusion
##    predichos1
##       0   1
##   0 181  71
##   1   6  17

Audit 3

Primero se ajustó el modelo nulo y luego se compararon los AIC de ese modelo con un modelo sólo con edad y sólo con sexo.

mod_nulo<-glm(alcohol_3~1, data=base, family=binomial)
mod_edad <- glm(alcohol_3~edad, data=base, family=binomial)
mod_sexo <- glm(alcohol_3~sexo, data=base, family=binomial)

anova(mod_nulo, mod_edad, test = "Chisq")
## Analysis of Deviance Table
## 
## Model 1: alcohol_3 ~ 1
## Model 2: alcohol_3 ~ edad
##   Resid. Df Resid. Dev Df Deviance  Pr(>Chi)    
## 1       913     290.54                          
## 2       912     240.35  1   50.187 1.398e-12 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
anova(mod_nulo, mod_sexo, test = "Chisq")
## Analysis of Deviance Table
## 
## Model 1: alcohol_3 ~ 1
## Model 2: alcohol_3 ~ sexo
##   Resid. Df Resid. Dev Df Deviance Pr(>Chi)
## 1       913     290.54                     
## 2       912     289.95  1  0.59289   0.4413

El modelo con sexo no fue significativamente mejor que el nulo. Por ello, los siguientes modelos para Audit 3 se ajustarán sólo controlando por edad.

Pred.: Autotrascendencia (AT)

ajuste<-glm(alcohol_3~AT+edad, data=base, family=binomial)
# plot(simulateResiduals(ajuste))
anova(mod_edad, ajuste, test = "Chisq")
## Analysis of Deviance Table
## 
## Model 1: alcohol_3 ~ edad
## Model 2: alcohol_3 ~ AT + edad
##   Resid. Df Resid. Dev Df Deviance Pr(>Chi)
## 1       912     240.35                     
## 2       911     238.87  1   1.4873   0.2226
ajuste<-glm(alcohol_3~uni+edad, data=base, family=binomial)
# plot(simulateResiduals(ajuste))
anova(mod_edad, ajuste, test = "Chisq")
## Analysis of Deviance Table
## 
## Model 1: alcohol_3 ~ edad
## Model 2: alcohol_3 ~ uni + edad
##   Resid. Df Resid. Dev Df Deviance Pr(>Chi)
## 1       912     240.35                     
## 2       911     239.42  1  0.92964    0.335
ajuste<-glm(alcohol_3~ben+edad, data=base, family=binomial)
# plot(simulateResiduals(ajuste))
anova(mod_edad, ajuste, test = "Chisq")
## Analysis of Deviance Table
## 
## Model 1: alcohol_3 ~ edad
## Model 2: alcohol_3 ~ ben + edad
##   Resid. Df Resid. Dev Df Deviance Pr(>Chi)
## 1       912     240.35                     
## 2       911     238.87  1   1.4846   0.2231
ajuste<-glm(alcohol_3~seg+edad, data=base, family=binomial)
# plot(simulateResiduals(ajuste))
anova(mod_edad, ajuste, test = "Chisq")
## Analysis of Deviance Table
## 
## Model 1: alcohol_3 ~ edad
## Model 2: alcohol_3 ~ seg + edad
##   Resid. Df Resid. Dev Df Deviance Pr(>Chi)
## 1       912     240.35                     
## 2       911     238.32  1   2.0337   0.1538
summary(glm(alcohol_3~seg+tra+con+edad, data=base, family=binomial))
## 
## Call:
## glm(formula = alcohol_3 ~ seg + tra + con + edad, family = binomial, 
##     data = base)
## 
## Coefficients:
##              Estimate Std. Error z value Pr(>|z|)    
## (Intercept) -16.67703    2.74207  -6.082 1.19e-09 ***
## seg          -0.15668    0.16586  -0.945    0.345    
## tra          -0.20266    0.19023  -1.065    0.287    
## con          -0.08696    0.16803  -0.518    0.605    
## edad          0.91452    0.15407   5.936 2.93e-09 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 290.54  on 913  degrees of freedom
## Residual deviance: 236.47  on 909  degrees of freedom
## AIC: 246.47
## 
## Number of Fisher Scoring iterations: 7

Hay un levísimo incumplimiento de supuestos, pero igual AT no resultó significativo en la predicción de consumo de alcohol.

Pred.: Autopromoción (AP)

ajuste<-glm(alcohol_3~AP+edad, data=base, family=binomial)
# plot(simulateResiduals(ajuste))
anova(mod_edad, ajuste, test = "Chisq")
## Analysis of Deviance Table
## 
## Model 1: alcohol_3 ~ edad
## Model 2: alcohol_3 ~ AP + edad
##   Resid. Df Resid. Dev Df  Deviance Pr(>Chi)
## 1       912     240.35                      
## 2       911     240.35  1 0.0052026   0.9425

Hay un levísimo incumplimiento de supuestos, pero igual AP no resultó significativo en la predicción de consumo de alcohol.

Pred.: Apertura al cambio (AC)

ajuste<-glm(alcohol_3~AC+edad, data=base, family=binomial)
# plot(simulateResiduals(ajuste))
anova(mod_edad, ajuste, test = "Chisq")
## Analysis of Deviance Table
## 
## Model 1: alcohol_3 ~ edad
## Model 2: alcohol_3 ~ AC + edad
##   Resid. Df Resid. Dev Df Deviance Pr(>Chi)   
## 1       912     240.35                        
## 2       911     233.60  1   6.7481 0.009385 **
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
summary(ajuste)
## 
## Call:
## glm(formula = alcohol_3 ~ AC + edad, family = binomial, data = base)
## 
## Coefficients:
##             Estimate Std. Error z value Pr(>|z|)    
## (Intercept) -22.5057     3.2920  -6.836 8.12e-12 ***
## AC            0.7375     0.2996   2.461   0.0139 *  
## edad          0.9374     0.1559   6.014 1.81e-09 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 290.54  on 913  degrees of freedom
## Residual deviance: 233.60  on 911  degrees of freedom
## AIC: 239.6
## 
## Number of Fisher Scoring iterations: 7
OR <- exp(ajuste$coefficients[2])
IC_OR<-exp(confint(ajuste))[2,]
## Waiting for profiling to be done...

Se cumplen los supuestos del modelo y AC fue significativo en la predicción de consumo de alcohol (\(OR\) = 2.09; \(IC_{95}\) = [1.19; 3.87]). De acuerdo a este resultado por cada unidad que aumenta la apertura al cambio, el riesgo de presentar una frecuencia de CEEA elevada aumenta en un 109.06%.

Hosmer-Lemenshow

Test de bondad de ajuste para evaluar si los datos dan evidencia de que el modelo propuesto es válido. Se busca NO rechazar.

htest <- hoslem.test(base$alcohol_3, ajuste$fitted.values, g=1)
## Warning in pchisq(chisq, g - 2): NaNs produced
htest
## 
##  Hosmer and Lemeshow goodness of fit (GOF) test
## 
## data:  base$alcohol_3, ajuste$fitted.values
## X-squared = 1.4792e-16, df = -1, p-value = NA
sum(htest$expected<5) # Si hay menores que 5 tengo que rearmar los grupos
## [1] 0
# con el argumento "g" para que sea válido el test (arranqué en 10 y fui bajando)

No se encontró una solución válida para el test de HL por tener valores esperados inferiores a 5 incluso dividiendo en solo dos grupos.

Curva ROC

Primero divido a la muestra en entrenamiento (70%) y testeo (30%) y luego estimo la curva ROC para encontrar el punto de corte óptimo.

set.seed(195)
train<-sample(1:nrow(base), nrow(base)*0.7)

ajuste2<-glm(alcohol_3~AC+edad, data=base, family=binomial, subset=train)

clase<-base$alcohol_3[-train]
ajustados<-predict(ajuste2,newdata = base[-train,],type="response")
ROC <- rocit(score=ajustados,class=clase)
distancia <- sqrt(ROC$FPR^2 +(ROC$TPR-1)^2)
plot(ROC)

plot(ROC$Cutoff,distancia,pch=20)

minimo <- ROC$Cutoff[which.min(distancia)]
tita<-minimo
ajustados1<-predict(ajuste2,newdata = base[-train,],type="response")
predichos1<-ifelse(ajustados1>tita,1,0)
confusion<-table(base$alcohol_3[-train], predichos1)
tasa_error_te1<-mean(base$alcohol_3[-train]!=predichos1) 

sensibilidad<-confusion[2,2]/sum(confusion[2,]) # capacidad del modelo para detectar los positivos
especificidad<-confusion[1,1]/sum(confusion[1,]) #capacidad del modelo para detectar los negativos

Tasa de error en la predicción

A partir de la curva ROC encontramos que para la predicción con este modelo el punto de corte ideal (el más cercano al punto de mayor sensibilidad y especificidad) es p=0.0435. Con ese punto de corte conformamos una tabla de confusión con la submuestra de testeo y obtenemos una tasa de error en la predicción del 24%, con una especificidad moderada (76.32%) y baja sensibilidad (66.67%).

confusion
##    predichos1
##       0   1
##   0 203  63
##   1   3   6

Pred.: Conservación (C)

ajuste<-glm(alcohol_3~C+edad, data=base, family=binomial)
# plot(simulateResiduals(ajuste))
anova(mod_edad, ajuste, test = "Chisq")
## Analysis of Deviance Table
## 
## Model 1: alcohol_3 ~ edad
## Model 2: alcohol_3 ~ C + edad
##   Resid. Df Resid. Dev Df Deviance Pr(>Chi)  
## 1       912     240.35                       
## 2       911     236.64  1   3.7085  0.05413 .
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
summary(ajuste)
## 
## Call:
## glm(formula = alcohol_3 ~ C + edad, family = binomial, data = base)
## 
## Coefficients:
##             Estimate Std. Error z value Pr(>|z|)    
## (Intercept) -16.7865     2.7219  -6.167 6.95e-10 ***
## C            -0.4328     0.2290  -1.889   0.0588 .  
## edad          0.9156     0.1535   5.967 2.42e-09 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 290.54  on 913  degrees of freedom
## Residual deviance: 236.64  on 911  degrees of freedom
## AIC: 242.64
## 
## Number of Fisher Scoring iterations: 7
OR <- exp(ajuste$coefficients[2])
IC_OR<-exp(confint(ajuste))[2,]
## Waiting for profiling to be done...

Se cumplen los supuestos del modelo y C tuvo una significación marginal en la predicción de consumo de alcohol (\(OR\) = 0.65; \(IC_{95}\) = [0.41; 1.01]). De acuerdo a este resultado por cada unidad que aumenta la conservación, el riesgo de presentar una frecuencia de consumo elevada disminuye en un 35.13%.

Hosmer-Lemenshow

Test de bondad de ajuste para evaluar si los datos dan evidencia de que el modelo propuesto es válido. Se busca NO rechazar.

htest <- hoslem.test(base$alcohol_3, ajuste$fitted.values, g=1)
## Warning in pchisq(chisq, g - 2): NaNs produced
htest
## 
##  Hosmer and Lemeshow goodness of fit (GOF) test
## 
## data:  base$alcohol_3, ajuste$fitted.values
## X-squared = 3.2757e-17, df = -1, p-value = NA
sum(htest$expected<5) # Si hay menores que 5 tengo que rearmar los grupos
## [1] 0
# con el argumento "g" para que sea válido el test (arranqué en 10 y fui bajando)

No se encontró una solución válida para el test de HL por tener valores esperados inferiores a 5 incluso dividiendo en solo dos grupos.

Curva ROC

Primero divido a la muestra en entrenamiento (70%) y testeo (30%) y luego estimo la curva ROC para encontrar el punto de corte óptimo.

set.seed(195)
train<-sample(1:nrow(base), nrow(base)*0.7)

ajuste2<-glm(alcohol_3~C+edad, data=base, family=binomial, subset=train)

clase<-base$alcohol_3[-train]
ajustados<-predict(ajuste2,newdata = base[-train,],type="response")
ROC <- rocit(score=ajustados,class=clase)
distancia <- sqrt(ROC$FPR^2 +(ROC$TPR-1)^2)
plot(ROC)

plot(ROC$Cutoff,distancia,pch=20)

minimo <- ROC$Cutoff[which.min(distancia)]
tita<-minimo
ajustados1<-predict(ajuste2,newdata = base[-train,],type="response")
predichos1<-ifelse(ajustados1>tita,1,0)
confusion<-table(base$alcohol_3[-train], predichos1)
tasa_error_te1<-mean(base$alcohol_3[-train]!=predichos1) 

sensibilidad<-confusion[2,2]/sum(confusion[2,]) # capacidad del modelo para detectar los positivos
especificidad<-confusion[1,1]/sum(confusion[1,]) #capacidad del modelo para detectar los negativos

Tasa de error en la predicción

A partir de la curva ROC encontramos que para la predicción con este modelo el punto de corte ideal (el más cercano al punto de mayor sensibilidad y especificidad) es p=0.0659. Con ese punto de corte conformamos una tabla de confusión con la submuestra de testeo y obtenemos una tasa de error en la predicción del 18.55%, con una especificidad alta (82.33%) y sensibilidad baja (55.56%).

confusion
##    predichos1
##       0   1
##   0 219  47
##   1   4   5

Modelo final (Audit 3)

Se tomó como punto de base el modelo con edad y apertura al cambio por ser el que obtuvo una menor deviance y se comparó con el modelo que además tenía conservación.

mod_AC<-glm(alcohol_3~edad+AC, data=base, family=binomial)
mod_total <- glm(alcohol_3~edad+AC+C, data=base, family=binomial)
# plot(simulateResiduals(mod_total))
anova(mod_AC, mod_total, test = "Chisq")
## Analysis of Deviance Table
## 
## Model 1: alcohol_3 ~ edad + AC
## Model 2: alcohol_3 ~ edad + AC + C
##   Resid. Df Resid. Dev Df Deviance Pr(>Chi)  
## 1       911     233.60                       
## 2       910     227.44  1   6.1663  0.01302 *
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
summary(mod_total)
## 
## Call:
## glm(formula = alcohol_3 ~ edad + AC + C, family = binomial, data = base)
## 
## Coefficients:
##             Estimate Std. Error z value Pr(>|z|)    
## (Intercept) -21.6098     3.3828  -6.388 1.68e-10 ***
## edad          0.9636     0.1610   5.984 2.18e-09 ***
## AC            0.8842     0.3109   2.844  0.00446 ** 
## C            -0.5480     0.2257  -2.429  0.01516 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 290.54  on 913  degrees of freedom
## Residual deviance: 227.44  on 910  degrees of freedom
## AIC: 235.44
## 
## Number of Fisher Scoring iterations: 7
OR_edad <- exp(mod_total$coefficients[2])
OR_AC <- exp(mod_total$coefficients[3])
OR_C <- exp(mod_total$coefficients[4])
IC_OR_edad<-exp(confint(mod_total))[2,]
## Waiting for profiling to be done...
IC_OR_AC<-exp(confint(mod_total))[3,]
## Waiting for profiling to be done...
IC_OR_C<-exp(confint(mod_total))[4,]
## Waiting for profiling to be done...
R2 <- NagelkerkeR2(mod_total)$R2

Se cumplen los supuestos del modelo y edad, conservación y apertura al cambio fueron significativos en la predicción de consumo de alcohol (\(OR_{edad}\) = 2.62, \(IC_{95}\) = [1.95; 3.68]; \(OR_{Conservacion}\) = 0.58, \(IC_{95}\) = [0.37; 0.89]; \(OR_{AperturaAlCambio}\) = 2.42, \(IC_{95}\) = [1.35; 4.59]). De acuerdo a este resultado, manteniendo fijas las demás variables, el riesgo de presentar una frecuencia alta de CEEA es 162.12% mayor por cada año que aumenta la edad, 142.09% mayor por cada unidad que aumenta la apertura al cambio y 42.19% menor por cada unidad que aumenta la conservación.

A partir del pseudo-R2 de Nagelkerke (\(R^2\) = 0.245) se estima que el modelo propuesto explica el 24.5% de la variabilidad de Audit 3.

Hosmer-Lemenshow

Test de bondad de ajuste para evaluar si los datos dan evidencia de que el modelo propuesto es válido. Se busca NO rechazar.

htest <- hoslem.test(base$alcohol_3, mod_total$fitted.values, g=1)
## Warning in pchisq(chisq, g - 2): NaNs produced
htest
## 
##  Hosmer and Lemeshow goodness of fit (GOF) test
## 
## data:  base$alcohol_3, mod_total$fitted.values
## X-squared = 1.5205e-15, df = -1, p-value = NA
sum(htest$expected<5) # Si hay menores que 5 tengo que rearmar los grupos
## [1] 0
# con el argumento "g" para que sea válido el test (arranqué en 10 y fui bajando)

No se encontró una solución válida para el test de HL por tener valores esperados inferiores a 5 incluso dividiendo en solo dos grupos.

Curva ROC

Primero divido a la muestra en entrenamiento (70%) y testeo (30%).

set.seed(195)
train<-sample(1:nrow(base), nrow(base)*0.7)

ajuste2<-glm(alcohol_3~edad+C+AC, data=base, family=binomial, subset=train)

clase<-base$alcohol_3[-train]
ajustados<-predict(ajuste2,newdata = base[-train,],type="response")
ROC <- rocit(score=ajustados,class=clase)
distancia <- sqrt(ROC$FPR^2 +(ROC$TPR-1)^2)
plot(ROC)

plot(ROC$Cutoff,distancia,pch=20)

minimo <- ROC$Cutoff[which.min(distancia)]
tita<-minimo
ajustados1<-predict(ajuste2,newdata = base[-train,],type="response")
predichos1<-ifelse(ajustados1>tita,1,0)
confusion<-table(base$alcohol_3[-train], predichos1)
tasa_error_te1<-mean(base$alcohol_3[-train]!=predichos1) 

sensibilidad<-confusion[2,2]/sum(confusion[2,]) # capacidad del modelo para detectar los positivos
especificidad<-confusion[1,1]/sum(confusion[1,]) #capacidad del modelo para detectar los negativos

Tasa de error en la predicción

A partir de la curva ROC encontramos que para la predicción con este modelo el punto de corte ideal (el más cercano al punto de mayor sensibilidad y especificidad) es p=0.0349. Con ese punto de corte conformamos una tabla de confusión con la submuestra de testeo y obtenemos una tasa de error en la predicción del 28.73%, con una moderada especificidad (71.05%) y sensibilidad (77.78%).

confusion
##    predichos1
##       0   1
##   0 189  77
##   1   2   7

Conclusiones

Edad

Como era de esperarse, en todos los modelos para predecir frecuencia de consumo, presencia de CEEA y frecuencia de CEEA la edad fue significativa, con ORs en los modelos finales de 2.18 para la frecuencia de consumo, 2.17 para la presencia de CEEA y 2.62 para la frecuencia de CEEA. De esta forma, la edad fue el único predictor significativo en todos los modelos, siendo que por cada año que aumenta la edad, el riesgo de presentar una frecuencia de consumo elevada, de presencia de CEEA y de frecuencia de CEEA elevada aumentan más del doble.

Sexo

El sexo fue significativo sólo en los cuatro modelos de predicción de la presencia de CEEA, con un OR en el modelo final de 0.48 para los varones. Es decir, las chances de presentar un patrón de consumo de riesgo (CEEA) en varones es un 51.98% menor que en mujeres. En la última EMSE algo de esto aparece, aunque no recuerdo si específicamente con la presencia de CEEA.

Valores

Los valores de autotrascendencia y de autopromoción no fueron predictores significativos en ninguno de los modelos.

Los valores de apertura al cambio permitieron predecir la probabilidad de presentar frecuencia alta de consumo (OR = 3.07) y frecuencia alta de CEEA (OR = 2.42), pero no presencia de CEEA. Que los motivos por los que se comportan como se comportan estén vinculados a la búsqueda de autonomía e independencia, de estimulación, y de disfrute y placer aumenta el riesgo de presentar una frecuencia de consumo y una frecuencia de CEEA elevadas.

Los valores de conservación (i.e., seguridad, tradición y conformidad) predijeron significativamente la probabilidad de frecuencia de consumo (OR = 0.42), la presencia de CEEA (OR = 0.7) y la frecuencia de CEEA (OR = 0.58). Es decir, al tener niveles más altos de conservación, el riesgo de tener una frecuencia de consumo elevada, de presentar CEEA y de tener una frecuencia de CEEA elevada disminuye.

Modelos finales

Frecuencia de consumo

La edad, la conservación y la apertura al cambio fueron significativos en la predicción de consumo de alcohol (\(OR_{edad}\) = 2.18, \(IC_{95}\) = [1.65; 2.97]; \(OR_{Conservacion}\) = 0.42, \(IC_{95}\) = [0.26; 0.66]; \(OR_{AperturaAlCambio}\) = 3.07, \(IC_{95}\) = [1.67; 6.05]). De acuerdo a este resultado, manteniendo fijas las demás variables, el riesgo de presentar una frecuencia alta de consumo es 118% mayor por cada año que aumenta la edad, 207% mayor por cada unidad que aumenta la apertura al cambio y 58% menor por cada unidad que aumenta la conservación.

A partir del pseudo-R2 de Nagelkerke (\(R^2\) = 0.231) se estima que el modelo propuesto explica el 23.05% de la variabilidad de la frecuencia de consumo.

Se estimó la capacidad del modelo para detectar los casos positivos (sensibilidad), para detectar los casos negativos (especificidad) y la tasa global de error, a través de la técnica de validación cruzada, con punto de corte definido a través de curvas ROC. Los resultados indicaron una capacidad predictiva moderada, con una sensibilidad del 71.43%, una especificidad del 72.01% y una tasa de error total del 28%.

Presencia de CEEA

La edad, el sexo y la conservación fueron significativos en la predicción de consumo de alcohol (\(OR_{edad}\) = 2.17, \(IC_{95}\) = [1.8; 2.66]; \(OR_{sexo}\) = 0.48, \(IC_{95}\) = [0.28; 0.81]; \(OR_{Conservación}\) = 0.7, \(IC_{95}\) = [0.51; 0.95]). De acuerdo a este resultado, manteniendo fijas las demás variables, el riesgo de presentar un consumo de tipo CEEA es 117% mayor por cada año que aumenta la edad, 30% menor por cada unidad que aumenta la conservación y 52% menor entre los varones respecto de las mujeres.

A partir del pseudo-R2 de Nagelkerke (\(R^2\) = 0.213) se estima que el modelo propuesto explica el 21.31% de la variabilidad en la presencia de CEEA.

Se estimó la capacidad del modelo para detectar los casos positivos (sensibilidad), para detectar los casos negativos (especificidad) y la tasa global de error, a través de la técnica de validación cruzada, con punto de corte definido a través de curvas ROC. Los resultados indicaron una capacidad predictiva moderada, con una sensibilidad del 73.91%, una especificidad del 71.83% y una tasa de error total del 28%.

Frecuencia de CEEA

La edad, la conservación y la apertura al cambio fueron significativos en la predicción de consumo de alcohol (\(OR_{edad}\) = 2.62, \(IC_{95}\) = [1.95; 3.68]; \(OR_{Conservacion}\) = 0.58, \(IC_{95}\) = [0.37; 0.89]; \(OR_{AperturaAlCambio}\) = 2.42, \(IC_{95}\) = [1.35; 4.59]). De acuerdo a este resultado, manteniendo fijas las demás variables, el riesgo de presentar una frecuencia de CEEA elevada es 162% mayor por cada año que aumenta la edad, 142% mayor por cada unidad que aumenta la apertura al cambio y 42% menor por cada unidad que aumenta la conservación.

A partir del pseudo-R2 de Nagelkerke (\(R^2\) = 0.245) se estima que el modelo propuesto explica el 24.5% de la variabilidad de la frecuencia de consumo.

Se estimó la capacidad del modelo para detectar los casos positivos (sensibilidad), para detectar los casos negativos (especificidad) y la tasa global de error, a través de la técnica de validación cruzada, con punto de corte definido a través de curvas ROC. Los resultados indicaron una capacidad predictiva moderada, con una sensibilidad del 77.78%, una especificidad del 71.05% y una tasa de error total del 28.73%.

Análisis para el artículo

MDS

Beramendi y Zubieta (2017):

Based on previous work (Bilsky et al., 2011; Bilsky & Janik, 2010; Cieciuch & Schwartz, 2012), a two-dimensional ordinal MDS analysis was run as a confirmatory technique. This approach specifies a starting configuration that assigns every item to its place in the theorized circular structure of values. The ten values are represented in nine sectors, one of these is divided into inner (conformity) and outer (tradition) subsector. Each of the nine sectors cover an angle of 40 degrees to calculate theory-based coordinates for the items that index each value. The coordinates are determined trigonometrically by referring to the unit circle and summarizing them in the design matrix. To calculate the MDS analyses, the raw value scores were used (Schwartz, 2002).


Resultados de Beramendi y Zubieta (2017):

knitr::include_graphics("zubieta21_2.png")

The PVQ-21 Stress-1 index of 0.07 indicates that the projection represents the good underlying covariance matrix. These results are similar to those of previous findings (e.g., Bilsky et al., 2011; Bilsky & Janik, 2010; Cieciuch & Schwartz, 2012; Cieciuch et al., 2013).

The results of MDS indicate that the model has a good fit with some differences that appear in the circular motivational model values. As Fig. 3 shows, the two orthogonal dimensions (i.e., SE v. ST & OC v. C) exhibit an accurate location in the MDS analysis. However in each bipolar dimension, values are not placed as expected; hence the shared motivation of adjacent values is not fulfilled.

Self-Transcendence: Benevolence and universalism values are mixed in one value.

Openness to Change: Stimulation and hedonism values are inverted.

Conservation: Conformity and tradition exchange their positions with security.

Self-Enhancement: both values are adjacent but their neighboring values are not the expected ones; power is next to conformity and tradition, and achievement is close to stimulation.

coords_teoricas <- read.csv("startMDS.csv")


r <- cor(base[27:47])
diss <- sim2diss(r, method="corr")
res <- mds(delta=diss, type="ordinal", init = coords_teoricas) ## ordinal MDS
res
## 
## Call:
## mds(delta = diss, type = "ordinal", init = coords_teoricas)
## 
## Model: Symmetric SMACOF 
## Number of objects: 21 
## Stress-1 value: 0.142 
## Number of iterations: 32
# Permutation test para ver si el Stress es menor que el de data permutada
permu <- permtest(res, verbose = F)
permu
## 
## Call: permtest.smacof(object = res, verbose = F)
## 
## SMACOF Permutation Test
## Number of objects: 21 
## Number of replications (permutations): 100 
## 
## Observed stress value: 0.142 
## p-value: <0.001

En nuestra muestra, el índice Stress-1 fue aceptable (Stress-1 = 0.14; Bartholomew et al., 2008), dado que se busca que sea lo más cercano a 0 posible. Además, al aplicar el test de permutación (Mair et al., 2016) se encontró que este indicador es significativamente menor respecto al obtenido con datos permutados (p < .001).

plot(res, main="",xlab="",ylab="", xlim=c(-1,1),ylim=c(-1,1), pch=20, cex=1, asp=1, col=c("#f35652","#22c0e6","#60d347","#22c0e6","#fe8f43","#f35652", "#fe8f43", "#60d347", "#fe8f43", "#f35652", "#f35652", "#60d347", "#22c0e6", "#fe8f43", "#f35652", "#fe8f43", "#22c0e6", "#60d347", "#60d347", "#fe8f43", "#f35652"))
segments(0,0,cos(350*pi/180)*100,sin(350*pi/180)*100, col="darkgrey",lty=2)
segments(0,0,cos(312*pi/180)*100,sin(312*pi/180)*100, col="darkgrey",lty=2)
segments(0,0,cos(277*pi/180)*100,sin(277*pi/180)*100, col="darkgrey",lty=2)
segments(0,0,cos(260*pi/180)*.85,sin(260*pi/180)*.85, col="darkgrey",lty=2);segments(cos(260*pi/180)*.85,sin(260*pi/180)*.85,-1.5,-1.5, col="darkgrey",lty=2)
segments(0,0,cos(215*pi/180)*100,sin(215*pi/180)*100, col="darkgrey",lty=2)
segments(0,0,cos(162*pi/180)*100,sin(162*pi/180)*100, col="darkgrey",lty=2);segments(cos(162*pi/180)*.47,sin(162*pi/180)*.47,cos(117*pi/180)*.7,sin(117*pi/180)*.7, col="darkgrey",lty=2)
segments(0,0,cos(117*pi/180)*100,sin(117*pi/180)*100, col="darkgrey",lty=2)
segments(0,0,cos(87*pi/180)*100,sin(87*pi/180)*100, col="darkgrey",lty=2)
segments(0,0,cos(50*pi/180)*100,sin(50*pi/180)*100, col="darkgrey",lty=2)
plotrix::draw.ellipse(.77,-.15,.1,.2, border="red")

En la distribución espacial de la solución encontrada se aprecia una inversión de los ítems 16 (conformidad) y 20 (tradición), ambos se encuentran a la misma distancia del centro y no en el mismo sector, como se teoriza. Además, Benevolencia y Universalismo están invertidos, quedando el primero del lado de la Apertura al cambio y el segundo, de la Conservación. Esto último también les pasó a Beramendi y Zubieta (2017) con el PVQ-40, y con el PVQ-21 (el que usamos nosotrxs) les quedaron mezclados universalismo y benevolencia en un único sector.

Conclusión MDS

A pesar de los pequeños inconvenientes, la estructura general respeta la distribución teórica. Esto y el indicador Stress-1 aceptable permiten pasar al siguiente paso (CFA con estrategia de lupa). Dada la configuración obtenida, los valores de hedonismo serán considerados como parte de Apertura al cambio.


CFA

Beramendi y Zubieta (2017):

As Cieciuch and Schwartz (2012) recommended, after MDS with acceptable Stress-1 indexes is obtained, a specific kind of CFA called “Magnifying Glass Strategy” must be carried out.

To confirm PVQ versions, four models were conducted to analyze each higher order value: Self-Enhancement, Sel-Transcendence, Opennes to Change, and Conservation (Cieciuch & Schwartz, 2012). Following previous articles (Cieciuch & Davidov, 2012; Cieciuch & Schwartz, 2012; Cieciuch et al., 2013; Cieciuch, Davidov, Vecchione, Beierlein & Schwartz, 2014), four different global fit indexes were considered: The root mean square error of approximation (RMSEA), Probability of Clos Fit (PCLOSE), Comparative Fit Index (CFI), and Standardized Root Mean Square Residual (SRMR).


Resultados de Beramendi y Zubieta (2017):

knitr::include_graphics("zubietaCFA.png")

All the dimensions show an acceptable fit, with ST and SE having a better fit. However, Fig. 5 shows collinearity between benevolence and universalism, and between achievement and power values.

knitr::include_graphics("zubietaCFA_p.png")

El primer paso para ajustar un modelo de CFA es evaluar qué estimador utilizar y, para ello, se debe evaluar la normalidad multivariada, cosa que no tendría sentido cuando las variables originales son de escala likert (ordinales). Sin embargo, Gana y Broc (2019) indican que es posible utilizar máxima verosimilitud si las categorías de respuesta superan las 6 opciones y en este caso se usaron 6 categorías de respuesta. De todos modos, también se ajustará el modelo con mínimos cuadrados no ponderados (ULS), un estimador que no asume normalidad multivariada y que produce cargas factoriales más exactas y precisas que mínimos cuadrados ponderados con media y varianza ajustada (WLSMV; Forero et al., 2009), alternativa frecuentemente sugerida para datos ordinales. Se compararán los indicadores de ajuste para seleccionar aquel que funcione mejor.

Autotrascendencia

mod <- ' universalism =~ un03 + un08 + un19
         benevolence =~ be12 + be18
        '
fit_ml <- cfa(mod, estimator="ML", data=base)
fit_uls <- cfa(mod, estimator="ULS", data=base)


tabla_ajustes_AT <- as.data.frame(rbind(fitmeasures(fit_ml)[c("cfi","rmsea","srmr","rmsea.pvalue")],
                    fitmeasures(fit_uls)[c("cfi","rmsea","srmr","rmsea.pvalue")]))
tabla_ajustes_AT <- cbind(c("ML","ULS"),
                       c(fitmeasures(fit_ml)[c("chisq")]/fitmeasures(fit_ml)[c("df")],
                         fitmeasures(fit_uls)[c("chisq")]/fitmeasures(fit_uls)[c("df")]),
                       tabla_ajustes_AT)
colnames(tabla_ajustes_AT) <- c("Estimador","X2/gl","CFI","RMSEA","SRMR", "PCLOSE")
tabla_ajustes_AT[,2:6] <- round(tabla_ajustes_AT[,2:6],3)

kable(tabla_ajustes_AT,
      "html",
      booktabs = T,
      align = c("r"),
      caption = "Indicadores de ajuste según estimador") %>%
  kable_styling(full_width = F,
                position = "center", font_size = 12)
Indicadores de ajuste según estimador
Estimador X2/gl CFI RMSEA SRMR PCLOSE
ML 0.999 1 0 0.011 0.95
ULS 0.524 1 0 0.012 0.99

Si bien ambos ajustes obtuvieron muy buenos indicadores de bondad de ajuste absolutos (\(SRMR \le 0.08\)), incrementales (\(CFI \ge 0.95\)) y parsimoniosos (\(RMSEA \le 0.05\) y \(PCLOSE \ge 0.05\)) de acuerdo con los criterios de Gana y Broc (2019), el ajuste con ULS superó en bondad de ajuste al realizado con ML en la mayoría de los indicadores.

summary(fit_uls, fit.measures = F, standardized=T)
## lavaan 0.6.15 ended normally after 26 iterations
## 
##   Estimator                                        ULS
##   Optimization method                           NLMINB
##   Number of model parameters                        11
## 
##   Number of observations                           914
## 
## Model Test User Model:
##                                                       
##   Test statistic                                 2.095
##   Degrees of freedom                                 4
##   P-value (Unknown)                                 NA
## 
## Parameter Estimates:
## 
##   Standard errors                             Standard
##   Information                                 Expected
##   Information saturated (h1) model        Unstructured
## 
## Latent Variables:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   universalism =~                                                       
##     un03              1.000                               0.667    0.619
##     un08              1.022    0.074   13.805    0.000    0.682    0.582
##     un19              1.025    0.074   13.805    0.000    0.684    0.581
##   benevolence =~                                                        
##     be12              1.000                               0.637    0.728
##     be18              0.739    0.065   11.370    0.000    0.471    0.594
## 
## Covariances:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   universalism ~~                                                       
##     benevolence       0.360    0.024   14.851    0.000    0.847    0.847
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##    .un03              0.716    0.053   13.425    0.000    0.716    0.617
##    .un08              0.910    0.055   16.693    0.000    0.910    0.662
##    .un19              0.918    0.055   16.783    0.000    0.918    0.662
##    .be12              0.359    0.066    5.432    0.000    0.359    0.470
##    .be18              0.407    0.046    8.942    0.000    0.407    0.648
##     universalism      0.445    0.042   10.638    0.000    1.000    1.000
##     benevolence       0.406    0.057    7.088    0.000    1.000    1.000
plot_AT <- semPaths(# Argumentos globales
          fit_uls, what="diagram", whatLabels="std",layout="tree3", rotation = 4, width=50, height=35,exoVar = F,
         # Etiquetas
          label.cex=c(rep(1,7)), 
          edge.label.cex = c(rep(1,11)),
         # Forma de los nodos (latentes)
          nCharNodes = 0, sizeLat = 15,sizeLat2 = 10,border.width=2,
         # Forma de las flechas
          edge.width=2,asize=2,curvePivot=T, 
         # Color
         border.color = "#BFB29E", edge.color = "#BFB29E", edge.label.bg = "#141415", title.color = "#BFB29E", label.color="#BFB29E",bg="transparent", trans=T, vTrans=0
         
         )

Autopromoción

mod <- ' power =~ po02 + po17
         achievement =~ ac13 + ac04
        '
fit_ml <- cfa(mod, estimator="ML", data=base)
fit_uls <- cfa(mod, estimator="ULS", data=base)


tabla_ajustes_AP <- as.data.frame(rbind(fitmeasures(fit_ml)[c("cfi","rmsea","srmr","rmsea.pvalue")],
                    fitmeasures(fit_uls)[c("cfi","rmsea","srmr","rmsea.pvalue")]))
tabla_ajustes_AP <- cbind(c("ML","ULS"),
                       c(fitmeasures(fit_ml)[c("chisq")]/fitmeasures(fit_ml)[c("df")],
                         fitmeasures(fit_uls)[c("chisq")]/fitmeasures(fit_uls)[c("df")]),
                       tabla_ajustes_AP)
colnames(tabla_ajustes_AP) <- c("Estimador","X2/gl","CFI","RMSEA","SRMR", "PCLOSE")
tabla_ajustes_AP[,2:6] <- round(tabla_ajustes_AP[,2:6],3)

kable(tabla_ajustes_AP,
      "html",
      booktabs = T,
      align = c("r"),
      caption = "Indicadores de ajuste según estimador") %>%
  kable_styling(full_width = F,
                position = "center", font_size = 12)
Indicadores de ajuste según estimador
Estimador X2/gl CFI RMSEA SRMR PCLOSE
ML 1.031 1 0.006 0.006 0.696
ULS 1.375 1 0.020 0.006 0.636

Si bien ambos ajustes obtuvieron muy buenos indicadores de bondad de ajuste absolutos (\(SRMR \le 0.08\)), incrementales (\(CFI \ge 0.95\)) y parsimoniosos (\(RMSEA \le 0.05\) y \(PCLOSE \ge 0.05\)) de acuerdo con los criterios de Gana y Broc (2019), el ajuste con ML superó en bondad de ajuste al realizado con ULS en la mayoría de los indicadores.

summary(fit_uls, fit.measures = F, standardized=T)
## lavaan 0.6.15 ended normally after 24 iterations
## 
##   Estimator                                        ULS
##   Optimization method                           NLMINB
##   Number of model parameters                         9
## 
##   Number of observations                           914
## 
## Model Test User Model:
##                                                       
##   Test statistic                                 1.375
##   Degrees of freedom                                 1
##   P-value (Unknown)                                 NA
## 
## Parameter Estimates:
## 
##   Standard errors                             Standard
##   Information                                 Expected
##   Information saturated (h1) model        Unstructured
## 
## Latent Variables:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   power =~                                                              
##     po02              1.000                               0.891    0.569
##     po17              1.080    0.041   26.233    0.000    0.962    0.617
##   achievement =~                                                        
##     ac13              1.000                               1.095    0.795
##     ac04              0.953    0.036   26.280    0.000    1.044    0.727
## 
## Covariances:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   power ~~                                                              
##     achievement       0.856    0.029   30.009    0.000    0.878    0.878
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##    .po02              1.662    0.054   30.593    0.000    1.662    0.677
##    .po17              1.502    0.060   24.981    0.000    1.502    0.619
##    .ac13              0.696    0.066   10.513    0.000    0.696    0.367
##    .ac04              0.974    0.062   15.783    0.000    0.974    0.472
##     power             0.794    0.043   18.429    0.000    1.000    1.000
##     achievement       1.199    0.057   20.916    0.000    1.000    1.000
plot_AP <- semPaths(# Argumentos globales
          fit_uls, what="diagram", whatLabels="std",layout="tree3", rotation = 4, width=50, height=35,exoVar = F,
         # Etiquetas
          label.cex=c(rep(1,4),.75,1), 
          edge.label.cex = c(rep(1,9)),
         # Forma de los nodos (latentes)
          nCharNodes = 0, sizeLat = 15,sizeLat2 = 10,border.width=2,
         # Forma de las flechas
          edge.width=2,asize=2,curvePivot=T, 
         # Color
         border.color = "#BFB29E", edge.color = "#BFB29E", edge.label.bg = "#141415", title.color = "#BFB29E", label.color="#BFB29E",bg="transparent", trans=T, vTrans=0
         
         )

Apertura al cambio

mod <- ' selfdirection =~ sd01 + sd11 
         stimulation =~ st06 + st15
         hedonism =~ he10 + he21
        '
fit_ml <- cfa(mod, estimator="ML", data=base)
fit_uls <- cfa(mod, estimator="ULS", data=base)


tabla_ajustes_AC <- as.data.frame(rbind(fitmeasures(fit_ml)[c("cfi","rmsea","srmr","rmsea.pvalue")],
                    fitmeasures(fit_uls)[c("cfi","rmsea","srmr","rmsea.pvalue")]))
tabla_ajustes_AC <- cbind(c("ML","ULS"),
                       c(fitmeasures(fit_ml)[c("chisq")]/fitmeasures(fit_ml)[c("df")],
                         fitmeasures(fit_uls)[c("chisq")]/fitmeasures(fit_uls)[c("df")]),
                       tabla_ajustes_AC)
colnames(tabla_ajustes_AC) <- c("Estimador","X2/gl","CFI","RMSEA","SRMR", "PCLOSE")
tabla_ajustes_AC[,2:6] <- round(tabla_ajustes_AC[,2:6],3)

kable(tabla_ajustes_AC,
      "html",
      booktabs = T,
      align = c("r"),
      caption = "Indicadores de ajuste según estimador") %>%
  kable_styling(full_width = F,
                position = "center", font_size = 12)
Indicadores de ajuste según estimador
Estimador X2/gl CFI RMSEA SRMR PCLOSE
ML 12.052 0.946 0.110 0.044 0.000
ULS 6.924 0.986 0.081 0.046 0.013

Ambos ajustes obtuvieron buenos indicadores de bondad de ajuste absolutos (SRMR) e incrementales (CFI). En cuanto a los indicadortes parsimoniosos, el ajuste con ULS (al límite de ser buen ajuste) obtuvo mejores niveles de RMSEA que ML (ajuste pobre).

summary(fit_uls, fit.measures = F, standardized=T)
## lavaan 0.6.15 ended normally after 32 iterations
## 
##   Estimator                                        ULS
##   Optimization method                           NLMINB
##   Number of model parameters                        15
## 
##   Number of observations                           914
## 
## Model Test User Model:
##                                                       
##   Test statistic                                41.547
##   Degrees of freedom                                 6
##   P-value (Unknown)                                 NA
## 
## Parameter Estimates:
## 
##   Standard errors                             Standard
##   Information                                 Expected
##   Information saturated (h1) model        Unstructured
## 
## Latent Variables:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   selfdirection =~                                                      
##     sd01              1.000                               0.670    0.570
##     sd11              0.863    0.049   17.506    0.000    0.578    0.596
##   stimulation =~                                                        
##     st06              1.000                               0.825    0.682
##     st15              1.189    0.064   18.563    0.000    0.981    0.766
##   hedonism =~                                                           
##     he10              1.000                               0.516    0.589
##     he21              1.445    0.110   13.187    0.000    0.746    0.763
## 
## Covariances:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   selfdirection ~~                                                      
##     stimulation       0.494    0.025   19.408    0.000    0.894    0.894
##     hedonism          0.252    0.020   12.485    0.000    0.729    0.729
##   stimulation ~~                                                        
##     hedonism          0.266    0.020   13.240    0.000    0.624    0.624
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##    .sd01              0.934    0.057   16.449    0.000    0.934    0.675
##    .sd11              0.608    0.048   12.739    0.000    0.608    0.645
##    .st06              0.780    0.057   13.764    0.000    0.780    0.534
##    .st15              0.678    0.073    9.290    0.000    0.678    0.414
##    .he10              0.501    0.045   11.132    0.000    0.501    0.653
##    .he21              0.401    0.072    5.575    0.000    0.401    0.419
##     selfdirection     0.449    0.046    9.732    0.000    1.000    1.000
##     stimulation       0.680    0.046   14.781    0.000    1.000    1.000
##     hedonism          0.267    0.031    8.726    0.000    1.000    1.000
plot_AC <- semPaths(# Argumentos globales
          fit_uls, what="diagram", whatLabels="std",layout="tree3", rotation = 4, width=50, height=35,exoVar = F,
         # Etiquetas
          label.cex=c(rep(1,9)), 
          edge.label.cex = c(rep(1,15)),
         # Forma de los nodos (latentes)
          nCharNodes = 0, sizeLat = 15,sizeLat2 = 10,border.width=2,
         # Forma de las flechas
          edge.width=2,asize=2,curvePivot=T, 
         # Color
         border.color = "#BFB29E", edge.color = "#BFB29E", edge.label.bg = "#141415", title.color = "#BFB29E", label.color="#BFB29E",bg="transparent", trans=T, vTrans=0
         
         )

Conservación

mod <- ' security =~ se05 + se14
         conformity =~ co07 + co16
         tradition =~ tr09 + tr20
        '
fit_ml <- cfa(mod, estimator="ML", data=base)
fit_uls <- cfa(mod, estimator="ULS", data=base)


tabla_ajustes_C <- as.data.frame(rbind(fitmeasures(fit_ml)[c("cfi","rmsea","srmr","rmsea.pvalue")],
                    fitmeasures(fit_uls)[c("cfi","rmsea","srmr","rmsea.pvalue")]))
tabla_ajustes_C <- cbind(c("ML","ULS"),
                       c(fitmeasures(fit_ml)[c("chisq")]/fitmeasures(fit_ml)[c("df")],
                         fitmeasures(fit_uls)[c("chisq")]/fitmeasures(fit_uls)[c("df")]),
                       tabla_ajustes_C)
colnames(tabla_ajustes_C) <- c("Estimador","X2/gl","CFI","RMSEA","SRMR", "PCLOSE")
tabla_ajustes_C[,2:6] <- round(tabla_ajustes_C[,2:6],3)

kable(tabla_ajustes_C,
      "html",
      booktabs = T,
      align = c("r"),
      caption = "Indicadores de ajuste según estimador") %>%
  kable_styling(full_width = F,
                position = "center", font_size = 12)
Indicadores de ajuste según estimador
Estimador X2/gl CFI RMSEA SRMR PCLOSE
ML 4.951 0.956 0.066 0.03 0.117
ULS 12.936 0.979 0.114 0.03 0.000

Ambos ajustes obtuvieron buenos indicadores de bondad de ajuste absolutos (SRMR) e incrementales (CFI). En cuanto a los indicadortes parsimoniosos, el ajuste con ML obtuvo mejores niveles de RMSEA que ULS (ajuste pobre).

summary(fit_uls, fit.measures = F, standardized=T)
## lavaan 0.6.15 ended normally after 33 iterations
## 
##   Estimator                                        ULS
##   Optimization method                           NLMINB
##   Number of model parameters                        15
## 
##   Number of observations                           914
## 
## Model Test User Model:
##                                                       
##   Test statistic                                77.613
##   Degrees of freedom                                 6
##   P-value (Unknown)                                 NA
## 
## Parameter Estimates:
## 
##   Standard errors                             Standard
##   Information                                 Expected
##   Information saturated (h1) model        Unstructured
## 
## Latent Variables:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   security =~                                                           
##     se05              1.000                               0.667    0.503
##     se14              1.294    0.070   18.500    0.000    0.863    0.556
##   conformity =~                                                         
##     co07              1.000                               0.809    0.555
##     co16              1.187    0.055   21.554    0.000    0.961    0.640
##   tradition =~                                                          
##     tr09              1.000                               0.390    0.307
##     tr20              1.644    0.095   17.313    0.000    0.641    0.405
## 
## Covariances:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   security ~~                                                           
##     conformity        0.397    0.022   18.379    0.000    0.736    0.736
##     tradition         0.243    0.017   14.443    0.000    0.935    0.935
##   conformity ~~                                                         
##     tradition         0.348    0.021   16.835    0.000    1.103    1.103
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##    .se05              1.316    0.048   27.282    0.000    1.316    0.747
##    .se14              1.668    0.067   24.722    0.000    1.668    0.691
##    .co07              1.471    0.053   27.824    0.000    1.471    0.692
##    .co16              1.329    0.067   19.874    0.000    1.329    0.590
##    .tr09              1.456    0.040   36.665    0.000    1.456    0.906
##    .tr20              2.087    0.068   30.709    0.000    2.087    0.836
##     security          0.445    0.035   12.670    0.000    1.000    1.000
##     conformity        0.654    0.041   15.878    0.000    1.000    1.000
##     tradition         0.152    0.022    6.918    0.000    1.000    1.000
plot_C <- semPaths(# Argumentos globales
          fit_uls, what="diagram", whatLabels="std",layout="tree3", rotation = 4, width=50, height=35,exoVar = F,
         # Etiquetas
          label.cex=c(rep(1,9)), 
          edge.label.cex = c(rep(1,15)),
         # Forma de los nodos (latentes)
          nCharNodes = 0, sizeLat = 15,sizeLat2 = 10,border.width=2,
         # Forma de las flechas
          edge.width=2,asize=2,curvePivot=T, 
         # Color
         border.color = "#BFB29E", edge.color = "#BFB29E", edge.label.bg = "#141415", title.color = "#BFB29E", label.color="#BFB29E",bg="transparent", trans=T, vTrans=0
         
         )

Conclusión CFAs

Los cuatro modelos presentaron muy buenos indicadores de bondad de ajuste. Sin embargo, como en Beramendi y Zubieta (2017), algunos valores presentaron una fuerte colinealidad. En este estudio, las asociaciones poder-logro (SE), autodirección-estimulación (OC), seguridad-tradición (C) y conformidad-tradición (C) presentaron cargas factoriales estandarizadas mayores a 0.85, indicador de multicolinealidad. En el caso específico de la asociación entre conformidad y tradición, este coeficiente superó el rango válido [-1; 1], aunque de acuerdo a Deegan (1978) esto….

knitr::include_graphics("zubietaCFA.png")

tabla_ajustes <- as.data.frame(rbind(tabla_ajustes_C[2,],
                                     tabla_ajustes_AT[2,],
                                     tabla_ajustes_AC[2,],
                                     tabla_ajustes_AP[2,]
                                     ))
tabla_ajustes[1] <- c("Conservation",
                      "Self-Transcendence",
                      "Openness to Change",
                      "Self-Enhancement")
colnames(tabla_ajustes)[1] <- "Modelo"

kable(tabla_ajustes,
      "html",
      booktabs = T,
      align = c("r"),
      caption = "Indicadores de ajuste para cada dimensión") %>%
  kable_styling(full_width = F,
                position = "center", font_size = 12)
Indicadores de ajuste para cada dimensión
Modelo X2/gl CFI RMSEA SRMR PCLOSE
2 Conservation 12.936 0.979 0.114 0.030 0.000
21 Self-Transcendence 0.524 1.000 0.000 0.012 0.990
22 Openness to Change 6.924 0.986 0.081 0.046 0.013
23 Self-Enhancement 1.375 1.000 0.020 0.006 0.636
knitr::include_graphics("zubietaCFA_p.png")

par(mfrow = c(2, 2))
plot(plot_AC)
plot(plot_C)
plot(plot_AT)
plot(plot_AP)

Conclusión psicométrica

Si bien el indicador de Stress-1 del MDS fue ligeramente peor que el obtenido por Beramendi y Zubieta (2017), sigue estando dentro de niveles aceptables e incluso es significativamente menor que el obtenido por permutaciones de la base de datos original. En lo que respecta a la distribución espacial, al igual que en estudios previos en el país (e.g., Beramendi y Zubieta, 2017) se observa una inversión de los valores universalismo y benevolencia y de los ítems 16 (conformidad) y 20 (tradición).

Los modelos de análisis factorial confirmatorio arrojaron indicadores de bondad de ajuste similares a los de la literatura previa (e.g., Beramendi y Zubieta, 2017). Asimismo, los problemas de multicolinealidad reportados en ese estudio también se presentan en esta población de adolescentes deportistas.

Por lo tanto, se concluye que en esta población el instrumento cuenta con propiedades psicométricas adecuadas y similares a las halladas en población general (Beramendi y Zubieta, 2017).

Regresiones: Audit 1

Primero se ajustó el modelo nulo y luego se compararon los AIC de ese modelo con un modelo sólo con edad y sólo con sexo.

mod_nulo<-glm(alcohol_1~1, data=base, family=binomial)
mod_edad <- glm(alcohol_1~edad, data=base, family=binomial)
mod_sexo <- glm(alcohol_1~sexo, data=base, family=binomial)
mod_base <- glm(alcohol_1~sexo+edad, data=base, family=binomial)

anova(mod_nulo, mod_edad, test = "Chisq")
## Analysis of Deviance Table
## 
## Model 1: alcohol_1 ~ 1
## Model 2: alcohol_1 ~ edad
##   Resid. Df Resid. Dev Df Deviance  Pr(>Chi)    
## 1       913     284.00                          
## 2       912     250.18  1   33.827 6.025e-09 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
anova(mod_nulo, mod_sexo, test = "Chisq")
## Analysis of Deviance Table
## 
## Model 1: alcohol_1 ~ 1
## Model 2: alcohol_1 ~ sexo
##   Resid. Df Resid. Dev Df Deviance Pr(>Chi)
## 1       913      284.0                     
## 2       912      281.7  1   2.3022   0.1292

El modelo con sexo como predictor no mejoró significativamente respecto del nulo. Sin embargo, en los siguientes modelos se incluyen ambos términos para controlar por sexo y edad.

Pred.: Autotrascendencia (AT)

ajuste<-glm(alcohol_1~AT+edad+sexo, data=base, family=binomial)
# # plot(simulateResiduals(ajuste))
anova(mod_base, ajuste, test = "Chisq")
## Analysis of Deviance Table
## 
## Model 1: alcohol_1 ~ sexo + edad
## Model 2: alcohol_1 ~ AT + edad + sexo
##   Resid. Df Resid. Dev Df Deviance Pr(>Chi)
## 1       911     249.42                     
## 2       910     249.28  1  0.14283   0.7055

Se cumplen los supuestos del modelo, pero AT no resultó significativo en la predicción de consumo de alcohol.

Pred.: Autopromoción (AP)

ajuste<-glm(alcohol_1~AP+edad+sexo, data=base, family=binomial)
# plot(simulateResiduals(ajuste))
anova(mod_base, ajuste, test = "Chisq")
## Analysis of Deviance Table
## 
## Model 1: alcohol_1 ~ sexo + edad
## Model 2: alcohol_1 ~ AP + edad + sexo
##   Resid. Df Resid. Dev Df Deviance Pr(>Chi)
## 1       911     249.42                     
## 2       910     249.15  1   0.2707   0.6029

Se cumplen los supuestos del modelo, pero AP no resultó significativo en la predicción de consumo de alcohol.

Pred.: Apertura al cambio (AC)

ajuste<-glm(alcohol_1~AC+edad+sexo, data=base, family=binomial)
# plot(simulateResiduals(ajuste))
anova(mod_base, ajuste, test = "Chisq")
## Analysis of Deviance Table
## 
## Model 1: alcohol_1 ~ sexo + edad
## Model 2: alcohol_1 ~ AC + edad + sexo
##   Resid. Df Resid. Dev Df Deviance Pr(>Chi)   
## 1       911     249.42                        
## 2       910     238.68  1   10.739 0.001049 **
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
summary(ajuste)
## 
## Call:
## glm(formula = alcohol_1 ~ AC + edad + sexo, family = binomial, 
##     data = base)
## 
## Coefficients:
##             Estimate Std. Error z value Pr(>|z|)    
## (Intercept) -20.3584     3.0927  -6.583 4.62e-11 ***
## AC            0.9601     0.3144   3.054  0.00226 ** 
## edad          0.7280     0.1404   5.185 2.16e-07 ***
## sexom         0.5152     0.3760   1.370  0.17063    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 284.00  on 913  degrees of freedom
## Residual deviance: 238.68  on 910  degrees of freedom
## AIC: 246.68
## 
## Number of Fisher Scoring iterations: 7
OR <- exp(ajuste$coefficients[2])
IC_OR<-exp(confint(ajuste))[2,]

Se cumplen los supuestos del modelo y AC fue significativo en la predicción de consumo de alcohol (\(OR\) = 2.61; \(IC_{95}\) = [1.45; 4.99]). De acuerdo a este resultado por cada unidad que aumenta la apertura al cambio, el riesgo de presentar una frecuencia de consumo elevada aumenta en un 161.19%.

Pred.: Conservación (C)

ajuste<-glm(alcohol_1~C+edad+sexo, data=base, family=binomial)
# plot(simulateResiduals(ajuste))
anova(mod_edad, ajuste, test = "Chisq")
## Analysis of Deviance Table
## 
## Model 1: alcohol_1 ~ edad
## Model 2: alcohol_1 ~ C + edad + sexo
##   Resid. Df Resid. Dev Df Deviance Pr(>Chi)   
## 1       912     250.18                        
## 2       910     239.05  2   11.127 0.003836 **
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
summary(ajuste)
## 
## Call:
## glm(formula = alcohol_1 ~ C + edad + sexo, family = binomial, 
##     data = base)
## 
## Coefficients:
##             Estimate Std. Error z value Pr(>|z|)    
## (Intercept) -12.4562     2.4353  -5.115 3.14e-07 ***
## C            -0.7435     0.2402  -3.095  0.00197 ** 
## edad          0.7153     0.1401   5.107 3.28e-07 ***
## sexom         0.3762     0.3743   1.005  0.31491    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 284.00  on 913  degrees of freedom
## Residual deviance: 239.05  on 910  degrees of freedom
## AIC: 247.05
## 
## Number of Fisher Scoring iterations: 7
OR <- exp(ajuste$coefficients[2])
IC_OR<-exp(confint(ajuste))[2,]

Se cumplen los supuestos del modelo y C fue significativo en la predicción de consumo de alcohol (\(OR\) = 0.48; \(IC_{95}\) = [0.29; 0.75]). De acuerdo a este resultado por cada unidad que aumenta la conservación, el riesgo de presentar una frecuencia de consumo elevada disminuye en un 52.45%.

Modelo final (Audit 1)

Se tomó como punto de base el modelo con edad, sexo y apertura al cambio por ser el que obtuvo una menor deviance y se comparó con el modelo que además tenía conservación.

mod_AC<-glm(alcohol_1~edad+sexo+AC, data=base, family=binomial)
mod_total <- glm(alcohol_1~edad+sexo+C+AC, data=base, family=binomial)
# plot(simulateResiduals(mod_total))
anova(mod_AC, mod_total, test = "Chisq")
## Analysis of Deviance Table
## 
## Model 1: alcohol_1 ~ edad + sexo + AC
## Model 2: alcohol_1 ~ edad + sexo + C + AC
##   Resid. Df Resid. Dev Df Deviance  Pr(>Chi)    
## 1       910     238.68                          
## 2       909     222.25  1   16.432 5.042e-05 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
summary(mod_total)
## 
## Call:
## glm(formula = alcohol_1 ~ edad + sexo + C + AC, family = binomial, 
##     data = base)
## 
## Coefficients:
##             Estimate Std. Error z value Pr(>|z|)    
## (Intercept) -18.8828     3.2299  -5.846 5.03e-09 ***
## edad          0.7460     0.1481   5.038 4.70e-07 ***
## sexom         0.7513     0.3961   1.897 0.057855 .  
## C            -0.9223     0.2407  -3.831 0.000128 ***
## AC            1.2608     0.3378   3.732 0.000190 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 284.00  on 913  degrees of freedom
## Residual deviance: 222.25  on 909  degrees of freedom
## AIC: 232.25
## 
## Number of Fisher Scoring iterations: 7
OR_edad <- exp(mod_total$coefficients[2])
OR_sexo <- exp(mod_total$coefficients[3])
OR_C <- exp(mod_total$coefficients[4])
OR_AC <- exp(mod_total$coefficients[5])
IC_OR_edad<-exp(confint(mod_total))[2,]
IC_OR_sexo<-exp(confint(mod_total))[3,]
IC_OR_C<-exp(confint(mod_total))[4,]
IC_OR_AC<-exp(confint(mod_total))[5,]
R2 <- NagelkerkeR2(mod_total)$R2

Se cumplen los supuestos del modelo y edad, conservación y apertura al cambio fueron significativos en la predicción de consumo de alcohol (\(OR_{edad}\) = 2.11, \(IC_{95}\) = [1.6; 2.87]; \(OR_{Conservacion}\) = 0.4, \(IC_{95}\) = [0.24; 0.63]; \(OR_{AperturaAlCambio}\) = 3.53, \(IC_{95}\) = [1.88; 7.09]). El sexo obtuvo una significación marginal (\(OR_{sexo}\) = 2.12, \(IC_{95}\) = [0.98; 4.7]). De acuerdo a este resultado, manteniendo fijas las demás variables, el riesgo de presentar una frecuencia alta de consumo es 110.85% mayor por cada año que aumenta la edad, 252.84% mayor por cada unidad que aumenta la apertura al cambio, 111.97% mayor en varones que en mujeres, y 60.24% menor por cada unidad que aumenta la conservación.

A partir del pseudo-R2 de Nagelkerke (\(R^2\) = 0.245) se estima que el modelo propuesto explica el 24.46% de la variabilidad de Audit 1.

Valores básicos

Dada la presencia de multicolinealidad evidenciada en la fase psicométrica, se decidió ajustar un modelo lineal generalizado (binomial) por cada valor por separado para indagar qué aspectos de la apertura al cambio y de la conservación son aquellos que mejor predicen la probabilidad de tener una frecuencia de consumo elevada.

mod_uni <- glm(alcohol_1~edad+sexo+uni, data=base, family=binomial)
mod_ben <- glm(alcohol_1~edad+sexo+ben, data=base, family=binomial)
mod_adi <- glm(alcohol_1~edad+sexo+adi, data=base, family=binomial)
mod_hed <- glm(alcohol_1~edad+sexo+hed, data=base, family=binomial)
mod_est <- glm(alcohol_1~edad+sexo+est, data=base, family=binomial)
mod_log <- glm(alcohol_1~edad+sexo+log, data=base, family=binomial)
mod_pod <- glm(alcohol_1~edad+sexo+pod, data=base, family=binomial)
mod_con <- glm(alcohol_1~edad+sexo+con, data=base, family=binomial)
mod_tra <- glm(alcohol_1~edad+sexo+tra, data=base, family=binomial)
mod_seg <- glm(alcohol_1~edad+sexo+seg, data=base, family=binomial)

# # plot(simulateResiduals(mod_seg))

tabla_valores <- data.frame(Valor=c("Universalismo",
                                    "Benevolencia",
                                    "Autodirección",
                                    "Estimulación",
                                    "Hedonismo",
                                    "Logro",
                                    "Poder",
                                    "Seguridad",
                                    "Conformidad",
                                    "Tradición"))
tabla_valores$OR <- c(round(exp(mod_uni$coefficients[4]),2),
                      round(exp(mod_ben$coefficients[4]),2),
                      round(exp(mod_adi$coefficients[4]),2),
                      round(exp(mod_est$coefficients[4]),2),
                      round(exp(mod_hed$coefficients[4]),2),
                      round(exp(mod_log$coefficients[4]),2),
                      round(exp(mod_pod$coefficients[4]),2),
                      round(exp(mod_seg$coefficients[4]),2),
                      round(exp(mod_con$coefficients[4]),2),
                      round(exp(mod_tra$coefficients[4]),2))
tabla_valores$IC <- c(paste0(round(exp(confint(mod_uni))[4,1],2)," - ",round(exp(confint(mod_uni))[4,2],2)),
                      paste0(round(exp(confint(mod_ben))[4,1],2)," - ",round(exp(confint(mod_ben))[4,2],2)),
                      paste0(round(exp(confint(mod_adi))[4,1],2)," - ",round(exp(confint(mod_adi))[4,2],2)),
                      paste0(round(exp(confint(mod_est))[4,1],2)," - ",round(exp(confint(mod_est))[4,2],2)),
                      paste0(round(exp(confint(mod_hed))[4,1],2)," - ",round(exp(confint(mod_hed))[4,2],2)),
                      paste0(round(exp(confint(mod_log))[4,1],2)," - ",round(exp(confint(mod_log))[4,2],2)),
                      paste0(round(exp(confint(mod_pod))[4,1],2)," - ",round(exp(confint(mod_pod))[4,2],2)),
                      paste0(round(exp(confint(mod_seg))[4,1],2)," - ",round(exp(confint(mod_seg))[4,2],2)),
                      paste0(round(exp(confint(mod_con))[4,1],2)," - ",round(exp(confint(mod_con))[4,2],2)),
                      paste0(round(exp(confint(mod_tra))[4,1],2)," - ",round(exp(confint(mod_tra))[4,2],2)))
tabla_valores$p <- c(round(summary(mod_uni)$coefficients[4,4],3),
                     round(summary(mod_ben)$coefficients[4,4],3),
                     round(summary(mod_adi)$coefficients[4,4],3),
                     round(summary(mod_est)$coefficients[4,4],3),
                     round(summary(mod_hed)$coefficients[4,4],3),
                     round(summary(mod_log)$coefficients[4,4],3),
                     round(summary(mod_pod)$coefficients[4,4],3),
                     round(summary(mod_seg)$coefficients[4,4],3),
                     round(summary(mod_con)$coefficients[4,4],3),
                     round(summary(mod_tra)$coefficients[4,4],3))
tabla_valores$R2 <- c(round(NagelkerkeR2(mod_uni)$R2,3),
                      round(NagelkerkeR2(mod_ben)$R2,3),
                      round(NagelkerkeR2(mod_adi)$R2,3),
                      round(NagelkerkeR2(mod_est)$R2,3),
                      round(NagelkerkeR2(mod_hed)$R2,3),
                      round(NagelkerkeR2(mod_log)$R2,3),
                      round(NagelkerkeR2(mod_pod)$R2,3),
                      round(NagelkerkeR2(mod_seg)$R2,3),
                      round(NagelkerkeR2(mod_con)$R2,3),
                      round(NagelkerkeR2(mod_tra)$R2,3))
tabla_valores$color <- ifelse(tabla_valores$p<.05&tabla_valores$OR<1,"#daaaaa",
                          ifelse(tabla_valores$p<.05&tabla_valores$OR>1,"#a5c3c6",NA))
tabla_valores$p <- ifelse(tabla_valores$p==0,"< .001", tabla_valores$p)



tabla <- kable(tabla_valores[1:5],
      "html",
      booktabs = T,
      align = c("c"),
      caption = "Predicción de probabilidad de frecuencia de consumo elevada según valores básicos") %>%
  kable_styling(full_width = F,
                position = "center", font_size = 12)

for(i in 1:nrow(tabla_valores)){
  if(!is.na(tabla_valores$color[i])){
    tabla <- row_spec(tabla,i,background = tabla_valores$color[i], color="#181414")
    
  }
}

tabla
Predicción de probabilidad de frecuencia de consumo elevada según valores básicos
Valor OR IC p R2
Universalismo 0.95 0.63 - 1.46 0.801 0.139
Benevolencia 1.54 0.87 - 2.96 0.166 0.147
Autodirección 1.95 1.2 - 3.31 0.010 0.169
Estimulación 1.57 1.09 - 2.33 0.020 0.162
Hedonismo 2.07 1.17 - 4.03 0.021 0.164
Logro 0.95 0.72 - 1.27 0.721 0.140
Poder 0.92 0.68 - 1.23 0.571 0.140
Seguridad 0.68 0.49 - 0.92 0.014 0.163
Conformidad 0.55 0.39 - 0.77 0.001 0.192
Tradición 0.88 0.62 - 1.24 0.472 0.141

Ninguno de los modelos presentó problemas de supuestos. Los tres valores de Apertura al cambio resultaron predictores significativos (controlando por sexo y edad), siendo la búsqueda de placer sensorial (hedonismo) y la búsqueda de independencia (autodirección) los OR más elevados (2.07 y 1.95 respectivamente). En cuanto a los valores de conservación, cumplir con las normas (conformidad) obtuvo el menor OR (0.55), seguido por la búsqueda de seguridad y estabilidad (seguridad; 0.68). El respeto y aceptación de las normas culturales (tradición) no resultó significativo.


Regresiones: Audit 2

Primero se ajustó el modelo nulo y luego se compararon los AIC de ese modelo con un modelo sólo con edad y sólo con sexo.

mod_nulo<-glm(alcohol_2~1, data=base, family=binomial)
mod_edad <- glm(alcohol_2~edad, data=base, family=binomial)
mod_sexo <- glm(alcohol_2~sexo, data=base, family=binomial)
mod_base <- glm(alcohol_2~sexo+edad, data=base, family=binomial)

anova(mod_nulo, mod_edad, test = "Chisq")
## Analysis of Deviance Table
## 
## Model 1: alcohol_2 ~ 1
## Model 2: alcohol_2 ~ edad
##   Resid. Df Resid. Dev Df Deviance  Pr(>Chi)    
## 1       913     513.88                          
## 2       912     439.37  1   74.511 < 2.2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
anova(mod_nulo, mod_sexo, test = "Chisq")
## Analysis of Deviance Table
## 
## Model 1: alcohol_2 ~ 1
## Model 2: alcohol_2 ~ sexo
##   Resid. Df Resid. Dev Df Deviance Pr(>Chi)  
## 1       913     513.88                       
## 2       912     510.88  1   2.9982  0.08336 .
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

El modelo con sexo como predictor no mejoró significativamente respecto del nulo (significación marginal). Sin embargo, en los siguientes modelos se incluyen ambos términos para controlar por sexo y edad.

Pred.: Autotrascendencia (AT)

ajuste<-glm(alcohol_2~AT+edad+sexo, data=base, family=binomial)
# plot(simulateResiduals(ajuste))
anova(mod_base, ajuste, test = "Chisq")
## Analysis of Deviance Table
## 
## Model 1: alcohol_2 ~ sexo + edad
## Model 2: alcohol_2 ~ AT + edad + sexo
##   Resid. Df Resid. Dev Df  Deviance Pr(>Chi)
## 1       911     431.34                      
## 2       910     431.34  1 2.488e-05    0.996

Se cumplen los supuestos del modelo, pero AT no resultó significativo en la predicción de consumo de alcohol.

Pred.: Autopromoción (AP)

ajuste<-glm(alcohol_2~AP+edad+sexo, data=base, family=binomial)
# plot(simulateResiduals(ajuste))
anova(mod_base, ajuste, test = "Chisq")
## Analysis of Deviance Table
## 
## Model 1: alcohol_2 ~ sexo + edad
## Model 2: alcohol_2 ~ AP + edad + sexo
##   Resid. Df Resid. Dev Df Deviance Pr(>Chi)
## 1       911     431.34                     
## 2       910     431.29  1 0.047318   0.8278

Se cumplen los supuestos del modelo, pero AP no resultó significativo en la predicción de consumo de alcohol.

Pred.: Apertura al cambio (AC)

ajuste<-glm(alcohol_2~AC+edad+sexo, data=base, family=binomial)
# plot(simulateResiduals(ajuste))
anova(mod_base, ajuste, test = "Chisq")
## Analysis of Deviance Table
## 
## Model 1: alcohol_2 ~ sexo + edad
## Model 2: alcohol_2 ~ AC + edad + sexo
##   Resid. Df Resid. Dev Df Deviance Pr(>Chi)
## 1       911     431.34                     
## 2       910     431.05  1  0.29079   0.5897

Se cumplen los supuestos del modelo, pero AC no resultó significativo en la predicción de consumo de alcohol.

Pred.: Conservación (C)

ajuste<-glm(alcohol_2~C+edad+sexo, data=base, family=binomial)
# plot(simulateResiduals(ajuste))
anova(mod_edad, ajuste, test = "Chisq")
## Analysis of Deviance Table
## 
## Model 1: alcohol_2 ~ edad
## Model 2: alcohol_2 ~ C + edad + sexo
##   Resid. Df Resid. Dev Df Deviance Pr(>Chi)   
## 1       912     439.37                        
## 2       910     426.01  2   13.353  0.00126 **
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
summary(ajuste)
## 
## Call:
## glm(formula = alcohol_2 ~ C + edad + sexo, family = binomial, 
##     data = base)
## 
## Coefficients:
##              Estimate Std. Error z value Pr(>|z|)    
## (Intercept) -13.40995    1.72878  -7.757 8.70e-15 ***
## C            -0.35935    0.15800  -2.274  0.02295 *  
## edad          0.77434    0.09981   7.758 8.64e-15 ***
## sexom        -0.73349    0.27171  -2.700  0.00694 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 513.88  on 913  degrees of freedom
## Residual deviance: 426.01  on 910  degrees of freedom
## AIC: 434.01
## 
## Number of Fisher Scoring iterations: 6
OR <- exp(ajuste$coefficients[2])
IC_OR<-exp(confint(ajuste))[2,]

Se cumplen los supuestos del modelo y C fue significativo en la predicción de presencia de CEEA (\(OR\) = 0.7; \(IC_{95}\) = [0.51; 0.95]). De acuerdo a este resultado por cada unidad que aumenta la conservación, el riesgo de presentar CEEA disminuye en un 30.19%.

Modelo final (Audit 2)

Se tomó como modelo final el que incluye sexo, edad y conservación por ser el único valor que mejoró significativamente las predicciones.

mod_total <- glm(alcohol_2~edad+sexo+C, data=base, family=binomial)
summary(mod_total)
## 
## Call:
## glm(formula = alcohol_2 ~ edad + sexo + C, family = binomial, 
##     data = base)
## 
## Coefficients:
##              Estimate Std. Error z value Pr(>|z|)    
## (Intercept) -13.40995    1.72878  -7.757 8.70e-15 ***
## edad          0.77434    0.09981   7.758 8.64e-15 ***
## sexom        -0.73349    0.27171  -2.700  0.00694 ** 
## C            -0.35935    0.15800  -2.274  0.02295 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 513.88  on 913  degrees of freedom
## Residual deviance: 426.01  on 910  degrees of freedom
## AIC: 434.01
## 
## Number of Fisher Scoring iterations: 6
OR_edad <- exp(mod_total$coefficients[2])
OR_sexo <- exp(mod_total$coefficients[3])
OR_C <- exp(mod_total$coefficients[4])
IC_OR_edad<-exp(confint(mod_total))[2,]
IC_OR_sexo<-exp(confint(mod_total))[3,]
IC_OR_C<-exp(confint(mod_total))[4,]
R2 <- NagelkerkeR2(mod_total)$R2

Se cumplen los supuestos del modelo y edad y conservación fueron significativos en la predicción de consumo de alcohol (\(OR_{edad}\) = 2.17, \(IC_{95}\) = [1.8; 2.66]; \(OR_{Conservacion}\) = 0.7, \(IC_{95}\) = [0.51; 0.95]). El sexo obtuvo no fue significativo. De acuerdo a este resultado, manteniendo fijas las demás variables, el riesgo de presentar CEEA es 116.92% mayor por cada año que aumenta la edad y 30.19% menor por cada unidad que aumenta la conservación.

A partir del pseudo-R2 de Nagelkerke (\(R^2\) = 0.213) se estima que el modelo propuesto explica el 21.31% de la variabilidad de Audit 2.

Valores básicos

Dada la presencia de multicolinealidad evidenciada en la fase psicométrica, se decidió ajustar un modelo lineal generalizado (binomial) por cada valor por separado para indagar qué de la conservación son aquellos que mejor predicen la probabilidad de presentar CEEA.

mod_uni <- glm(alcohol_2~edad+sexo+uni, data=base, family=binomial)
mod_ben <- glm(alcohol_2~edad+sexo+ben, data=base, family=binomial)
mod_adi <- glm(alcohol_2~edad+sexo+adi, data=base, family=binomial)
mod_hed <- glm(alcohol_2~edad+sexo+hed, data=base, family=binomial)
mod_est <- glm(alcohol_2~edad+sexo+est, data=base, family=binomial)
mod_log <- glm(alcohol_2~edad+sexo+log, data=base, family=binomial)
mod_pod <- glm(alcohol_2~edad+sexo+pod, data=base, family=binomial)
mod_con <- glm(alcohol_2~edad+sexo+con, data=base, family=binomial)
mod_tra <- glm(alcohol_2~edad+sexo+tra, data=base, family=binomial)
mod_seg <- glm(alcohol_2~edad+sexo+seg, data=base, family=binomial)

# # plot(simulateResiduals(mod_con))

tabla_valores <- data.frame(Valor=c("Universalismo",
                                    "Benevolencia",
                                    "Autodirección",
                                    "Estimulación",
                                    "Hedonismo",
                                    "Logro",
                                    "Poder",
                                    "Seguridad",
                                    "Conformidad",
                                    "Tradición"))
tabla_valores$OR <- c(round(exp(mod_uni$coefficients[4]),2),
                      round(exp(mod_ben$coefficients[4]),2),
                      round(exp(mod_adi$coefficients[4]),2),
                      round(exp(mod_est$coefficients[4]),2),
                      round(exp(mod_hed$coefficients[4]),2),
                      round(exp(mod_log$coefficients[4]),2),
                      round(exp(mod_pod$coefficients[4]),2),
                      round(exp(mod_seg$coefficients[4]),2),
                      round(exp(mod_con$coefficients[4]),2),
                      round(exp(mod_tra$coefficients[4]),2))
tabla_valores$IC <- c(paste0(round(exp(confint(mod_uni))[4,1],2)," - ",round(exp(confint(mod_uni))[4,2],2)),
                      paste0(round(exp(confint(mod_ben))[4,1],2)," - ",round(exp(confint(mod_ben))[4,2],2)),
                      paste0(round(exp(confint(mod_adi))[4,1],2)," - ",round(exp(confint(mod_adi))[4,2],2)),
                      paste0(round(exp(confint(mod_est))[4,1],2)," - ",round(exp(confint(mod_est))[4,2],2)),
                      paste0(round(exp(confint(mod_hed))[4,1],2)," - ",round(exp(confint(mod_hed))[4,2],2)),
                      paste0(round(exp(confint(mod_log))[4,1],2)," - ",round(exp(confint(mod_log))[4,2],2)),
                      paste0(round(exp(confint(mod_pod))[4,1],2)," - ",round(exp(confint(mod_pod))[4,2],2)),
                      paste0(round(exp(confint(mod_seg))[4,1],2)," - ",round(exp(confint(mod_seg))[4,2],2)),
                      paste0(round(exp(confint(mod_con))[4,1],2)," - ",round(exp(confint(mod_con))[4,2],2)),
                      paste0(round(exp(confint(mod_tra))[4,1],2)," - ",round(exp(confint(mod_tra))[4,2],2)))
tabla_valores$p <- c(round(summary(mod_uni)$coefficients[4,4],3),
                     round(summary(mod_ben)$coefficients[4,4],3),
                     round(summary(mod_adi)$coefficients[4,4],3),
                     round(summary(mod_est)$coefficients[4,4],3),
                     round(summary(mod_hed)$coefficients[4,4],3),
                     round(summary(mod_log)$coefficients[4,4],3),
                     round(summary(mod_pod)$coefficients[4,4],3),
                     round(summary(mod_seg)$coefficients[4,4],3),
                     round(summary(mod_con)$coefficients[4,4],3),
                     round(summary(mod_tra)$coefficients[4,4],3))
tabla_valores$R2 <- c(round(NagelkerkeR2(mod_uni)$R2,3),
                      round(NagelkerkeR2(mod_ben)$R2,3),
                      round(NagelkerkeR2(mod_adi)$R2,3),
                      round(NagelkerkeR2(mod_est)$R2,3),
                      round(NagelkerkeR2(mod_hed)$R2,3),
                      round(NagelkerkeR2(mod_log)$R2,3),
                      round(NagelkerkeR2(mod_pod)$R2,3),
                      round(NagelkerkeR2(mod_seg)$R2,3),
                      round(NagelkerkeR2(mod_con)$R2,3),
                      round(NagelkerkeR2(mod_tra)$R2,3))
tabla_valores$color <- ifelse(tabla_valores$p<.05&tabla_valores$OR<1,"#daaaaa",
                          ifelse(tabla_valores$p<.05&tabla_valores$OR>1,"#a5c3c6",NA))
tabla_valores$p <- ifelse(tabla_valores$p==0,"< .001", tabla_valores$p)



tabla <- kable(tabla_valores[1:5],
      "html",
      booktabs = T,
      align = c("c"),
      caption = "Predicción de probabilidad de presencia de CEEA según valores básicos") %>%
  kable_styling(full_width = F,
                position = "center", font_size = 12)

for(i in 1:nrow(tabla_valores)){
  if(!is.na(tabla_valores$color[i])){
    tabla <- row_spec(tabla,i,background = tabla_valores$color[i], color="#181414")
    
  }
}

tabla
Predicción de probabilidad de presencia de CEEA según valores básicos
Valor OR IC p R2
Universalismo 1.06 0.78 - 1.46 0.726 0.201
Benevolencia 0.89 0.62 - 1.29 0.516 0.202
Autodirección 1.03 0.77 - 1.4 0.827 0.201
Estimulación 1.02 0.81 - 1.29 0.891 0.201
Hedonismo 1.21 0.86 - 1.76 0.293 0.203
Logro 0.93 0.76 - 1.15 0.513 0.202
Poder 1.11 0.91 - 1.36 0.304 0.203
Seguridad 0.76 0.61 - 0.95 0.017 0.214
Conformidad 0.78 0.63 - 0.96 0.024 0.213
Tradición 0.97 0.76 - 1.23 0.812 0.201

Ninguno de los modelos presentó problemas de supuestos. Los valores de conservación que resultaron significativos fueron seguridad (búsqueda de seguridad y estabilidad; OR = 0.76) y conformidad (cumplir con las normas y evitar disgustar a otrxs; OR = 0.78). El respeto y aceptación de las normas culturales (tradición) no resultó significativo.


Regresiones: Audit 3

Primero se ajustó el modelo nulo y luego se compararon los AIC de ese modelo con un modelo sólo con edad y sólo con sexo.

mod_nulo<-glm(alcohol_3~1, data=base, family=binomial)
mod_edad <- glm(alcohol_3~edad, data=base, family=binomial)
mod_sexo <- glm(alcohol_3~sexo, data=base, family=binomial)
mod_base <- glm(alcohol_3~sexo+edad, data=base, family=binomial)

anova(mod_nulo, mod_edad, test = "Chisq")
## Analysis of Deviance Table
## 
## Model 1: alcohol_3 ~ 1
## Model 2: alcohol_3 ~ edad
##   Resid. Df Resid. Dev Df Deviance  Pr(>Chi)    
## 1       913     290.54                          
## 2       912     240.35  1   50.187 1.398e-12 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
anova(mod_nulo, mod_sexo, test = "Chisq")
## Analysis of Deviance Table
## 
## Model 1: alcohol_3 ~ 1
## Model 2: alcohol_3 ~ sexo
##   Resid. Df Resid. Dev Df Deviance Pr(>Chi)
## 1       913     290.54                     
## 2       912     289.95  1  0.59289   0.4413

El modelo con sexo como predictor no mejoró significativamente respecto del nulo. Sin embargo, en los siguientes modelos se incluyen ambos términos para controlar por sexo y edad.

Pred.: Autotrascendencia (AT)

ajuste<-glm(alcohol_3~AT+edad+sexo, data=base, family=binomial)
# plot(simulateResiduals(ajuste))
anova(mod_base, ajuste, test = "Chisq")
## Analysis of Deviance Table
## 
## Model 1: alcohol_3 ~ sexo + edad
## Model 2: alcohol_3 ~ AT + edad + sexo
##   Resid. Df Resid. Dev Df Deviance Pr(>Chi)
## 1       911     237.48                     
## 2       910     236.78  1  0.69984   0.4028

Se cumplen los supuestos del modelo, pero AT no resultó significativo en la predicción de consumo de alcohol.

Pred.: Autopromoción (AP)

ajuste<-glm(alcohol_3~AP+edad+sexo, data=base, family=binomial)
# plot(simulateResiduals(ajuste))
anova(mod_base, ajuste, test = "Chisq")
## Analysis of Deviance Table
## 
## Model 1: alcohol_3 ~ sexo + edad
## Model 2: alcohol_3 ~ AP + edad + sexo
##   Resid. Df Resid. Dev Df Deviance Pr(>Chi)
## 1       911     237.48                     
## 2       910     237.47  1 0.014582   0.9039

Se cumplen los supuestos del modelo, pero AP no resultó significativo en la predicción de consumo de alcohol.

Pred.: Apertura al cambio (AC)

ajuste<-glm(alcohol_3~AC+edad+sexo, data=base, family=binomial)
# plot(simulateResiduals(ajuste))
anova(mod_base, ajuste, test = "Chisq")
## Analysis of Deviance Table
## 
## Model 1: alcohol_3 ~ sexo + edad
## Model 2: alcohol_3 ~ AC + edad + sexo
##   Resid. Df Resid. Dev Df Deviance Pr(>Chi)  
## 1       911     237.48                       
## 2       910     231.93  1   5.5514  0.01847 *
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
summary(ajuste)
## 
## Call:
## glm(formula = alcohol_3 ~ AC + edad + sexo, family = binomial, 
##     data = base)
## 
## Coefficients:
##             Estimate Std. Error z value Pr(>|z|)    
## (Intercept) -22.4544     3.3239  -6.755 1.42e-11 ***
## AC            0.6798     0.3033   2.241    0.025 *  
## edad          0.9639     0.1602   6.017 1.77e-09 ***
## sexom        -0.4917     0.3847  -1.278    0.201    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 290.54  on 913  degrees of freedom
## Residual deviance: 231.93  on 910  degrees of freedom
## AIC: 239.93
## 
## Number of Fisher Scoring iterations: 7
OR <- exp(ajuste$coefficients[2])
IC_OR<-exp(confint(ajuste))[2,]

Se cumplen los supuestos del modelo y AC fue significativo en la predicción de consumo de alcohol (\(OR\) = 1.97; \(IC_{95}\) = [1.12; 3.68]). De acuerdo a este resultado por cada unidad que aumenta la apertura al cambio, el riesgo de presentar una frecuencia de CEEA elevada aumenta en un 97.34%.

Pred.: Conservación (C)

ajuste<-glm(alcohol_3~C+edad+sexo, data=base, family=binomial)
# plot(simulateResiduals(ajuste))
anova(mod_edad, ajuste, test = "Chisq")
## Analysis of Deviance Table
## 
## Model 1: alcohol_3 ~ edad
## Model 2: alcohol_3 ~ C + edad + sexo
##   Resid. Df Resid. Dev Df Deviance Pr(>Chi)  
## 1       912     240.35                       
## 2       910     233.88  2   6.4744  0.03927 *
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
summary(ajuste)
## 
## Call:
## glm(formula = alcohol_3 ~ C + edad + sexo, family = binomial, 
##     data = base)
## 
## Coefficients:
##             Estimate Std. Error z value Pr(>|z|)    
## (Intercept) -17.2944     2.8034  -6.169 6.87e-10 ***
## C            -0.4251     0.2279  -1.866   0.0621 .  
## edad          0.9593     0.1602   5.989 2.11e-09 ***
## sexom        -0.6245     0.3819  -1.635   0.1020    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 290.54  on 913  degrees of freedom
## Residual deviance: 233.88  on 910  degrees of freedom
## AIC: 241.88
## 
## Number of Fisher Scoring iterations: 7
OR <- exp(ajuste$coefficients[2])
IC_OR<-exp(confint(ajuste))[2,]

Se cumplen los supuestos del modelo y C tuvo una significación marginal en la predicción de consumo de alcohol (\(OR\) = 0.65; \(IC_{95}\) = [0.41; 1.01]). De acuerdo a este resultado por cada unidad que aumenta la conservación, el riesgo de presentar una frecuencia de CEEA elevada disminuye en un 34.63%.

Modelo final (Audit 3)

Se tomó como punto de base el modelo con edad, sexo y apertura al cambio por ser el que obtuvo una menor deviance y se evaluó si la inclusión de conservación mejora las predicciones del modelo.

mod_AC<-glm(alcohol_3~edad+sexo+AC, data=base, family=binomial)
mod_total <- glm(alcohol_3~edad+sexo+C+AC, data=base, family=binomial)
# plot(simulateResiduals(mod_total))
anova(mod_AC, mod_total, test = "Chisq")
## Analysis of Deviance Table
## 
## Model 1: alcohol_3 ~ edad + sexo + AC
## Model 2: alcohol_3 ~ edad + sexo + C + AC
##   Resid. Df Resid. Dev Df Deviance Pr(>Chi)  
## 1       910     231.93                       
## 2       909     226.28  1   5.6455   0.0175 *
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
summary(mod_total)
## 
## Call:
## glm(formula = alcohol_3 ~ edad + sexo + C + AC, family = binomial, 
##     data = base)
## 
## Coefficients:
##             Estimate Std. Error z value Pr(>|z|)    
## (Intercept) -21.6106     3.4049  -6.347 2.20e-10 ***
## edad          0.9886     0.1651   5.988 2.13e-09 ***
## sexom        -0.4170     0.3919  -1.064  0.28725    
## C            -0.5278     0.2267  -2.328  0.01989 *  
## AC            0.8200     0.3160   2.595  0.00946 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 290.54  on 913  degrees of freedom
## Residual deviance: 226.28  on 909  degrees of freedom
## AIC: 236.28
## 
## Number of Fisher Scoring iterations: 7
OR_edad <- exp(mod_total$coefficients[2])
OR_sexo <- exp(mod_total$coefficients[3])
OR_C <- exp(mod_total$coefficients[4])
OR_AC <- exp(mod_total$coefficients[5])
IC_OR_edad<-exp(confint(mod_total))[2,]
IC_OR_sexo<-exp(confint(mod_total))[3,]
IC_OR_C<-exp(confint(mod_total))[4,]
IC_OR_AC<-exp(confint(mod_total))[5,]
R2 <- NagelkerkeR2(mod_total)$R2

Se cumplen los supuestos del modelo y la inclusión de Conservación mejora el ajuste significativamente. La edad, la conservación y la apertura al cambio fueron predictores significativos de la frecuencia alta de CEEA (\(OR_{edad}\) = 2.69, \(IC_{95}\) = [1.99; 3.8]; \(OR_{Conservacion}\) = 0.59, \(IC_{95}\) = [0.37; 0.91]; \(OR_{AperturaAlCambio}\) = 2.27, \(IC_{95}\) = [1.26; 4.35]). El sexo no resultó significativo. De acuerdo a este resultado, manteniendo fijas las demás variables, el riesgo de presentar una frecuencia alta de CEEA es 168.75% mayor por cada año que aumenta la edad, 127.05% mayor por cada unidad que aumenta la apertura al cambio, y 41.01% menor por cada unidad que aumenta la conservación.

A partir del pseudo-R2 de Nagelkerke (\(R^2\) = 0.249) se estima que el modelo propuesto explica el 24.93% de la variabilidad de Audit 3.

Valores básicos

Dada la presencia de multicolinealidad evidenciada en la fase psicométrica, se decidió ajustar un modelo lineal generalizado (binomial) por cada valor por separado para indagar qué aspectos de la apertura al cambio y de la conservación son aquellos que mejor predicen la probabilidad de tener una frecuencia de consumo elevada.

mod_uni <- glm(alcohol_3~edad+sexo+uni, data=base, family=binomial)
mod_ben <- glm(alcohol_3~edad+sexo+ben, data=base, family=binomial)
mod_adi <- glm(alcohol_3~edad+sexo+adi, data=base, family=binomial)
mod_hed <- glm(alcohol_3~edad+sexo+hed, data=base, family=binomial)
mod_est <- glm(alcohol_3~edad+sexo+est, data=base, family=binomial)
mod_log <- glm(alcohol_3~edad+sexo+log, data=base, family=binomial)
mod_pod <- glm(alcohol_3~edad+sexo+pod, data=base, family=binomial)
mod_con <- glm(alcohol_3~edad+sexo+con, data=base, family=binomial)
mod_tra <- glm(alcohol_3~edad+sexo+tra, data=base, family=binomial)
mod_seg <- glm(alcohol_3~edad+sexo+seg, data=base, family=binomial)

# # plot(simulateResiduals(mod_est))

tabla_valores <- data.frame(Valor=c("Universalismo",
                                    "Benevolencia",
                                    "Autodirección",
                                    "Estimulación",
                                    "Hedonismo",
                                    "Logro",
                                    "Poder",
                                    "Seguridad",
                                    "Conformidad",
                                    "Tradición"))
tabla_valores$OR <- c(round(exp(mod_uni$coefficients[4]),2),
                      round(exp(mod_ben$coefficients[4]),2),
                      round(exp(mod_adi$coefficients[4]),2),
                      round(exp(mod_est$coefficients[4]),2),
                      round(exp(mod_hed$coefficients[4]),2),
                      round(exp(mod_log$coefficients[4]),2),
                      round(exp(mod_pod$coefficients[4]),2),
                      round(exp(mod_seg$coefficients[4]),2),
                      round(exp(mod_con$coefficients[4]),2),
                      round(exp(mod_tra$coefficients[4]),2))
tabla_valores$IC <- c(paste0(round(exp(confint(mod_uni))[4,1],2)," - ",round(exp(confint(mod_uni))[4,2],2)),
                      paste0(round(exp(confint(mod_ben))[4,1],2)," - ",round(exp(confint(mod_ben))[4,2],2)),
                      paste0(round(exp(confint(mod_adi))[4,1],2)," - ",round(exp(confint(mod_adi))[4,2],2)),
                      paste0(round(exp(confint(mod_est))[4,1],2)," - ",round(exp(confint(mod_est))[4,2],2)),
                      paste0(round(exp(confint(mod_hed))[4,1],2)," - ",round(exp(confint(mod_hed))[4,2],2)),
                      paste0(round(exp(confint(mod_log))[4,1],2)," - ",round(exp(confint(mod_log))[4,2],2)),
                      paste0(round(exp(confint(mod_pod))[4,1],2)," - ",round(exp(confint(mod_pod))[4,2],2)),
                      paste0(round(exp(confint(mod_seg))[4,1],2)," - ",round(exp(confint(mod_seg))[4,2],2)),
                      paste0(round(exp(confint(mod_con))[4,1],2)," - ",round(exp(confint(mod_con))[4,2],2)),
                      paste0(round(exp(confint(mod_tra))[4,1],2)," - ",round(exp(confint(mod_tra))[4,2],2)))
tabla_valores$p <- c(round(summary(mod_uni)$coefficients[4,4],3),
                     round(summary(mod_ben)$coefficients[4,4],3),
                     round(summary(mod_adi)$coefficients[4,4],3),
                     round(summary(mod_est)$coefficients[4,4],3),
                     round(summary(mod_hed)$coefficients[4,4],3),
                     round(summary(mod_log)$coefficients[4,4],3),
                     round(summary(mod_pod)$coefficients[4,4],3),
                     round(summary(mod_seg)$coefficients[4,4],3),
                     round(summary(mod_con)$coefficients[4,4],3),
                     round(summary(mod_tra)$coefficients[4,4],3))
tabla_valores$R2 <- c(round(NagelkerkeR2(mod_uni)$R2,3),
                      round(NagelkerkeR2(mod_ben)$R2,3),
                      round(NagelkerkeR2(mod_adi)$R2,3),
                      round(NagelkerkeR2(mod_est)$R2,3),
                      round(NagelkerkeR2(mod_hed)$R2,3),
                      round(NagelkerkeR2(mod_log)$R2,3),
                      round(NagelkerkeR2(mod_pod)$R2,3),
                      round(NagelkerkeR2(mod_seg)$R2,3),
                      round(NagelkerkeR2(mod_con)$R2,3),
                      round(NagelkerkeR2(mod_tra)$R2,3))
tabla_valores$color <- ifelse(tabla_valores$p<.05&tabla_valores$OR<1,"#daaaaa",
                          ifelse(tabla_valores$p<.05&tabla_valores$OR>1,"#a5c3c6",NA))
tabla_valores$p <- ifelse(tabla_valores$p==0,"< .001", tabla_valores$p)



tabla <- kable(tabla_valores[1:5],
      "html",
      booktabs = T,
      align = c("c"),
      caption = "Predicción de probabilidad de frecuencia de CEEA elevada según valores básicos") %>%
  kable_styling(full_width = F,
                position = "center", font_size = 12)

for(i in 1:nrow(tabla_valores)){
  if(!is.na(tabla_valores$color[i])){
    tabla <- row_spec(tabla,i,background = tabla_valores$color[i], color="#181414")
    
  }
}

tabla
Predicción de probabilidad de frecuencia de CEEA elevada según valores básicos
Valor OR IC p R2
Universalismo 1.15 0.74 - 1.84 0.551 0.208
Benevolencia 1.31 0.75 - 2.46 0.367 0.210
Autodirección 1.33 0.86 - 2.14 0.221 0.213
Estimulación 1.43 1 - 2.1 0.060 0.222
Hedonismo 1.96 1.1 - 3.84 0.033 0.228
Logro 0.96 0.73 - 1.29 0.795 0.207
Poder 1.01 0.75 - 1.35 0.963 0.207
Seguridad 0.76 0.56 - 1.04 0.084 0.218
Conformidad 0.85 0.62 - 1.13 0.272 0.212
Tradición 0.79 0.56 - 1.12 0.182 0.214

Ninguno de los modelos presentó problemas de supuestos. El único valor cuyo coeficiente fue significativo controlando por sexo y edad fue la búsqueda de placer sensorial (hedonismo; OR = 1.96). La búsqueda de seguridad y estabilidad (seguridad; OR = 0.76) y de novedad y desafíos (estimulación; OR = 1.43) obtuvieron una significación marginal en la predicción de la frecuencia de CEEA.


Conclusiones

Edad

Como era de esperarse, en todos los modelos para predecir frecuencia de consumo, presencia de CEEA y frecuencia de CEEA la edad fue significativa, con ORs en los modelos finales de 2.11 para la frecuencia de consumo, 2.04 para la presencia de CEEA y 2.69 para la frecuencia de CEEA. De esta forma, por cada año que aumenta la edad, el riesgo de presentar una frecuencia de consumo elevada, de presencia de CEEA y de frecuencia de CEEA elevada aumentan más del doble (110.85%, 104.48% y 168.75% respectivamente).

Sexo

El sexo fue significativo sólo en el modelo de predicción de la presencia de CEEA, con un OR de 0.48 para los varones. Es decir, las chances de presentar un patrón de consumo de riesgo (CEEA) en varones es un 51.98% menor que en mujeres. En la última EMSE algo de esto aparece, aunque no recuerdo si específicamente con la presencia de CEEA.

En lo que respecta a la frecuencia de consumo, el sexo sólo alcanzó una significación marginal (p = .057) y con un OR en la dirección contraria (OR = 2.12). Pareciera ser que los varones tienen un riesgo 111.98% mayor que las mujeres de consumir alcohol con una frecuencia elevada, pero en lo que respecta a patrones de consumo ellos presentan un riesgo 51.98% menor que las adolescentes.

Valores

Los valores de autotrascendencia y de autopromoción no fueron predictores significativos en ninguno de los modelos.

Los valores de apertura al cambio permitieron predecir la probabilidad de presentar frecuencia alta de consumo (OR = 3.53) y frecuencia alta de CEEA (OR = 2.27), pero no presencia de CEEA. Más específicamente, que los motivos por los que los adolescentes se comportan como se comportan estén vinculados a la búsqueda de autonomía e independencia (autodirección; OR = 7.03), de novedad y desafíos (estimulación; OR = 4.81), y de disfrute y placer (hedonismo; 7.92) aumenta el riesgo de presentar una frecuencia de consumo. Por su parte, el riesgo de presentar una frecuencia de CEEA elevada aumenta un 609.93% por cada unidad que aumenta hedonismo (OR = 7.1), el único valor básico que predijo la frecuencia de CEEA.

Los valores de conservación predijeron significativamente la probabilidad de frecuencia de consumo (OR = 0.4), la presencia de CEEA (OR = 0.7) y la frecuencia de CEEA (OR = 0.59). Es decir, al tener niveles más altos de conservación, el riesgo de tener una frecuencia de consumo elevada, de presentar CEEA y de tener una frecuencia de CEEA elevada disminuye. En lo que respecta a los valores básicos, la búsqueda de seguridad y estabilidad (seguridad; OR = 0.51) y la evitación de incomodar a otros y la adecuación a las normas (conformidad; OR = 0.58) resultaron predictores significativos de la probabilidad de presentar una frecuencia de consumo elevada. Lo mismo ocurre en la predicción de la presencia de CEEA (\(OR_{seg}\) = 0.47; \(OR_{con}\) = 0.46). Sin embargo, ninguno de los modelos para predecir la frecuencia de CEEA con los valores básicos de conservación resultó significativo. Pareciera ser que la dimensión en su conjunto puede predecir el riesgo de presentar una frecuencia elevada de CEEA, pero no cada valor por separado.

Modelos finales

Frecuencia de consumo

mod_base <- glm(alcohol_1~1, data=base, family=binomial)
mod <- glm(alcohol_1~edad+sexo+C+AC, data=base, family=binomial)

tabla_mod1 <- data.frame(Variable=c("Intercept","Age","Sex (male)","Conservation","Openness to Change"),
                         Beta=rep(NA,5),
                         SE=rep(NA,5),
                         p=rep(NA,5),
                         OR=rep(NA,5),
                         IC95=rep(NA,5),
                         Deviance=rep(NA,5),
                         df=rep(NA,5),
                         `p (model)`=rep(NA,5),
                         `Pseudo R2`=rep(NA,5),
                         check.names = F)
tabla_mod1$Beta <- round(mod$coefficients,2)
tabla_mod1$SE <- round(summary(mod)$coef[,2],2)
tabla_mod1$p <- round(summary(mod)$coef[,4],3)
tabla_mod1$OR <- round(exp(tabla_mod1$Beta),2)
tabla_mod1$IC95 <- paste0(round(exp(confint(mod))[,1],2)," - ",round(exp(confint(mod))[,2],2))
tabla_mod1$Deviance[1] <- round(anova(mod_base,mod, test = "Chisq")$`Deviance`[2],3)
tabla_mod1$df[1] <- anova(mod_base,mod, test = "Chisq")$`Df`[2]
tabla_mod1$`p (model)`[1] <- round(anova(mod_base,mod, test = "Chisq")$`Pr(>Chi)`[2],3)
tabla_mod1$`Pseudo R2` <- c("Cox Snell",
                            round(DescTools::PseudoR2(mod, c("CoxSnell")),3),
                            NA,
                            "Nagelkerke",
                            round(DescTools::PseudoR2(mod, c("Nagelkerke")),3))
tabla_mod1$p <- ifelse(tabla_mod1$p==0, "< .001", tabla_mod1$p)
tabla_mod1$`p (model)` <- ifelse(tabla_mod1$`p (model)`==0, "< .001", tabla_mod1$`p (model)`)


tabla <- kable(tabla_mod1,
      "html",
      booktabs = T,
      align = c("r"),
      caption = "Predicción de probabilidad de frecuencia de consumo elevada (Audit 1)") %>%
  kable_styling(full_width = F,
                position = "center", font_size = 12)


tabla
Predicción de probabilidad de frecuencia de consumo elevada (Audit 1)
Variable Beta SE p OR IC95 Deviance df p (model) Pseudo R2
Intercept -18.88 3.23 < .001 0.00 0 - 0 61.755 4 < .001 Cox Snell
Age 0.75 0.15 < .001 2.12 1.6 - 2.87 0.065
Sex (male) 0.75 0.40 0.058 2.12 0.98 - 4.7
Conservation -0.92 0.24 < .001 0.40 0.24 - 0.63 Nagelkerke
Openness to Change 1.26 0.34 < .001 3.53 1.88 - 7.09 0.245
mod_base <- glm(alcohol_1~1, data=base, family=binomial)
mod_uni <- glm(alcohol_1~edad+sexo+uni, data=base, family=binomial)
mod_ben <- glm(alcohol_1~edad+sexo+ben, data=base, family=binomial)
mod_adi <- glm(alcohol_1~edad+sexo+adi, data=base, family=binomial)
mod_hed <- glm(alcohol_1~edad+sexo+hed, data=base, family=binomial)
mod_est <- glm(alcohol_1~edad+sexo+est, data=base, family=binomial)
mod_log <- glm(alcohol_1~edad+sexo+log, data=base, family=binomial)
mod_pod <- glm(alcohol_1~edad+sexo+pod, data=base, family=binomial)
mod_con <- glm(alcohol_1~edad+sexo+con, data=base, family=binomial)
mod_tra <- glm(alcohol_1~edad+sexo+tra, data=base, family=binomial)
mod_seg <- glm(alcohol_1~edad+sexo+seg, data=base, family=binomial)

tabla_mod1_10 <- data.frame(Variable=c("Universalismo",
                                    "Benevolencia",
                                    "Autodirección",
                                    "Estimulación",
                                    "Hedonismo",
                                    "Logro",
                                    "Poder",
                                    "Seguridad",
                                    "Conformidad",
                                    "Tradición"),
                         Beta=rep(NA,10),
                         SE=rep(NA,10),
                         p=rep(NA,10),
                         OR=rep(NA,10),
                         IC95=rep(NA,10),
                         Deviance=rep(NA,10),
                         df=rep(NA,10),
                         `p (model)`=rep(NA,10),
                         `Cox Snell R2`=rep(NA,10),
                         `Nagelkerke R2`=rep(NA,10),
                         check.names = F)
tabla_mod1_10$Beta <- c(round(mod_uni$coefficients[4],2),
                      round(mod_ben$coefficients[4],2),
                      round(mod_adi$coefficients[4],2),
                      round(mod_est$coefficients[4],2),
                      round(mod_hed$coefficients[4],2),
                      round(mod_log$coefficients[4],2),
                      round(mod_pod$coefficients[4],2),
                      round(mod_seg$coefficients[4],2),
                      round(mod_con$coefficients[4],2),
                      round(mod_tra$coefficients[4],2))
tabla_mod1_10$SE <- c(round(summary(mod_uni)$coef[4,2],2),
                      round(summary(mod_ben)$coef[4,2],2),
                      round(summary(mod_adi)$coef[4,2],2),
                      round(summary(mod_est)$coef[4,2],2),
                      round(summary(mod_hed)$coef[4,2],2),
                      round(summary(mod_log)$coef[4,2],2),
                      round(summary(mod_pod)$coef[4,2],2),
                      round(summary(mod_seg)$coef[4,2],2),
                      round(summary(mod_con)$coef[4,2],2),
                      round(summary(mod_tra)$coef[4,2],2))
tabla_mod1_10$p <- c(round(summary(mod_uni)$coefficients[4,4],3),
                     round(summary(mod_ben)$coefficients[4,4],3),
                     round(summary(mod_adi)$coefficients[4,4],3),
                     round(summary(mod_est)$coefficients[4,4],3),
                     round(summary(mod_hed)$coefficients[4,4],3),
                     round(summary(mod_log)$coefficients[4,4],3),
                     round(summary(mod_pod)$coefficients[4,4],3),
                     round(summary(mod_seg)$coefficients[4,4],3),
                     round(summary(mod_con)$coefficients[4,4],3),
                     round(summary(mod_tra)$coefficients[4,4],3))
tabla_mod1_10$OR <- c(round(exp(mod_uni$coefficients[4]),2),
                      round(exp(mod_ben$coefficients[4]),2),
                      round(exp(mod_adi$coefficients[4]),2),
                      round(exp(mod_est$coefficients[4]),2),
                      round(exp(mod_hed$coefficients[4]),2),
                      round(exp(mod_log$coefficients[4]),2),
                      round(exp(mod_pod$coefficients[4]),2),
                      round(exp(mod_seg$coefficients[4]),2),
                      round(exp(mod_con$coefficients[4]),2),
                      round(exp(mod_tra$coefficients[4]),2))
tabla_mod1_10$IC95 <- c(paste0(round(exp(confint(mod_uni))[4,1],2)," - ",round(exp(confint(mod_uni))[4,2],2)),
                      paste0(round(exp(confint(mod_ben))[4,1],2)," - ",round(exp(confint(mod_ben))[4,2],2)),
                      paste0(round(exp(confint(mod_adi))[4,1],2)," - ",round(exp(confint(mod_adi))[4,2],2)),
                      paste0(round(exp(confint(mod_est))[4,1],2)," - ",round(exp(confint(mod_est))[4,2],2)),
                      paste0(round(exp(confint(mod_hed))[4,1],2)," - ",round(exp(confint(mod_hed))[4,2],2)),
                      paste0(round(exp(confint(mod_log))[4,1],2)," - ",round(exp(confint(mod_log))[4,2],2)),
                      paste0(round(exp(confint(mod_pod))[4,1],2)," - ",round(exp(confint(mod_pod))[4,2],2)),
                      paste0(round(exp(confint(mod_seg))[4,1],2)," - ",round(exp(confint(mod_seg))[4,2],2)),
                      paste0(round(exp(confint(mod_con))[4,1],2)," - ",round(exp(confint(mod_con))[4,2],2)),
                      paste0(round(exp(confint(mod_tra))[4,1],2)," - ",round(exp(confint(mod_tra))[4,2],2)))
tabla_mod1_10$Deviance <- c(round(anova(mod_base,mod_uni, test = "Chisq")$`Deviance`[2],3),
                            round(anova(mod_base,mod_ben, test = "Chisq")$`Deviance`[2],3),
                            round(anova(mod_base,mod_adi, test = "Chisq")$`Deviance`[2],3),
                            round(anova(mod_base,mod_est, test = "Chisq")$`Deviance`[2],3),
                            round(anova(mod_base,mod_hed, test = "Chisq")$`Deviance`[2],3),
                            round(anova(mod_base,mod_log, test = "Chisq")$`Deviance`[2],3),
                            round(anova(mod_base,mod_pod, test = "Chisq")$`Deviance`[2],3),
                            round(anova(mod_base,mod_seg, test = "Chisq")$`Deviance`[2],3),
                            round(anova(mod_base,mod_con, test = "Chisq")$`Deviance`[2],3),
                            round(anova(mod_base,mod_tra, test = "Chisq")$`Deviance`[2],3))
tabla_mod1_10$df <- c(round(anova(mod_base,mod_uni, test = "Chisq")$`Df`[2],3),
                            round(anova(mod_base,mod_ben, test = "Chisq")$`Df`[2],3),
                            round(anova(mod_base,mod_adi, test = "Chisq")$`Df`[2],3),
                            round(anova(mod_base,mod_est, test = "Chisq")$`Df`[2],3),
                            round(anova(mod_base,mod_hed, test = "Chisq")$`Df`[2],3),
                            round(anova(mod_base,mod_log, test = "Chisq")$`Df`[2],3),
                            round(anova(mod_base,mod_pod, test = "Chisq")$`Df`[2],3),
                            round(anova(mod_base,mod_seg, test = "Chisq")$`Df`[2],3),
                            round(anova(mod_base,mod_con, test = "Chisq")$`Df`[2],3),
                            round(anova(mod_base,mod_tra, test = "Chisq")$`Df`[2],3))
tabla_mod1_10$`p (model)` <- c(round(anova(mod_base,mod_uni, test = "Chisq")$`Pr(>Chi)`[2],3),
                            round(anova(mod_base,mod_ben, test = "Chisq")$`Pr(>Chi)`[2],3),
                            round(anova(mod_base,mod_adi, test = "Chisq")$`Pr(>Chi)`[2],3),
                            round(anova(mod_base,mod_est, test = "Chisq")$`Pr(>Chi)`[2],3),
                            round(anova(mod_base,mod_hed, test = "Chisq")$`Pr(>Chi)`[2],3),
                            round(anova(mod_base,mod_log, test = "Chisq")$`Pr(>Chi)`[2],3),
                            round(anova(mod_base,mod_pod, test = "Chisq")$`Pr(>Chi)`[2],3),
                            round(anova(mod_base,mod_seg, test = "Chisq")$`Pr(>Chi)`[2],3),
                            round(anova(mod_base,mod_con, test = "Chisq")$`Pr(>Chi)`[2],3),
                            round(anova(mod_base,mod_tra, test = "Chisq")$`Pr(>Chi)`[2],3))
tabla_mod1_10$`Cox Snell R2` <- c(round(DescTools::PseudoR2(mod_uni, c("CoxSnell")),3),
                                  round(DescTools::PseudoR2(mod_ben, c("CoxSnell")),3),
                                  round(DescTools::PseudoR2(mod_adi, c("CoxSnell")),3),
                                  round(DescTools::PseudoR2(mod_est, c("CoxSnell")),3),
                                  round(DescTools::PseudoR2(mod_hed, c("CoxSnell")),3),
                                  round(DescTools::PseudoR2(mod_log, c("CoxSnell")),3),
                                  round(DescTools::PseudoR2(mod_pod, c("CoxSnell")),3),
                                  round(DescTools::PseudoR2(mod_seg, c("CoxSnell")),3),
                                  round(DescTools::PseudoR2(mod_con, c("CoxSnell")),3),
                                  round(DescTools::PseudoR2(mod_tra, c("CoxSnell")),3))
tabla_mod1_10$`Nagelkerke R2` <- c(round(DescTools::PseudoR2(mod_uni, c("Nagelkerke")),3),
                                  round(DescTools::PseudoR2(mod_ben, c("Nagelkerke")),3),
                                  round(DescTools::PseudoR2(mod_adi, c("Nagelkerke")),3),
                                  round(DescTools::PseudoR2(mod_est, c("Nagelkerke")),3),
                                  round(DescTools::PseudoR2(mod_hed, c("Nagelkerke")),3),
                                  round(DescTools::PseudoR2(mod_log, c("Nagelkerke")),3),
                                  round(DescTools::PseudoR2(mod_pod, c("Nagelkerke")),3),
                                  round(DescTools::PseudoR2(mod_seg, c("Nagelkerke")),3),
                                  round(DescTools::PseudoR2(mod_con, c("Nagelkerke")),3),
                                  round(DescTools::PseudoR2(mod_tra, c("Nagelkerke")),3))
tabla_mod1_10$color <- ifelse(tabla_mod1_10$p<.05&tabla_mod1_10$OR<1,"#daaaaa",
                          ifelse(tabla_mod1_10$p<.05&tabla_mod1_10$OR>1,"#a5c3c6",NA))
tabla_mod1_10$p <- ifelse(tabla_mod1_10$p==0, "< .001", tabla_mod1_10$p)
tabla_mod1_10$`p (model)` <- ifelse(tabla_mod1_10$`p (model)`==0, "< .001", tabla_mod1_10$`p (model)`)







tabla <- kable(tabla_mod1_10[1:10],
      "html",
      booktabs = T,
      align = c("r"),
      caption = "Predicción de probabilidad de frecuencia de consumo elevada (Audit 1) según valores básicos (controlando por sexo y edad)") %>%
  kable_styling(full_width = F,
                position = "center", font_size = 12)

for(i in 1:nrow(tabla_mod1_10)){
  if(!is.na(tabla_mod1_10$color[i])){
    tabla <- row_spec(tabla,i,background = tabla_mod1_10$color[i], color="#181414")
    
  }
}


tabla
Predicción de probabilidad de frecuencia de consumo elevada (Audit 1) según valores básicos (controlando por sexo y edad)
Variable Beta SE p OR IC95 Deviance df p (model) Cox Snell R2
Universalismo -0.05 0.22 0.801 0.95 0.63 - 1.46 34.647 3 < .001 0.037
Benevolencia 0.43 0.31 0.166 1.54 0.87 - 2.96 36.704 3 < .001 0.039
Autodirección 0.67 0.26 0.010 1.95 1.2 - 3.31 42.196 3 < .001 0.045
Estimulación 0.45 0.19 0.020 1.57 1.09 - 2.33 40.549 3 < .001 0.043
Hedonismo 0.73 0.31 0.021 2.07 1.17 - 4.03 41.049 3 < .001 0.044
Logro -0.05 0.15 0.721 0.95 0.72 - 1.27 34.710 3 < .001 0.037
Poder -0.09 0.15 0.571 0.92 0.68 - 1.23 34.907 3 < .001 0.037
Seguridad -0.39 0.16 0.014 0.68 0.49 - 0.92 40.610 3 < .001 0.043
Conformidad -0.59 0.17 0.001 0.55 0.39 - 0.77 47.997 3 < .001 0.051
Tradición -0.13 0.18 0.472 0.88 0.62 - 1.24 35.104 3 < .001 0.038

Presencia de CEEA

mod_base <- glm(alcohol_2~1, data=base, family=binomial)
mod <- glm(alcohol_2~edad+sexo+C, data=base, family=binomial)

tabla_mod1 <- data.frame(Variable=c("Intercept","Age","Sex (male)","Conservation"),
                         Beta=rep(NA,4),
                         SE=rep(NA,4),
                         p=rep(NA,4),
                         OR=rep(NA,4),
                         IC95=rep(NA,4),
                         Deviance=rep(NA,4),
                         df=rep(NA,4),
                         `p (model)`=rep(NA,4),
                         `Pseudo R2`=rep(NA,4),
                         check.names = F)
tabla_mod1$Beta <- round(mod$coefficients,2)
tabla_mod1$SE <- round(summary(mod)$coef[,2],2)
tabla_mod1$p <- round(summary(mod)$coef[,4],3)
tabla_mod1$OR <- round(exp(tabla_mod1$Beta),2)
tabla_mod1$IC95 <- paste0(round(exp(confint(mod))[,1],2)," - ",round(exp(confint(mod))[,2],2))
tabla_mod1$Deviance[1] <- round(anova(mod_base,mod, test = "Chisq")$`Deviance`[2],3)
tabla_mod1$df[1] <- anova(mod_base,mod, test = "Chisq")$`Df`[2]
tabla_mod1$`p (model)`[1] <- round(anova(mod_base,mod, test = "Chisq")$`Pr(>Chi)`[2],3)
tabla_mod1$`Pseudo R2` <- c("Cox Snell",
                            round(DescTools::PseudoR2(mod, c("CoxSnell")),3),
                            "Nagelkerke",
                            round(DescTools::PseudoR2(mod, c("Nagelkerke")),3))
tabla_mod1$p <- ifelse(tabla_mod1$p==0, "< .001", tabla_mod1$p)
tabla_mod1$`p (model)` <- ifelse(tabla_mod1$`p (model)`==0, "< .001", tabla_mod1$`p (model)`)


tabla <- kable(tabla_mod1,
      "html",
      booktabs = T,
      align = c("r"),
      caption = "Predicción de probabilidad de presencia de CEEA (Audit 2)") %>%
  kable_styling(full_width = F,
                position = "center", font_size = 12)


tabla
Predicción de probabilidad de presencia de CEEA (Audit 2)
Variable Beta SE p OR IC95 Deviance df p (model) Pseudo R2
Intercept -13.41 1.73 < .001 0.00 0 - 0 87.864 3 < .001 Cox Snell
Age 0.77 0.10 < .001 2.16 1.8 - 2.66 0.092
Sex (male) -0.73 0.27 0.007 0.48 0.28 - 0.81 Nagelkerke
Conservation -0.36 0.16 0.023 0.70 0.51 - 0.95 0.213
mod_base <- glm(alcohol_2~1, data=base, family=binomial)
mod_uni <- glm(alcohol_2~edad+sexo+uni, data=base, family=binomial)
mod_ben <- glm(alcohol_2~edad+sexo+ben, data=base, family=binomial)
mod_adi <- glm(alcohol_2~edad+sexo+adi, data=base, family=binomial)
mod_hed <- glm(alcohol_2~edad+sexo+hed, data=base, family=binomial)
mod_est <- glm(alcohol_2~edad+sexo+est, data=base, family=binomial)
mod_log <- glm(alcohol_2~edad+sexo+log, data=base, family=binomial)
mod_pod <- glm(alcohol_2~edad+sexo+pod, data=base, family=binomial)
mod_con <- glm(alcohol_2~edad+sexo+con, data=base, family=binomial)
mod_tra <- glm(alcohol_2~edad+sexo+tra, data=base, family=binomial)
mod_seg <- glm(alcohol_2~edad+sexo+seg, data=base, family=binomial)

tabla_mod1_10 <- data.frame(Variable=c("Universalismo",
                                    "Benevolencia",
                                    "Autodirección",
                                    "Estimulación",
                                    "Hedonismo",
                                    "Logro",
                                    "Poder",
                                    "Seguridad",
                                    "Conformidad",
                                    "Tradición"),
                         Beta=rep(NA,10),
                         SE=rep(NA,10),
                         p=rep(NA,10),
                         OR=rep(NA,10),
                         IC95=rep(NA,10),
                         Deviance=rep(NA,10),
                         df=rep(NA,10),
                         `p (model)`=rep(NA,10),
                         `Cox Snell R2`=rep(NA,10),
                         `Nagelkerke R2`=rep(NA,10),
                         check.names = F)
tabla_mod1_10$Beta <- c(round(mod_uni$coefficients[4],2),
                      round(mod_ben$coefficients[4],2),
                      round(mod_adi$coefficients[4],2),
                      round(mod_est$coefficients[4],2),
                      round(mod_hed$coefficients[4],2),
                      round(mod_log$coefficients[4],2),
                      round(mod_pod$coefficients[4],2),
                      round(mod_seg$coefficients[4],2),
                      round(mod_con$coefficients[4],2),
                      round(mod_tra$coefficients[4],2))
tabla_mod1_10$SE <- c(round(summary(mod_uni)$coef[4,2],2),
                      round(summary(mod_ben)$coef[4,2],2),
                      round(summary(mod_adi)$coef[4,2],2),
                      round(summary(mod_est)$coef[4,2],2),
                      round(summary(mod_hed)$coef[4,2],2),
                      round(summary(mod_log)$coef[4,2],2),
                      round(summary(mod_pod)$coef[4,2],2),
                      round(summary(mod_seg)$coef[4,2],2),
                      round(summary(mod_con)$coef[4,2],2),
                      round(summary(mod_tra)$coef[4,2],2))
tabla_mod1_10$p <- c(round(summary(mod_uni)$coefficients[4,4],3),
                     round(summary(mod_ben)$coefficients[4,4],3),
                     round(summary(mod_adi)$coefficients[4,4],3),
                     round(summary(mod_est)$coefficients[4,4],3),
                     round(summary(mod_hed)$coefficients[4,4],3),
                     round(summary(mod_log)$coefficients[4,4],3),
                     round(summary(mod_pod)$coefficients[4,4],3),
                     round(summary(mod_seg)$coefficients[4,4],3),
                     round(summary(mod_con)$coefficients[4,4],3),
                     round(summary(mod_tra)$coefficients[4,4],3))
tabla_mod1_10$OR <- c(round(exp(mod_uni$coefficients[4]),2),
                      round(exp(mod_ben$coefficients[4]),2),
                      round(exp(mod_adi$coefficients[4]),2),
                      round(exp(mod_est$coefficients[4]),2),
                      round(exp(mod_hed$coefficients[4]),2),
                      round(exp(mod_log$coefficients[4]),2),
                      round(exp(mod_pod$coefficients[4]),2),
                      round(exp(mod_seg$coefficients[4]),2),
                      round(exp(mod_con$coefficients[4]),2),
                      round(exp(mod_tra$coefficients[4]),2))
tabla_mod1_10$IC95 <- c(paste0(round(exp(confint(mod_uni))[4,1],2)," - ",round(exp(confint(mod_uni))[4,2],2)),
                      paste0(round(exp(confint(mod_ben))[4,1],2)," - ",round(exp(confint(mod_ben))[4,2],2)),
                      paste0(round(exp(confint(mod_adi))[4,1],2)," - ",round(exp(confint(mod_adi))[4,2],2)),
                      paste0(round(exp(confint(mod_est))[4,1],2)," - ",round(exp(confint(mod_est))[4,2],2)),
                      paste0(round(exp(confint(mod_hed))[4,1],2)," - ",round(exp(confint(mod_hed))[4,2],2)),
                      paste0(round(exp(confint(mod_log))[4,1],2)," - ",round(exp(confint(mod_log))[4,2],2)),
                      paste0(round(exp(confint(mod_pod))[4,1],2)," - ",round(exp(confint(mod_pod))[4,2],2)),
                      paste0(round(exp(confint(mod_seg))[4,1],2)," - ",round(exp(confint(mod_seg))[4,2],2)),
                      paste0(round(exp(confint(mod_con))[4,1],2)," - ",round(exp(confint(mod_con))[4,2],2)),
                      paste0(round(exp(confint(mod_tra))[4,1],2)," - ",round(exp(confint(mod_tra))[4,2],2)))
tabla_mod1_10$Deviance <- c(round(anova(mod_base,mod_uni, test = "Chisq")$`Deviance`[2],3),
                            round(anova(mod_base,mod_ben, test = "Chisq")$`Deviance`[2],3),
                            round(anova(mod_base,mod_adi, test = "Chisq")$`Deviance`[2],3),
                            round(anova(mod_base,mod_est, test = "Chisq")$`Deviance`[2],3),
                            round(anova(mod_base,mod_hed, test = "Chisq")$`Deviance`[2],3),
                            round(anova(mod_base,mod_log, test = "Chisq")$`Deviance`[2],3),
                            round(anova(mod_base,mod_pod, test = "Chisq")$`Deviance`[2],3),
                            round(anova(mod_base,mod_seg, test = "Chisq")$`Deviance`[2],3),
                            round(anova(mod_base,mod_con, test = "Chisq")$`Deviance`[2],3),
                            round(anova(mod_base,mod_tra, test = "Chisq")$`Deviance`[2],3))
tabla_mod1_10$df <- c(round(anova(mod_base,mod_uni, test = "Chisq")$`Df`[2],3),
                            round(anova(mod_base,mod_ben, test = "Chisq")$`Df`[2],3),
                            round(anova(mod_base,mod_adi, test = "Chisq")$`Df`[2],3),
                            round(anova(mod_base,mod_est, test = "Chisq")$`Df`[2],3),
                            round(anova(mod_base,mod_hed, test = "Chisq")$`Df`[2],3),
                            round(anova(mod_base,mod_log, test = "Chisq")$`Df`[2],3),
                            round(anova(mod_base,mod_pod, test = "Chisq")$`Df`[2],3),
                            round(anova(mod_base,mod_seg, test = "Chisq")$`Df`[2],3),
                            round(anova(mod_base,mod_con, test = "Chisq")$`Df`[2],3),
                            round(anova(mod_base,mod_tra, test = "Chisq")$`Df`[2],3))
tabla_mod1_10$`p (model)` <- c(round(anova(mod_base,mod_uni, test = "Chisq")$`Pr(>Chi)`[2],3),
                            round(anova(mod_base,mod_ben, test = "Chisq")$`Pr(>Chi)`[2],3),
                            round(anova(mod_base,mod_adi, test = "Chisq")$`Pr(>Chi)`[2],3),
                            round(anova(mod_base,mod_est, test = "Chisq")$`Pr(>Chi)`[2],3),
                            round(anova(mod_base,mod_hed, test = "Chisq")$`Pr(>Chi)`[2],3),
                            round(anova(mod_base,mod_log, test = "Chisq")$`Pr(>Chi)`[2],3),
                            round(anova(mod_base,mod_pod, test = "Chisq")$`Pr(>Chi)`[2],3),
                            round(anova(mod_base,mod_seg, test = "Chisq")$`Pr(>Chi)`[2],3),
                            round(anova(mod_base,mod_con, test = "Chisq")$`Pr(>Chi)`[2],3),
                            round(anova(mod_base,mod_tra, test = "Chisq")$`Pr(>Chi)`[2],3))
tabla_mod1_10$`Cox Snell R2` <- c(round(DescTools::PseudoR2(mod_uni, c("CoxSnell")),3),
                                  round(DescTools::PseudoR2(mod_ben, c("CoxSnell")),3),
                                  round(DescTools::PseudoR2(mod_adi, c("CoxSnell")),3),
                                  round(DescTools::PseudoR2(mod_est, c("CoxSnell")),3),
                                  round(DescTools::PseudoR2(mod_hed, c("CoxSnell")),3),
                                  round(DescTools::PseudoR2(mod_log, c("CoxSnell")),3),
                                  round(DescTools::PseudoR2(mod_pod, c("CoxSnell")),3),
                                  round(DescTools::PseudoR2(mod_seg, c("CoxSnell")),3),
                                  round(DescTools::PseudoR2(mod_con, c("CoxSnell")),3),
                                  round(DescTools::PseudoR2(mod_tra, c("CoxSnell")),3))
tabla_mod1_10$`Nagelkerke R2` <- c(round(DescTools::PseudoR2(mod_uni, c("Nagelkerke")),3),
                                  round(DescTools::PseudoR2(mod_ben, c("Nagelkerke")),3),
                                  round(DescTools::PseudoR2(mod_adi, c("Nagelkerke")),3),
                                  round(DescTools::PseudoR2(mod_est, c("Nagelkerke")),3),
                                  round(DescTools::PseudoR2(mod_hed, c("Nagelkerke")),3),
                                  round(DescTools::PseudoR2(mod_log, c("Nagelkerke")),3),
                                  round(DescTools::PseudoR2(mod_pod, c("Nagelkerke")),3),
                                  round(DescTools::PseudoR2(mod_seg, c("Nagelkerke")),3),
                                  round(DescTools::PseudoR2(mod_con, c("Nagelkerke")),3),
                                  round(DescTools::PseudoR2(mod_tra, c("Nagelkerke")),3))
tabla_mod1_10$color <- ifelse(tabla_mod1_10$p<.05&tabla_mod1_10$OR<1,"#daaaaa",
                          ifelse(tabla_mod1_10$p<.05&tabla_mod1_10$OR>1,"#a5c3c6",NA))
tabla_mod1_10$p <- ifelse(tabla_mod1_10$p==0, "< .001", tabla_mod1_10$p)
tabla_mod1_10$`p (model)` <- ifelse(tabla_mod1_10$`p (model)`==0, "< .001", tabla_mod1_10$`p (model)`)







tabla <- kable(tabla_mod1_10[1:10],
      "html",
      booktabs = T,
      align = c("r"),
      caption = "Predicción de probabilidad de presencia de CEEA (Audit 2) según valores básicos (controlando por sexo y edad)") %>%
  kable_styling(full_width = F,
                position = "center", font_size = 12)

for(i in 1:nrow(tabla_mod1_10)){
  if(!is.na(tabla_mod1_10$color[i])){
    tabla <- row_spec(tabla,i,background = tabla_mod1_10$color[i], color="#181414")
    
  }
}


tabla
Predicción de probabilidad de presencia de CEEA (Audit 2) según valores básicos (controlando por sexo y edad)
Variable Beta SE p OR IC95 Deviance df p (model) Cox Snell R2
Universalismo 0.06 0.16 0.726 1.06 0.78 - 1.46 82.666 3 < .001 0.086
Benevolencia -0.12 0.19 0.516 0.89 0.62 - 1.29 82.955 3 < .001 0.087
Autodirección 0.03 0.15 0.827 1.03 0.77 - 1.4 82.589 3 < .001 0.086
Estimulación 0.02 0.12 0.891 1.02 0.81 - 1.29 82.560 3 < .001 0.086
Hedonismo 0.19 0.18 0.293 1.21 0.86 - 1.76 83.697 3 < .001 0.088
Logro -0.07 0.10 0.513 0.93 0.76 - 1.15 82.966 3 < .001 0.087
Poder 0.11 0.10 0.304 1.11 0.91 - 1.36 83.596 3 < .001 0.087
Seguridad -0.27 0.11 0.017 0.76 0.61 - 0.95 88.274 3 < .001 0.092
Conformidad -0.25 0.11 0.024 0.78 0.63 - 0.96 87.831 3 < .001 0.092
Tradición -0.03 0.12 0.812 0.97 0.76 - 1.23 82.598 3 < .001 0.086

Frecuencia de CEEA

mod_base <- glm(alcohol_3~1, data=base, family=binomial)
mod <- glm(alcohol_3~edad+sexo+C+AC, data=base, family=binomial)

tabla_mod1 <- data.frame(Variable=c("Intercept","Age","Sex (male)","Conservation","Openness to Change"),
                         Beta=rep(NA,5),
                         SE=rep(NA,5),
                         p=rep(NA,5),
                         OR=rep(NA,5),
                         IC95=rep(NA,5),
                         Deviance=rep(NA,5),
                         df=rep(NA,5),
                         `p (model)`=rep(NA,5),
                         `Pseudo R2`=rep(NA,5),
                         check.names = F)
tabla_mod1$Beta <- round(mod$coefficients,2)
tabla_mod1$SE <- round(summary(mod)$coef[,2],2)
tabla_mod1$p <- round(summary(mod)$coef[,4],3)
tabla_mod1$OR <- round(exp(tabla_mod1$Beta),2)
tabla_mod1$IC95 <- paste0(round(exp(confint(mod))[,1],2)," - ",round(exp(confint(mod))[,2],2))
tabla_mod1$Deviance[1] <- round(anova(mod_base,mod, test = "Chisq")$`Deviance`[2],3)
tabla_mod1$df[1] <- anova(mod_base,mod, test = "Chisq")$`Df`[2]
tabla_mod1$`p (model)`[1] <- round(anova(mod_base,mod, test = "Chisq")$`Pr(>Chi)`[2],3)
tabla_mod1$`Pseudo R2` <- c("Cox Snell",
                            round(DescTools::PseudoR2(mod, c("CoxSnell")),3),
                            NA,
                            "Nagelkerke",
                            round(DescTools::PseudoR2(mod, c("Nagelkerke")),3))
tabla_mod1$p <- ifelse(tabla_mod1$p==0, "< .001", tabla_mod1$p)
tabla_mod1$`p (model)` <- ifelse(tabla_mod1$`p (model)`==0, "< .001", tabla_mod1$`p (model)`)


tabla <- kable(tabla_mod1,
      "html",
      booktabs = T,
      align = c("r"),
      caption = "Predicción de probabilidad de frecuencia de CEEA elevada (Audit 3)") %>%
  kable_styling(full_width = F,
                position = "center", font_size = 12)


tabla
Predicción de probabilidad de frecuencia de CEEA elevada (Audit 3)
Variable Beta SE p OR IC95 Deviance df p (model) Pseudo R2
Intercept -21.61 3.40 < .001 0.00 0 - 0 64.256 4 < .001 Cox Snell
Age 0.99 0.17 < .001 2.69 1.99 - 3.8 0.068
Sex (male) -0.42 0.39 0.287 0.66 0.3 - 1.4
Conservation -0.53 0.23 0.02 0.59 0.37 - 0.91 Nagelkerke
Openness to Change 0.82 0.32 0.009 2.27 1.26 - 4.35 0.249
mod_base <- glm(alcohol_3~1, data=base, family=binomial)
mod_uni <- glm(alcohol_3~edad+sexo+uni, data=base, family=binomial)
mod_ben <- glm(alcohol_3~edad+sexo+ben, data=base, family=binomial)
mod_adi <- glm(alcohol_3~edad+sexo+adi, data=base, family=binomial)
mod_hed <- glm(alcohol_3~edad+sexo+hed, data=base, family=binomial)
mod_est <- glm(alcohol_3~edad+sexo+est, data=base, family=binomial)
mod_log <- glm(alcohol_3~edad+sexo+log, data=base, family=binomial)
mod_pod <- glm(alcohol_3~edad+sexo+pod, data=base, family=binomial)
mod_con <- glm(alcohol_3~edad+sexo+con, data=base, family=binomial)
mod_tra <- glm(alcohol_3~edad+sexo+tra, data=base, family=binomial)
mod_seg <- glm(alcohol_3~edad+sexo+seg, data=base, family=binomial)

tabla_mod1_10 <- data.frame(Variable=c("Universalismo",
                                    "Benevolencia",
                                    "Autodirección",
                                    "Estimulación",
                                    "Hedonismo",
                                    "Logro",
                                    "Poder",
                                    "Seguridad",
                                    "Conformidad",
                                    "Tradición"),
                         Beta=rep(NA,10),
                         SE=rep(NA,10),
                         p=rep(NA,10),
                         OR=rep(NA,10),
                         IC95=rep(NA,10),
                         Deviance=rep(NA,10),
                         df=rep(NA,10),
                         `p (model)`=rep(NA,10),
                         `Cox Snell R2`=rep(NA,10),
                         `Nagelkerke R2`=rep(NA,10),
                         check.names = F)
tabla_mod1_10$Beta <- c(round(mod_uni$coefficients[4],2),
                      round(mod_ben$coefficients[4],2),
                      round(mod_adi$coefficients[4],2),
                      round(mod_est$coefficients[4],2),
                      round(mod_hed$coefficients[4],2),
                      round(mod_log$coefficients[4],2),
                      round(mod_pod$coefficients[4],2),
                      round(mod_seg$coefficients[4],2),
                      round(mod_con$coefficients[4],2),
                      round(mod_tra$coefficients[4],2))
tabla_mod1_10$SE <- c(round(summary(mod_uni)$coef[4,2],2),
                      round(summary(mod_ben)$coef[4,2],2),
                      round(summary(mod_adi)$coef[4,2],2),
                      round(summary(mod_est)$coef[4,2],2),
                      round(summary(mod_hed)$coef[4,2],2),
                      round(summary(mod_log)$coef[4,2],2),
                      round(summary(mod_pod)$coef[4,2],2),
                      round(summary(mod_seg)$coef[4,2],2),
                      round(summary(mod_con)$coef[4,2],2),
                      round(summary(mod_tra)$coef[4,2],2))
tabla_mod1_10$p <- c(round(summary(mod_uni)$coefficients[4,4],3),
                     round(summary(mod_ben)$coefficients[4,4],3),
                     round(summary(mod_adi)$coefficients[4,4],3),
                     round(summary(mod_est)$coefficients[4,4],3),
                     round(summary(mod_hed)$coefficients[4,4],3),
                     round(summary(mod_log)$coefficients[4,4],3),
                     round(summary(mod_pod)$coefficients[4,4],3),
                     round(summary(mod_seg)$coefficients[4,4],3),
                     round(summary(mod_con)$coefficients[4,4],3),
                     round(summary(mod_tra)$coefficients[4,4],3))
tabla_mod1_10$OR <- c(round(exp(mod_uni$coefficients[4]),2),
                      round(exp(mod_ben$coefficients[4]),2),
                      round(exp(mod_adi$coefficients[4]),2),
                      round(exp(mod_est$coefficients[4]),2),
                      round(exp(mod_hed$coefficients[4]),2),
                      round(exp(mod_log$coefficients[4]),2),
                      round(exp(mod_pod$coefficients[4]),2),
                      round(exp(mod_seg$coefficients[4]),2),
                      round(exp(mod_con$coefficients[4]),2),
                      round(exp(mod_tra$coefficients[4]),2))
tabla_mod1_10$IC95 <- c(paste0(round(exp(confint(mod_uni))[4,1],2)," - ",round(exp(confint(mod_uni))[4,2],2)),
                      paste0(round(exp(confint(mod_ben))[4,1],2)," - ",round(exp(confint(mod_ben))[4,2],2)),
                      paste0(round(exp(confint(mod_adi))[4,1],2)," - ",round(exp(confint(mod_adi))[4,2],2)),
                      paste0(round(exp(confint(mod_est))[4,1],2)," - ",round(exp(confint(mod_est))[4,2],2)),
                      paste0(round(exp(confint(mod_hed))[4,1],2)," - ",round(exp(confint(mod_hed))[4,2],2)),
                      paste0(round(exp(confint(mod_log))[4,1],2)," - ",round(exp(confint(mod_log))[4,2],2)),
                      paste0(round(exp(confint(mod_pod))[4,1],2)," - ",round(exp(confint(mod_pod))[4,2],2)),
                      paste0(round(exp(confint(mod_seg))[4,1],2)," - ",round(exp(confint(mod_seg))[4,2],2)),
                      paste0(round(exp(confint(mod_con))[4,1],2)," - ",round(exp(confint(mod_con))[4,2],2)),
                      paste0(round(exp(confint(mod_tra))[4,1],2)," - ",round(exp(confint(mod_tra))[4,2],2)))
tabla_mod1_10$Deviance <- c(round(anova(mod_base,mod_uni, test = "Chisq")$`Deviance`[2],3),
                            round(anova(mod_base,mod_ben, test = "Chisq")$`Deviance`[2],3),
                            round(anova(mod_base,mod_adi, test = "Chisq")$`Deviance`[2],3),
                            round(anova(mod_base,mod_est, test = "Chisq")$`Deviance`[2],3),
                            round(anova(mod_base,mod_hed, test = "Chisq")$`Deviance`[2],3),
                            round(anova(mod_base,mod_log, test = "Chisq")$`Deviance`[2],3),
                            round(anova(mod_base,mod_pod, test = "Chisq")$`Deviance`[2],3),
                            round(anova(mod_base,mod_seg, test = "Chisq")$`Deviance`[2],3),
                            round(anova(mod_base,mod_con, test = "Chisq")$`Deviance`[2],3),
                            round(anova(mod_base,mod_tra, test = "Chisq")$`Deviance`[2],3))
tabla_mod1_10$df <- c(round(anova(mod_base,mod_uni, test = "Chisq")$`Df`[2],3),
                            round(anova(mod_base,mod_ben, test = "Chisq")$`Df`[2],3),
                            round(anova(mod_base,mod_adi, test = "Chisq")$`Df`[2],3),
                            round(anova(mod_base,mod_est, test = "Chisq")$`Df`[2],3),
                            round(anova(mod_base,mod_hed, test = "Chisq")$`Df`[2],3),
                            round(anova(mod_base,mod_log, test = "Chisq")$`Df`[2],3),
                            round(anova(mod_base,mod_pod, test = "Chisq")$`Df`[2],3),
                            round(anova(mod_base,mod_seg, test = "Chisq")$`Df`[2],3),
                            round(anova(mod_base,mod_con, test = "Chisq")$`Df`[2],3),
                            round(anova(mod_base,mod_tra, test = "Chisq")$`Df`[2],3))
tabla_mod1_10$`p (model)` <- c(round(anova(mod_base,mod_uni, test = "Chisq")$`Pr(>Chi)`[2],3),
                            round(anova(mod_base,mod_ben, test = "Chisq")$`Pr(>Chi)`[2],3),
                            round(anova(mod_base,mod_adi, test = "Chisq")$`Pr(>Chi)`[2],3),
                            round(anova(mod_base,mod_est, test = "Chisq")$`Pr(>Chi)`[2],3),
                            round(anova(mod_base,mod_hed, test = "Chisq")$`Pr(>Chi)`[2],3),
                            round(anova(mod_base,mod_log, test = "Chisq")$`Pr(>Chi)`[2],3),
                            round(anova(mod_base,mod_pod, test = "Chisq")$`Pr(>Chi)`[2],3),
                            round(anova(mod_base,mod_seg, test = "Chisq")$`Pr(>Chi)`[2],3),
                            round(anova(mod_base,mod_con, test = "Chisq")$`Pr(>Chi)`[2],3),
                            round(anova(mod_base,mod_tra, test = "Chisq")$`Pr(>Chi)`[2],3))
tabla_mod1_10$`Cox Snell R2` <- c(round(DescTools::PseudoR2(mod_uni, c("CoxSnell")),3),
                                  round(DescTools::PseudoR2(mod_ben, c("CoxSnell")),3),
                                  round(DescTools::PseudoR2(mod_adi, c("CoxSnell")),3),
                                  round(DescTools::PseudoR2(mod_est, c("CoxSnell")),3),
                                  round(DescTools::PseudoR2(mod_hed, c("CoxSnell")),3),
                                  round(DescTools::PseudoR2(mod_log, c("CoxSnell")),3),
                                  round(DescTools::PseudoR2(mod_pod, c("CoxSnell")),3),
                                  round(DescTools::PseudoR2(mod_seg, c("CoxSnell")),3),
                                  round(DescTools::PseudoR2(mod_con, c("CoxSnell")),3),
                                  round(DescTools::PseudoR2(mod_tra, c("CoxSnell")),3))
tabla_mod1_10$`Nagelkerke R2` <- c(round(DescTools::PseudoR2(mod_uni, c("Nagelkerke")),3),
                                  round(DescTools::PseudoR2(mod_ben, c("Nagelkerke")),3),
                                  round(DescTools::PseudoR2(mod_adi, c("Nagelkerke")),3),
                                  round(DescTools::PseudoR2(mod_est, c("Nagelkerke")),3),
                                  round(DescTools::PseudoR2(mod_hed, c("Nagelkerke")),3),
                                  round(DescTools::PseudoR2(mod_log, c("Nagelkerke")),3),
                                  round(DescTools::PseudoR2(mod_pod, c("Nagelkerke")),3),
                                  round(DescTools::PseudoR2(mod_seg, c("Nagelkerke")),3),
                                  round(DescTools::PseudoR2(mod_con, c("Nagelkerke")),3),
                                  round(DescTools::PseudoR2(mod_tra, c("Nagelkerke")),3))
tabla_mod1_10$color <- ifelse(tabla_mod1_10$p<.05&tabla_mod1_10$OR<1,"#daaaaa",
                          ifelse(tabla_mod1_10$p<.05&tabla_mod1_10$OR>1,"#a5c3c6",NA))
tabla_mod1_10$p <- ifelse(tabla_mod1_10$p==0, "< .001", tabla_mod1_10$p)
tabla_mod1_10$`p (model)` <- ifelse(tabla_mod1_10$`p (model)`==0, "< .001", tabla_mod1_10$`p (model)`)







tabla <- kable(tabla_mod1_10[1:10],
      "html",
      booktabs = T,
      align = c("r"),
      caption = "Predicción de probabilidad de frecuencia de CEEA elevada (Audit 3) según valores básicos (controlando por sexo y edad)") %>%
  kable_styling(full_width = F,
                position = "center", font_size = 12)

for(i in 1:nrow(tabla_mod1_10)){
  if(!is.na(tabla_mod1_10$color[i])){
    tabla <- row_spec(tabla,i,background = tabla_mod1_10$color[i], color="#181414")
    
  }
}


tabla
Predicción de probabilidad de frecuencia de CEEA elevada (Audit 3) según valores básicos (controlando por sexo y edad)
Variable Beta SE p OR IC95 Deviance df p (model) Cox Snell R2
Universalismo 0.14 0.23 0.551 1.15 0.74 - 1.84 53.421 3 < .001 0.057
Benevolencia 0.27 0.30 0.367 1.31 0.75 - 2.46 53.924 3 < .001 0.057
Autodirección 0.28 0.23 0.221 1.33 0.86 - 2.14 54.635 3 < .001 0.058
Estimulación 0.36 0.19 0.060 1.43 1 - 2.1 56.895 3 < .001 0.060
Hedonismo 0.67 0.32 0.033 1.96 1.1 - 3.84 58.479 3 < .001 0.062
Logro -0.04 0.15 0.795 0.96 0.73 - 1.29 53.126 3 < .001 0.056
Poder 0.01 0.15 0.963 1.01 0.75 - 1.35 53.062 3 < .001 0.056
Seguridad -0.27 0.16 0.084 0.76 0.56 - 1.04 56.029 3 < .001 0.059
Conformidad -0.17 0.15 0.272 0.85 0.62 - 1.13 54.289 3 < .001 0.058
Tradición -0.24 0.18 0.182 0.79 0.56 - 1.12 54.855 3 < .001 0.058

Referencias

  • Bartholomew, D. J., Steele, F., Moustaki, I., & Galbraith, J. I. (2008). Analysis of multivariate social science data. CRC press.
  • Beramendi, M., & Zubieta, E. (2017). Validation of the 40 and 21 items versions of the portrait values questionnaire in Argentina. Psychologia, 60(2), 68-84.
  • Deegan, J. (1978). On the occurrence of standardized regression coefficients greater than one. Educational and Psychological Measurement, 38 (4), 873-888.
  • Forero, C. G., Maydeu-Olivares, A., & Gallardo-Pujol, D. (2009). Factor analysis with ordinal indicator: A Monte Carlo Study Comparing DWLS and ULS Estimation. Structural Equation Modeling, 16, 625–641.
  • Gana, K., & Broc, G. (2019). Structural equation modeling with lavaan. John Wiley & Sons.
  • Mair, P., Borg, I., & Rusch, T. (2016). Goodness-of-fit assessment in multidimensional scaling and unfolding. Multivariate Behavioral Research, 51, 772–789.