Predictores del desempeño

Author
Published

February 21, 2025

Code
# options to customize chunk outputs
knitr::opts_chunk$set(
  tidy.opts = list(width.cutoff = 65), 
  tidy = TRUE,
  message = FALSE
 )

Objetivo

  • Evaluar predictores del desempeño en la Olimpiada Costarricense de Biología (OLICOCIBI)

Cargar paquetes

Code
# | message: false | warning: false

# install/ load packages
sketchy::load_packages(packages = c("knitr", "formatR", "readxl",
    "lme4", "lmerTest", "emmeans", "ggplot2", "viridis"))

1 Leer datos

Code
datos_org <- read_excel("/home/m/Dropbox/Projects/olimpiadas_biologia/OLICOCIBI_Total_Recopilado.xlsx")
# dat$ names(dat)

dat <- datos_org[complete.cases(datos_org[, c("Provincia", "Zona",
    "Tipo", "Sexo", "Año", "Categoría (A o B)", "Nota eliminatoria")]),
    ]

dat$Medalla.bin <- ifelse(is.na(dat$Medalla), "No", "Si")


# nrow(dat)


dat <- dat[, c("Provincia", "Zona", "Tipo", "Sexo", "Año", "Categoría (A o B)",
    "Nota eliminatoria", "Medalla.bin")]

names(dat) <- c("Provincia", "Zona", "Tipo", "Sexo", "Año", "Categoria",
    "Nota", "Medalla.bin")

dat$Sexo[dat$Sexo == "FF"] <- "F"

dat$Sexo[dat$Sexo == "f"] <- "F"
dat$Sexo[dat$Sexo == "m"] <- "M"


dat <- dat[dat$Sexo != "*", ]
# nrow(dat) table(dat$Sexo) table(dat$Tipo)

dat$Notap <- dat$Nota/100

2 Analisis

2.1 Nota eliminatoria

2.1.1 Regresión

Code
dat$Provincia <- factor(dat$Provincia, levels = c("San Jose", "Alajuela",
    "Heredia", "Cartago", "Limon", "Puntarenas", "Guanacaste"))


formula <- "Notap ~ Provincia + Zona + Tipo + Sexo + Categoria"


mod <- glm(formula, data = dat, family = binomial(link = "logit"))
Warning in eval(family$initialize): non-integer #successes in a binomial glm!
Code
summary(mod)

Call:
glm(formula = formula, family = binomial(link = "logit"), data = dat)

Coefficients:
                    Estimate Std. Error z value Pr(>|z|)    
(Intercept)         -0.03128    0.09184  -0.341  0.73338    
ProvinciaAlajuela    0.04898    0.05649   0.867  0.38590    
ProvinciaHeredia     0.10768    0.06939   1.552  0.12072    
ProvinciaCartago    -0.08129    0.08121  -1.001  0.31685    
ProvinciaLimon      -0.14222    0.07075  -2.010  0.04442 *  
ProvinciaPuntarenas -0.12217    0.07239  -1.688  0.09147 .  
ProvinciaGuanacaste -0.23189    0.07707  -3.009  0.00262 ** 
ZonaUrbano           0.03345    0.06124   0.546  0.58487    
TipoPNC             -0.60411    0.05990 -10.086  < 2e-16 ***
TipoPrivado         -0.41933    0.05705  -7.350 1.98e-13 ***
TipoSubvencionado   -0.42431    0.09539  -4.448 8.66e-06 ***
SexoM                0.01821    0.03932   0.463  0.64338    
CategoriaB           0.09147    0.03923   2.331  0.01973 *  
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 1121.74  on 11267  degrees of freedom
Residual deviance:  963.61  on 11255  degrees of freedom
AIC: 13061

Number of Fisher Scoring iterations: 3

2.1.2 Comparaciones multiples

Code
# contrasts by tipo
emmeans(mod, pairwise ~ Tipo, type = "response")
$emmeans
 Tipo           prob      SE  df asymp.LCL asymp.UCL
 PC            0.495 0.01339 Inf     0.469     0.521
 PNC           0.349 0.00774 Inf     0.334     0.364
 Privado       0.392 0.01054 Inf     0.371     0.413
 Subvencionado 0.391 0.02037 Inf     0.352     0.431

Results are averaged over the levels of: Provincia, Zona, Sexo, Categoria 
Confidence level used: 0.95 
Intervals are back-transformed from the logit scale 

$contrasts
 contrast                odds.ratio     SE  df null z.ratio p.value
 PC / PNC                     1.830 0.1096 Inf    1  10.086  <.0001
 PC / Privado                 1.521 0.0868 Inf    1   7.350  <.0001
 PC / Subvencionado           1.529 0.1458 Inf    1   4.448  0.0001
 PNC / Privado                0.831 0.0431 Inf    1  -3.565  0.0021
 PNC / Subvencionado          0.835 0.0767 Inf    1  -1.959  0.2035
 Privado / Subvencionado      1.005 0.0877 Inf    1   0.057  0.9999

Results are averaged over the levels of: Provincia, Zona, Sexo, Categoria 
P value adjustment: tukey method for comparing a family of 4 estimates 
Tests are performed on the log odds ratio scale 

2.1.3 Gráficos

Code
dat$Tipo <- factor(dat$Tipo, levels = c("PC", "Privado", "Subvencionado", "PNC"))

# raincoud plot:
fill_color <- mako(10, alpha = 0.4)[7]

ggplot(dat, aes(y = Nota, x = Tipo)) +
  # add half-violin from {ggdist} package
  ggdist::stat_halfeye(
    fill = fill_color,
    alpha = 0.5,
    # custom bandwidth
    adjust = .5,
    # adjust height
    width = .6,
    .width = 0,
    # move geom to the cright
    justification = -.2,
    point_colour = NA
  ) +
  geom_boxplot(fill = fill_color,
    width = .15,
    # remove outliers
    outlier.shape = NA # `outlier.shape = NA` works as well
  ) +
  # add justified jitter from the {gghalves} package
  gghalves::geom_half_point(
    color = fill_color,
    # draw jitter on the left
    side = "l",
    # control range of jitter
    range_scale = .4,
    # add some transparency
    alpha = .5,
  ) +
   # ylim(c(-30, 310)) +
  # geom_text(data = agg_dat, aes(y = rep(-25, 5), x = sensory_input, label = n.labels), nudge_x = -0.13, size = 6) + 
  #  scale_x_discrete(labels=c("Control" = "Noise control", "Sound vision" = "Sound & vision", "Vision" = "Vision", "Lessen input" = "Lessen input")) +
  labs(x = "Tipo de colegio", y = "Nota (%)") + theme(axis.text.x = element_text(angle = 15, hjust = 1))

Code
agg <- aggregate(Notap ~ Provincia, data = dat, mean)
agg <- agg[order(agg$Notap, decreasing = T),]


dat$Provincia <- factor(dat$Provincia, levels = agg$Provincia)


ggplot(dat, aes(y = Nota, x = Provincia)) +
  # add half-violin from {ggdist} package
  ggdist::stat_halfeye(
    fill = fill_color,
    alpha = 0.5,
    # custom bandwidth
    adjust = .5,
    # adjust height
    width = .6,
    .width = 0,
    # move geom to the cright
    justification = -.2,
    point_colour = NA
  ) +
  geom_boxplot(fill = fill_color,
    width = .15,
    # remove outliers
    outlier.shape = NA # `outlier.shape = NA` works as well
  ) +
  # add justified jitter from the {gghalves} package
  gghalves::geom_half_point(
    color = fill_color,
    # draw jitter on the left
    side = "l",
    # control range of jitter
    range_scale = .4,
    # add some transparency
    alpha = .5,
  ) +
   # ylim(c(-30, 310)) +
  # geom_text(data = agg_dat, aes(y = rep(-25, 5), x = sensory_input, label = n.labels), nudge_x = -0.13, size = 6) + 
  #  scale_x_discrete(labels=c("Control" = "Noise control", "Sound vision" = "Sound & vision", "Vision" = "Vision", "Lessen input" = "Lessen input")) +
  labs(x = "Provincia", y = "Nota (%)") + theme(axis.text.x = element_text(angle = 15, hjust = 1))

2.2 Medallas

2.2.1 Regresión

Code
dat$Provincia <- factor(dat$Provincia, levels = c("San Jose", "Alajuela",
    "Heredia", "Cartago", "Limon", "Puntarenas", "Guanacaste"))

dat$medalla <- ifelse(dat$Medalla.bin == "Si", 1, 0)
formula <- "medalla ~ Provincia + Zona + Tipo + Sexo + Categoria"

mod <- glm(formula, data = dat, family = binomial(link = "logit"))


summary(mod)

Call:
glm(formula = formula, family = binomial(link = "logit"), data = dat)

Coefficients:
                    Estimate Std. Error z value Pr(>|z|)    
(Intercept)         -2.02055    0.24579  -8.220  < 2e-16 ***
ProvinciaAlajuela    0.22167    0.10851   2.043  0.04106 *  
ProvinciaHeredia     0.20663    0.15772   1.310  0.19016    
ProvinciaCartago    -0.59420    0.19720  -3.013  0.00259 ** 
ProvinciaLimon      -0.96287    0.17928  -5.371 7.84e-08 ***
ProvinciaPuntarenas -0.73822    0.18502  -3.990 6.61e-05 ***
ProvinciaGuanacaste -2.19322    0.31686  -6.922 4.46e-12 ***
ZonaUrbano           0.49134    0.20901   2.351  0.01874 *  
TipoPrivado         -1.53743    0.10379 -14.812  < 2e-16 ***
TipoSubvencionado   -2.07364    0.24290  -8.537  < 2e-16 ***
TipoPNC             -2.43238    0.15425 -15.769  < 2e-16 ***
SexoM                0.42719    0.08618   4.957 7.15e-07 ***
CategoriaB           0.05307    0.08671   0.612  0.54050    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 4857.9  on 11267  degrees of freedom
Residual deviance: 4165.6  on 11255  degrees of freedom
AIC: 4191.6

Number of Fisher Scoring iterations: 7

2.2.2 Comparaciones multiples

Code
# contrasts by tipo
emmeans(mod, pairwise ~ Tipo, type = "response")
$emmeans
 Tipo            prob      SE  df asymp.LCL asymp.UCL
 PC            0.1077 0.01200 Inf   0.08631    0.1335
 Privado       0.0253 0.00324 Inf   0.01965    0.0325
 Subvencionado 0.0149 0.00370 Inf   0.00918    0.0242
 PNC           0.0105 0.00147 Inf   0.00797    0.0138

Results are averaged over the levels of: Provincia, Zona, Sexo, Categoria 
Confidence level used: 0.95 
Intervals are back-transformed from the logit scale 

$contrasts
 contrast                odds.ratio    SE  df null z.ratio p.value
 PC / Privado                  4.65 0.483 Inf    1  14.812  <.0001
 PC / Subvencionado            7.95 1.932 Inf    1   8.537  <.0001
 PC / PNC                     11.39 1.756 Inf    1  15.769  <.0001
 Privado / Subvencionado       1.71 0.407 Inf    1   2.251  0.1097
 Privado / PNC                 2.45 0.382 Inf    1   5.735  <.0001
 Subvencionado / PNC           1.43 0.383 Inf    1   1.342  0.5358

Results are averaged over the levels of: Provincia, Zona, Sexo, Categoria 
P value adjustment: tukey method for comparing a family of 4 estimates 
Tests are performed on the log odds ratio scale 

2.2.3 Gráficos

Code
dat$Tipo <- factor(dat$Tipo, levels = c("PC", "Privado", "Subvencionado",
    "PNC"))

# raincoud plot:
fill_color <- mako(10, alpha = 0.7)[7]


ggplot(dat, aes(y = medalla, x = Tipo)) + geom_bar(stat = "identity",
    fill = fill_color) + labs(x = "Tipo de colegio", y = "Total de medallas") +
    theme(axis.text.x = element_text(angle = 15, hjust = 1))

Code
agg_med <- aggregate(medalla ~ Tipo, data = dat, function(x) sum(x)/length(x))

ggplot(agg_med, aes(y = medalla, x = Tipo)) + geom_bar(stat = "identity",
    fill = fill_color) + labs(x = "Tipo de colegio", y = "Proporción con medalla") +
    theme(axis.text.x = element_text(angle = 15, hjust = 1))

Code
ggplot(dat, aes(y = medalla, x = Provincia)) + geom_bar(stat = "identity",
    fill = fill_color) + labs(x = "Tipo de colegio", y = "Total de medallas") +
    theme(axis.text.x = element_text(angle = 15, hjust = 1))

Code
agg_med <- aggregate(medalla ~ Provincia, data = dat, function(x) sum(x)/length(x))

agg_med <- agg_med[order(agg_med$medalla, decreasing = T), ]


agg_med$Provincia <- factor(agg_med$Provincia, levels = agg_med$Provincia)


ggplot(agg_med, aes(y = medalla, x = Provincia)) + geom_bar(stat = "identity",
    fill = fill_color) + labs(x = "Provincia", y = "Proporción con medalla") +
    theme(axis.text.x = element_text(angle = 15, hjust = 1))

2.3 Nota final

2.3.1 Regresión

Code
# | message: false | warning: false

dat <- datos_org[complete.cases(datos_org[, c("Provincia", "Zona",
    "Tipo", "Sexo", "Año", "Categoría (A o B)", "Nota final")]),
    ]

dat$Medalla.bin <- ifelse(is.na(dat$Medalla), "No", "Si")

dat <- dat[, c("Provincia", "Zona", "Tipo", "Sexo", "Año", "Categoría (A o B)",
    "Nota final")]

names(dat) <- c("Provincia", "Zona", "Tipo", "Sexo", "Año", "Categoria",
    "Nota")

dat$Sexo[dat$Sexo == "FF"] <- "F"

dat$Sexo[dat$Sexo == "f"] <- "F"
dat$Sexo[dat$Sexo == "m"] <- "M"


dat <- dat[dat$Sexo != "*", ]
# nrow(dat) table(dat$Sexo) table(dat$Tipo)

dat$Notap <- dat$Nota/100
Code
dat$Provincia <- factor(dat$Provincia, levels = c("San Jose", "Alajuela",
    "Heredia", "Cartago", "Limon", "Puntarenas", "Guanacaste"))


formula <- "Notap ~ Provincia + Zona + Tipo + Sexo + Categoria"


mod <- glm(formula, data = dat, family = binomial(link = "logit"))
Warning in eval(family$initialize): non-integer #successes in a binomial glm!
Code
summary(mod)

Call:
glm(formula = formula, family = binomial(link = "logit"), data = dat)

Coefficients:
                    Estimate Std. Error z value Pr(>|z|)    
(Intercept)          0.34989    0.25388   1.378   0.1681    
ProvinciaAlajuela   -0.04806    0.12810  -0.375   0.7075    
ProvinciaHeredia     0.06093    0.17691   0.344   0.7305    
ProvinciaCartago    -0.01244    0.25353  -0.049   0.9609    
ProvinciaLimon      -0.10219    0.20212  -0.506   0.6132    
ProvinciaPuntarenas -0.09991    0.20364  -0.491   0.6237    
ProvinciaGuanacaste -0.32065    0.29438  -1.089   0.2761    
ZonaUrbano          -0.08098    0.20364  -0.398   0.6909    
TipoPNC             -0.32917    0.16311  -2.018   0.0436 *  
TipoPrivado         -0.16413    0.12125  -1.354   0.1758    
TipoSubvencionado   -0.38659    0.26142  -1.479   0.1392    
SexoM                0.10479    0.09954   1.053   0.2925    
CategoriaB          -0.44610    0.10150  -4.395 1.11e-05 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 127.817  on 1712  degrees of freedom
Residual deviance:  98.611  on 1700  degrees of freedom
AIC: 2217.9

Number of Fisher Scoring iterations: 3

2.3.2 Comparaciones multiples

Code
# contrasts by tipo
emmeans(mod, pairwise ~ Tipo, type = "response")
$emmeans
 Tipo           prob     SE  df asymp.LCL asymp.UCL
 PC            0.516 0.0311 Inf     0.455     0.576
 PNC           0.434 0.0332 Inf     0.371     0.500
 Privado       0.475 0.0329 Inf     0.411     0.540
 Subvencionado 0.420 0.0632 Inf     0.303     0.546

Results are averaged over the levels of: Provincia, Zona, Sexo, Categoria 
Confidence level used: 0.95 
Intervals are back-transformed from the logit scale 

$contrasts
 contrast                odds.ratio    SE  df null z.ratio p.value
 PC / PNC                     1.390 0.227 Inf    1   2.018  0.1812
 PC / Privado                 1.178 0.143 Inf    1   1.354  0.5286
 PC / Subvencionado           1.472 0.385 Inf    1   1.479  0.4503
 PNC / Privado                0.848 0.138 Inf    1  -1.017  0.7395
 PNC / Subvencionado          1.059 0.293 Inf    1   0.208  0.9968
 Privado / Subvencionado      1.249 0.321 Inf    1   0.867  0.8221

Results are averaged over the levels of: Provincia, Zona, Sexo, Categoria 
P value adjustment: tukey method for comparing a family of 4 estimates 
Tests are performed on the log odds ratio scale 

2.3.3 Gráficos

Code
dat$Tipo <- factor(dat$Tipo, levels = c("PC", "Privado", "Subvencionado", "PNC"))

# raincoud plot:
fill_color <- mako(10, alpha = 0.4)[7]

ggplot(dat, aes(y = Nota, x = Tipo)) +
  # add half-violin from {ggdist} package
  ggdist::stat_halfeye(
    fill = fill_color,
    alpha = 0.5,
    # custom bandwidth
    adjust = .5,
    # adjust height
    width = .6,
    .width = 0,
    # move geom to the cright
    justification = -.2,
    point_colour = NA
  ) +
  geom_boxplot(fill = fill_color,
    width = .15,
    # remove outliers
    outlier.shape = NA # `outlier.shape = NA` works as well
  ) +
  # add justified jitter from the {gghalves} package
  gghalves::geom_half_point(
    color = fill_color,
    # draw jitter on the left
    side = "l",
    # control range of jitter
    range_scale = .4,
    # add some transparency
    alpha = .5,
  ) +
   # ylim(c(-30, 310)) +
  # geom_text(data = agg_dat, aes(y = rep(-25, 5), x = sensory_input, label = n.labels), nudge_x = -0.13, size = 6) + 
  #  scale_x_discrete(labels=c("Control" = "Noise control", "Sound vision" = "Sound & vision", "Vision" = "Vision", "Lessen input" = "Lessen input")) +
  labs(x = "Tipo de colegio", y = "Nota (%)") + theme(axis.text.x = element_text(angle = 15, hjust = 1))

Code
agg <- aggregate(Notap ~ Provincia, data = dat, mean)
agg <- agg[order(agg$Notap, decreasing = T),]


dat$Provincia <- factor(dat$Provincia, levels = agg$Provincia)


ggplot(dat, aes(y = Nota, x = Provincia)) +
  # add half-violin from {ggdist} package
  ggdist::stat_halfeye(
    fill = fill_color,
    alpha = 0.5,
    # custom bandwidth
    adjust = .5,
    # adjust height
    width = .6,
    .width = 0,
    # move geom to the cright
    justification = -.2,
    point_colour = NA
  ) +
  geom_boxplot(fill = fill_color,
    width = .15,
    # remove outliers
    outlier.shape = NA # `outlier.shape = NA` works as well
  ) +
  # add justified jitter from the {gghalves} package
  gghalves::geom_half_point(
    color = fill_color,
    # draw jitter on the left
    side = "l",
    # control range of jitter
    range_scale = .4,
    # add some transparency
    alpha = .5,
  ) +
   # ylim(c(-30, 310)) +
  # geom_text(data = agg_dat, aes(y = rep(-25, 5), x = sensory_input, label = n.labels), nudge_x = -0.13, size = 6) + 
  #  scale_x_discrete(labels=c("Control" = "Noise control", "Sound vision" = "Sound & vision", "Vision" = "Vision", "Lessen input" = "Lessen input")) +
  labs(x = "Provincia", y = "Nota (%)") + theme(axis.text.x = element_text(angle = 15, hjust = 1))

Información de la sesión

─ Session info ───────────────────────────────────────────────────────────────
 setting  value
 version  R version 4.4.2 (2024-10-31)
 os       Ubuntu 22.04.5 LTS
 system   x86_64, linux-gnu
 ui       X11
 language (EN)
 collate  en_US.UTF-8
 ctype    en_US.UTF-8
 tz       America/Costa_Rica
 date     2025-02-21
 pandoc   3.1.1 @ /usr/lib/rstudio/resources/app/bin/quarto/bin/tools/ (via rmarkdown)

─ Packages ───────────────────────────────────────────────────────────────────
 package        * version    date (UTC) lib source
 boot             1.3-30     2024-02-26 [1] CRAN (R 4.4.1)
 cachem           1.1.0      2024-05-16 [1] CRAN (R 4.4.1)
 cellranger       1.1.0      2016-07-27 [1] CRAN (R 4.4.1)
 cli              3.6.4      2025-02-13 [1] CRAN (R 4.4.2)
 coda             0.19-4.1   2024-01-31 [1] CRAN (R 4.4.1)
 codetools        0.2-20     2024-03-31 [1] CRAN (R 4.4.1)
 colorspace       2.1-1      2024-07-26 [1] CRAN (R 4.4.1)
 crayon           1.5.3      2024-06-20 [1] CRAN (R 4.4.1)
 devtools         2.4.5      2022-10-11 [1] CRAN (R 4.4.1)
 digest           0.6.37     2024-08-19 [1] CRAN (R 4.4.1)
 distributional   0.5.0      2024-09-17 [1] CRAN (R 4.4.1)
 dplyr            1.1.4      2023-11-17 [1] CRAN (R 4.4.1)
 ellipsis         0.3.2      2021-04-29 [1] CRAN (R 4.4.1)
 emmeans        * 1.10.3     2024-07-01 [1] CRAN (R 4.4.1)
 estimability     1.5.1      2024-05-12 [1] CRAN (R 4.4.1)
 evaluate         1.0.3      2025-01-10 [1] CRAN (R 4.4.2)
 farver           2.1.2      2024-05-13 [1] CRAN (R 4.4.1)
 fastmap          1.2.0      2024-05-15 [1] CRAN (R 4.4.1)
 formatR        * 1.14       2023-01-17 [1] CRAN (R 4.4.1)
 fs               1.6.5      2024-10-30 [1] CRAN (R 4.4.1)
 generics         0.1.3      2022-07-05 [1] CRAN (R 4.4.1)
 ggdist           3.3.2      2024-03-05 [1] CRAN (R 4.4.1)
 gghalves         0.1.4      2022-11-20 [1] CRAN (R 4.4.1)
 ggplot2        * 3.5.1      2024-04-23 [1] CRAN (R 4.4.1)
 glue             1.8.0      2024-09-30 [1] CRAN (R 4.4.1)
 gridExtra        2.3        2017-09-09 [1] CRAN (R 4.4.1)
 gtable           0.3.6      2024-10-25 [1] CRAN (R 4.4.1)
 htmltools        0.5.8.1    2024-04-04 [1] CRAN (R 4.4.1)
 htmlwidgets      1.6.4      2023-12-06 [1] CRAN (R 4.4.1)
 httpuv           1.6.15     2024-03-26 [1] CRAN (R 4.4.1)
 jsonlite         1.8.9      2024-09-20 [1] CRAN (R 4.4.1)
 knitr          * 1.49       2024-11-08 [1] CRAN (R 4.4.1)
 labeling         0.4.3      2023-08-29 [1] CRAN (R 4.4.1)
 later            1.3.2      2023-12-06 [1] CRAN (R 4.4.1)
 lattice          0.22-6     2024-03-20 [1] CRAN (R 4.4.1)
 lifecycle        1.0.4      2023-11-07 [1] CRAN (R 4.4.1)
 lme4           * 1.1-35.5   2024-07-03 [1] CRAN (R 4.4.1)
 lmerTest       * 3.1-3      2020-10-23 [1] CRAN (R 4.4.1)
 magrittr         2.0.3      2022-03-30 [1] CRAN (R 4.4.1)
 MASS             7.3-61     2024-06-13 [1] CRAN (R 4.4.1)
 Matrix         * 1.7-0      2024-04-26 [1] CRAN (R 4.4.1)
 memoise          2.0.1      2021-11-26 [1] CRAN (R 4.4.1)
 mime             0.12       2021-09-28 [1] CRAN (R 4.4.1)
 miniUI           0.1.1.1    2018-05-18 [1] CRAN (R 4.4.1)
 minqa            1.2.7      2024-05-20 [1] CRAN (R 4.4.1)
 multcomp         1.4-25     2023-06-20 [1] CRAN (R 4.4.1)
 munsell          0.5.1      2024-04-01 [1] CRAN (R 4.4.1)
 mvtnorm          1.3-1      2024-09-03 [1] CRAN (R 4.4.1)
 nlme             3.1-165    2024-06-06 [1] CRAN (R 4.4.1)
 nloptr           2.1.1      2024-06-25 [1] CRAN (R 4.4.1)
 numDeriv         2016.8-1.1 2019-06-06 [1] CRAN (R 4.4.1)
 packrat          0.9.2      2023-09-05 [1] CRAN (R 4.4.1)
 pillar           1.10.1     2025-01-07 [1] CRAN (R 4.4.2)
 pkgbuild         1.4.6      2025-01-16 [1] CRAN (R 4.4.2)
 pkgconfig        2.0.3      2019-09-22 [1] CRAN (R 4.4.1)
 pkgload          1.4.0      2024-06-28 [1] CRAN (R 4.4.1)
 profvis          0.3.8      2023-05-02 [1] CRAN (R 4.4.1)
 promises         1.3.0      2024-04-05 [1] CRAN (R 4.4.1)
 purrr            1.0.2      2023-08-10 [1] CRAN (R 4.4.1)
 R6               2.6.1      2025-02-15 [1] CRAN (R 4.4.2)
 Rcpp             1.0.14     2025-01-12 [1] CRAN (R 4.4.2)
 readxl         * 1.4.3      2023-07-06 [1] CRAN (R 4.4.1)
 remotes          2.5.0      2024-03-17 [1] CRAN (R 4.4.1)
 rlang            1.1.5      2025-01-17 [1] CRAN (R 4.4.2)
 rmarkdown        2.28       2024-08-17 [1] CRAN (R 4.4.1)
 rstudioapi       0.16.0     2024-03-24 [1] CRAN (R 4.4.1)
 sandwich         3.1-0      2023-12-11 [1] CRAN (R 4.4.1)
 scales           1.3.0      2023-11-28 [1] CRAN (R 4.4.1)
 sessioninfo      1.2.2      2021-12-06 [1] CRAN (R 4.4.1)
 shiny            1.9.1      2024-08-01 [1] CRAN (R 4.4.1)
 sketchy          1.0.5      2025-01-16 [1] CRANs (R 4.4.2)
 stringi          1.8.4      2024-05-06 [1] CRAN (R 4.4.1)
 stringr          1.5.1      2023-11-14 [1] CRAN (R 4.4.1)
 survival         3.7-0      2024-06-05 [1] CRAN (R 4.4.1)
 TH.data          1.1-2      2023-04-17 [1] CRAN (R 4.4.1)
 tibble           3.2.1      2023-03-20 [1] CRAN (R 4.4.1)
 tidyselect       1.2.1      2024-03-11 [1] CRAN (R 4.4.1)
 urlchecker       1.0.1      2021-11-30 [1] CRAN (R 4.4.1)
 usethis          2.2.3      2024-02-19 [1] CRAN (R 4.4.1)
 vctrs            0.6.5      2023-12-01 [1] CRAN (R 4.4.1)
 viridis        * 0.6.5      2024-01-29 [1] CRAN (R 4.4.1)
 viridisLite    * 0.4.2      2023-05-02 [1] CRAN (R 4.4.1)
 withr            3.0.2      2024-10-28 [1] CRAN (R 4.4.1)
 xaringanExtra    0.8.0      2024-05-19 [1] CRAN (R 4.4.1)
 xfun             0.50       2025-01-07 [1] CRAN (R 4.4.1)
 xtable           1.8-4      2019-04-21 [1] CRAN (R 4.4.1)
 yaml             2.3.10     2024-07-26 [1] CRAN (R 4.4.1)
 zoo              1.8-12     2023-04-13 [1] CRAN (R 4.4.1)

 [1] /home/m/R/x86_64-pc-linux-gnu-library/4.4
 [2] /usr/local/lib/R/site-library
 [3] /usr/lib/R/site-library
 [4] /usr/lib/R/library

──────────────────────────────────────────────────────────────────────────────