1. Carga y descripción del conjunto de datos En este análisis usamos el ObesityDataSet, un conjunto de datos con 2.111 personas y 17 variables relacionadas con características demográficas, hábitos de alimentación, actividad física y nivel de obesidad. El objetivo es entender qué factores se asocian con el peso (Weight) y cómo esos efectos cambian a lo largo de la distribución del peso (personas con bajo peso, peso medio y peso alto).
ObesityDataSet <- read_excel(
  "G:/Mi unidad/Academico/POSGRADO - MAIN/2DO SEMESTRE/TOMA DE DECISIONES BASADAS EN LOS DATOS/Talleres/Taller 3 - Regresion Cuantilica/ObesityData.xlsx"
)

glimpse(ObesityDataSet)
## Rows: 2,111
## Columns: 17
## $ Gender                         <chr> "Female", "Female", "Male", "Male", "Ma…
## $ Age                            <dbl> 21, 21, 23, 27, 22, 29, 23, 22, 24, 22,…
## $ Height                         <dbl> 1.62, 1.52, 1.80, 1.80, 1.78, 1.62, 1.5…
## $ Weight                         <dbl> 64.0, 56.0, 77.0, 87.0, 89.8, 53.0, 55.…
## $ family_history_with_overweight <chr> "yes", "yes", "yes", "no", "no", "no", …
## $ FAVC                           <chr> "no", "no", "no", "no", "no", "yes", "y…
## $ FCVC                           <dbl> 2, 3, 2, 3, 2, 2, 3, 2, 3, 2, 3, 2, 3, …
## $ NCP                            <dbl> 3, 3, 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, …
## $ CAEC                           <chr> "Sometimes", "Sometimes", "Sometimes", …
## $ SMOKE                          <chr> "no", "yes", "no", "no", "no", "no", "n…
## $ CH2O                           <dbl> 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 3, …
## $ SCC                            <chr> "no", "yes", "no", "no", "no", "no", "n…
## $ FAF                            <dbl> 0, 3, 2, 2, 0, 0, 1, 3, 1, 1, 2, 2, 2, …
## $ TUE                            <dbl> 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 2, 1, 0, …
## $ CALC                           <chr> "no", "Sometimes", "Frequently", "Frequ…
## $ MTRANS                         <chr> "Public_Transportation", "Public_Transp…
## $ NObeyesdad                     <chr> "Normal_Weight", "Normal_Weight", "Norm…

Las variables clave incluyen:

Weight: peso en kilogramos (variable respuesta). Age: edad en años. family_history_with_overweight: historial familiar de sobrepeso. FAVC: consumo frecuente de alimentos de alto contenido calórico. FCVC: frecuencia de consumo de verduras. NCP: número de comidas principales al día. SMOKE: consumo de cigarrillo. CH2O: cantidad de agua diaria. SCC: control de calorías. FAF: frecuencia de actividad física. TUE: tiempo de uso de dispositivos tecnológicos. Gender: género biológico. NObeyesdad: nivel de obesidad (categoría).

  1. Tipos de variables y recodificación Antes de modelar es importante revisar el tipo de cada variable para decidir cuáles deben tratarse como numéricas y cuáles como categóricas. En particular, varias variables de tipo texto contienen respuestas “yes”/“no” que podemos recodificar a 1/0 para usarlas en correlaciones y modelos.
tipo_vars <- tibble(
  variable = names(ObesityDataSet),
  clase    = sapply(ObesityDataSet, class),
  ejemplo  = sapply(ObesityDataSet, function(x) paste0(head(unique(x), 3), collapse = ", "))
)

tipo_vars
## # A tibble: 17 × 3
##    variable                       clase     ejemplo                             
##    <chr>                          <chr>     <chr>                               
##  1 Gender                         character Female, Male                        
##  2 Age                            numeric   21, 23, 27                          
##  3 Height                         numeric   1.62, 1.52, 1.8                     
##  4 Weight                         numeric   64, 56, 77                          
##  5 family_history_with_overweight character yes, no                             
##  6 FAVC                           character no, yes                             
##  7 FCVC                           numeric   2, 3, 1                             
##  8 NCP                            numeric   3, 1, 4                             
##  9 CAEC                           character Sometimes, Frequently, Always       
## 10 SMOKE                          character no, yes                             
## 11 CH2O                           numeric   2, 3, 1                             
## 12 SCC                            character no, yes                             
## 13 FAF                            numeric   0, 3, 2                             
## 14 TUE                            numeric   1, 0, 2                             
## 15 CALC                           character no, Sometimes, Frequently           
## 16 MTRANS                         character Public_Transportation, Walking, Aut…
## 17 NObeyesdad                     character Normal_Weight, Overweight_Level_I, …
ObesityDataRec <- ObesityDataSet %>%
  mutate(
    family_history_num = if_else(family_history_with_overweight %in% c("yes", "Yes", "YES"), 1, 0),
    FAVC_num           = if_else(FAVC %in% c("yes", "Yes", "YES"), 1, 0),
    SMOKE_num          = if_else(SMOKE %in% c("yes", "Yes", "YES"), 1, 0),
    SCC_num            = if_else(SCC %in% c("yes", "Yes", "YES"), 1, 0),
    Gender             = factor(Gender),
    MTRANS             = factor(MTRANS),
    NObeyesdad         = factor(NObeyesdad)
  )

Interpretación simple: Con esta recodificación logramos que variables como historial familiar de sobrepeso, consumo calórico, fumar y control de calorías se conviertan en indicadores numéricos fáciles de interpretar: 1 significa “sí” y 0 significa “no”. Además, definimos Gender, MTRANS y NObeyesdad como categorías para usarlas como factores en los modelos.

  1. Correlación entre el peso y otras variables Para tener una primera idea de qué factores se relacionan más con el peso calculamos una matriz de correlación usando solo variables numéricas relevantes.
cor_df <- ObesityDataRec %>%
  select(
    Weight,
    Age, FAF, TUE, FCVC, FAVC_num,
    NCP, CH2O,
    family_history_num, SMOKE_num, SCC_num
  ) %>%
  select(where(is.numeric))

cor_mat <- cor(cor_df, use = "pairwise.complete.obs", method = "pearson")

cor_weight <- sort(cor_mat["Weight", ], decreasing = TRUE)
cor_weight
##             Weight family_history_num           FAVC_num               FCVC 
##         1.00000000         0.49682038         0.27230049         0.21612471 
##                Age               CH2O                NCP          SMOKE_num 
##         0.20345177         0.18631587         0.10746899         0.02574641 
##                TUE                FAF            SCC_num 
##        -0.03937624        -0.04794751        -0.20190634
ggcorrplot(
  cor_mat,
  hc.order = TRUE,
  type = "lower",
  lab = TRUE,
  lab_size = 3,
  colors = c("#6D9EC1", "white", "#E46726"),
  title = "Matriz de correlación - Variables numéricas (incluye Weight)",
  ggtheme = theme_minimal()
)
## Warning: `aes_string()` was deprecated in ggplot2 3.0.0.
## ℹ Please use tidy evaluation idioms with `aes()`.
## ℹ See also `vignette("ggplot2-in-packages")` for more information.
## ℹ The deprecated feature was likely used in the ggcorrplot package.
##   Please report the issue at <https://github.com/kassambara/ggcorrplot/issues>.
## This warning is displayed once per session.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

Conclusiones de correlación:

El historial familiar de sobrepeso (family_history_num) es el factor que más se asocia con el peso (correlación ~0.50). Quienes tienen antecedentes familiares tienden a pesar considerablemente más.

El consumo frecuente de alimentos calóricos (FAVC_num) también muestra una correlación positiva notable (~0.27), reforzando la importancia de la dieta.

La edad, el consumo de verduras (FCVC) y la cantidad de agua (CH2O) tienen correlaciones positivas moderadas con el peso.

Controlar las calorías (SCC_num) se asocia negativamente con el peso (~ -0.20): las personas que vigilan sus calorías suelen pesar menos.

La actividad física (FAF) y el tiempo de pantalla (TUE) muestran correlaciones lineales bajas, lo que sugiere que sus efectos podrían ser más complejos y no solo lineales en la media; esto será explorado con regresión cuantilica.

  1. Distribución del peso y motivación para la regresión cuantilica Antes de modelar el peso, examinamos su distribución para ver si hay colas largas o asimetrías que hagan recomendable mirar más allá del promedio.
p_weight <- ggplot(ObesityDataRec, aes(x = Weight)) +
  geom_histogram(aes(y = after_stat(density)), bins = 30,
                 fill = "skyblue", color = "black") +
  geom_density(color = "red", linewidth = 1) +
  theme_minimal() +
  labs(title = "Distribución del peso (Weight)",
       x = "Weight",
       y = "Densidad")

p_weight

qqnorm(ObesityDataRec$Weight)
qqline(ObesityDataRec$Weight, col = "red", lwd = 2)

Interpretación de la distribución:

El histograma muestra una cola hacia la derecha: hay un grupo de personas con pesos claramente más altos (sobrepeso y obesidad).

El gráfico Q–Q indica desviaciones respecto a la normalidad en los extremos de la distribución.

Esto significa que el comportamiento del peso no es simétrico y que las personas en la parte alta de la distribución pueden responder de forma distinta a los factores de riesgo respecto a las personas con peso bajo o normal. Por esto, tiene sentido usar regresión cuantilica para estudiar no solo el efecto promedio, sino también qué ocurre en los cuantiles bajos, medianos y altos del peso.

  1. Conjunto de datos para modelar y fórmula del modelo Seleccionamos las variables que usaremos como explicativas y construimos una fórmula de modelo que incluya posible curvatura en la edad y una interacción entre actividad física y género.
df <- ObesityDataRec %>%
  transmute(
    Weight,
    Age,
    FAF,
    TUE,
    FCVC,
    FAVC_num,
    family_history = family_history_num,
    Gender,
    SMOKE_num,
    CH2O,
    NCP
  ) %>%
  drop_na()

glimpse(df)
## Rows: 2,111
## Columns: 11
## $ Weight         <dbl> 64.0, 56.0, 77.0, 87.0, 89.8, 53.0, 55.0, 53.0, 64.0, 6…
## $ Age            <dbl> 21, 21, 23, 27, 22, 29, 23, 22, 24, 22, 26, 21, 22, 41,…
## $ FAF            <dbl> 0, 3, 2, 2, 0, 0, 1, 3, 1, 1, 2, 2, 2, 2, 1, 2, 1, 0, 0…
## $ TUE            <dbl> 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 2, 1, 0, 1, 1, 1, 0, 0, 0…
## $ FCVC           <dbl> 2, 3, 2, 3, 2, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 3, 2, 2, 3…
## $ FAVC_num       <dbl> 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1…
## $ family_history <dbl> 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1…
## $ Gender         <fct> Female, Female, Male, Male, Male, Male, Female, Male, M…
## $ SMOKE_num      <dbl> 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1…
## $ CH2O           <dbl> 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 3, 2, 1, 2, 1, 2, 1…
## $ NCP            <dbl> 3, 3, 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 3, 1, 1, 4…
form <- Weight ~ Age + I(Age^2) +
  FAF + TUE + FCVC + FAVC_num +
  family_history + Gender + FAF:Gender +
  SMOKE_num + CH2O + NCP

Interpretación del modelo propuesto:

Age + I(Age^2): permite que el peso cambie con la edad de manera no estrictamente lineal (por ejemplo, suba rápido al inicio y luego se desacelere).

FAF y TUE: representan el balance entre actividad física y sedentarismo.

FCVC, FAVC_num, NCP, CH2O: capturan la calidad y cantidad de alimentación e hidratación.

family_history y Gender: incorporan componentes biológicos y de contexto familiar.

FAF:Gender: permite que el efecto del ejercicio sea diferente en hombres y mujeres.

SMOKE_num: controla el posible efecto del hábito de fumar.

  1. Regresión lineal clásica (OLS) como referencia Primero estimamos un modelo de regresión lineal para obtener el efecto promedio de cada variable sobre el peso.
ols <- lm(form, data = df)
summary(ols)
## 
## Call:
## lm(formula = form, data = df)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -61.101 -12.565  -0.057  10.669  79.234 
## 
## Coefficients:
##                  Estimate Std. Error t value Pr(>|t|)    
## (Intercept)    -58.525085   6.689797  -8.748  < 2e-16 ***
## Age              4.487013   0.434069  10.337  < 2e-16 ***
## I(Age^2)        -0.068803   0.007225  -9.522  < 2e-16 ***
## FAF              1.732672   0.731595   2.368    0.018 *  
## TUE              0.093264   0.695327   0.134    0.893    
## FCVC            11.313901   0.881407  12.836  < 2e-16 ***
## FAVC_num        14.198651   1.427755   9.945  < 2e-16 ***
## family_history  24.539713   1.239905  19.792  < 2e-16 ***
## GenderMale      13.260950   1.410480   9.402  < 2e-16 ***
## SMOKE_num        2.697712   3.123576   0.864    0.388    
## CH2O             3.786952   0.660337   5.735 1.12e-08 ***
## NCP              2.371133   0.577342   4.107 4.16e-05 ***
## FAF:GenderMale  -5.184838   1.017171  -5.097 3.75e-07 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 20.31 on 2098 degrees of freedom
## Multiple R-squared:  0.4019, Adjusted R-squared:  0.3985 
## F-statistic: 117.5 on 12 and 2098 DF,  p-value: < 2.2e-16
par(mfrow = c(2, 2))
plot(ols)

par(mfrow = c(1, 1))

bptest(ols)
## 
##  studentized Breusch-Pagan test
## 
## data:  ols
## BP = 476.78, df = 12, p-value < 2.2e-16

Conclusiones del modelo OLS:

El modelo alcanza un R² cercano a 0.40, es decir, explica alrededor del 40 % de la variabilidad del peso. No es perfecto, pero captura una parte importante del comportamiento.

La edad tiene un efecto significativo y curvilíneo: a edades más altas el peso tiende a ser mayor, pero el término cuadrático negativo muestra que este efecto se modera a medida que la edad crece.

Variables asociadas a hábitos de alimentación (especialmente FAVC_num y FCVC), el historial familiar (family_history) y el género masculino (GenderMale) tienen efectos positivos grandes y altamente significativos: estas características se asocian con pesos mayores, manteniendo el resto de factores constantes.

Controlar las calorías (SCC_num) ya se vio negativamente correlacionado con el peso, y otros factores como fumar (SMOKE_num) y tiempo de pantalla (TUE) no muestran efectos significativos en la media.

El término de interacción FAF:GenderMale indica que el efecto de la actividad física no es igual para hombres y mujeres.

Los gráficos de diagnóstico y la prueba de Breusch–Pagan muestran heterocedasticidad: la variabilidad de los residuos no es constante. Esto sugiere que el modelo promedio no describe bien todos los grupos de peso y refuerza la necesidad de usar regresión cuantilica.

  1. Regresión cuantilica: mirando más allá de la media La regresión cuantilica (QR) permite estimar el efecto de las covariables no solo sobre la media, sino sobre distintos cuantiles de la distribución del peso. Esto ayuda a responder preguntas como:

¿Influye igual la actividad física en personas con peso bajo que en personas con obesidad?

¿El historial familiar pesa más en los cuantiles altos (personas más pesadas)?

taus <- c(0.1, 0.25, 0.5, 0.75, 0.9)
qr_fits <- rq(form, tau = taus, data = df)
## Warning in rq.fit.br(x, y, tau = tau, ...): Solution may be nonunique
## Warning in rq.fit.br(x, y, tau = tau, ...): Solution may be nonunique
qr_sum  <- summary(qr_fits, se = "boot")
qr_sum
## 
## Call: rq(formula = form, tau = taus, data = df)
## 
## tau: [1] 0.1
## 
## Coefficients:
##                Value     Std. Error t value   Pr(>|t|) 
## (Intercept)    -39.07798  13.41403   -2.91322   0.00362
## Age              5.24238   0.89338    5.86801   0.00000
## I(Age^2)        -0.07214   0.01666   -4.33067   0.00002
## FAF             -0.87527   0.92817   -0.94300   0.34579
## TUE             -3.01158   0.95005   -3.16991   0.00155
## FCVC            -0.07201   1.10616   -0.06510   0.94810
## FAVC_num         7.44728   1.35950    5.47794   0.00000
## family_history   8.42642   1.19811    7.03310   0.00000
## GenderMale      13.44728   2.00788    6.69725   0.00000
## SMOKE_num       -0.04247   3.17835   -0.01336   0.98934
## CH2O             1.57507   0.83890    1.87755   0.06058
## NCP             -0.59743   0.57282   -1.04296   0.29709
## FAF:GenderMale  -0.12478   1.20745   -0.10334   0.91770
## 
## Call: rq(formula = form, tau = taus, data = df)
## 
## tau: [1] 0.25
## 
## Coefficients:
##                Value     Std. Error t value   Pr(>|t|) 
## (Intercept)    -45.39459  10.21720   -4.44296   0.00001
## Age              5.33401   0.68893    7.74242   0.00000
## I(Age^2)        -0.07767   0.01183   -6.56424   0.00000
## FAF             -1.17747   0.82388   -1.42919   0.15310
## TUE              0.36980   0.99976    0.36989   0.71150
## FCVC             2.74850   1.40095    1.96189   0.04991
## FAVC_num         7.81682   1.47563    5.29729   0.00000
## family_history  15.42796   1.34152   11.50035   0.00000
## GenderMale      12.70888   1.88762    6.73274   0.00000
## SMOKE_num       -3.60954   4.00408   -0.90147   0.36744
## CH2O             2.87938   0.82103    3.50705   0.00046
## NCP             -0.32183   0.75085   -0.42862   0.66824
## FAF:GenderMale  -0.27593   1.40966   -0.19574   0.84483
## 
## Call: rq(formula = form, tau = taus, data = df)
## 
## tau: [1] 0.5
## 
## Coefficients:
##                Value     Std. Error t value   Pr(>|t|) 
## (Intercept)    -84.46153   9.57789   -8.81839   0.00000
## Age              6.09005   0.70765    8.60597   0.00000
## I(Age^2)        -0.09633   0.01205   -7.99664   0.00000
## FAF             -1.67473   0.75564   -2.21629   0.02678
## TUE             -0.36380   0.69549   -0.52309   0.60097
## FCVC            11.17252   0.99406   11.23928   0.00000
## FAVC_num        15.57373   1.37017   11.36624   0.00000
## family_history  23.34312   1.17253   19.90829   0.00000
## GenderMale      14.85022   1.49693    9.92044   0.00000
## SMOKE_num        0.09082   6.38128    0.01423   0.98865
## CH2O             4.78412   0.66530    7.19093   0.00000
## NCP              3.97832   0.53071    7.49617   0.00000
## FAF:GenderMale  -2.32097   1.04490   -2.22123   0.02644
## 
## Call: rq(formula = form, tau = taus, data = df)
## 
## tau: [1] 0.75
## 
## Coefficients:
##                Value     Std. Error t value   Pr(>|t|) 
## (Intercept)    -44.79844   8.75681   -5.11584   0.00000
## Age              2.65584   0.65195    4.07370   0.00005
## I(Age^2)        -0.04537   0.01039   -4.36812   0.00001
## FAF              8.77979   3.91026    2.24532   0.02485
## TUE             -0.60890   0.77911   -0.78154   0.43457
## FCVC            12.96406   1.29595   10.00356   0.00000
## FAVC_num        16.88445   2.16459    7.80032   0.00000
## family_history  30.06268   1.17162   25.65910   0.00000
## GenderMale      19.36001   1.38093   14.01957   0.00000
## SMOKE_num       10.13368   3.47791    2.91372   0.00361
## CH2O             4.29748   0.65931    6.51815   0.00000
## NCP              6.86134   0.55663   12.32664   0.00000
## FAF:GenderMale -11.67102   4.10664   -2.84199   0.00453
## 
## Call: rq(formula = form, tau = taus, data = df)
## 
## tau: [1] 0.9
## 
## Coefficients:
##                Value     Std. Error t value   Pr(>|t|) 
## (Intercept)      6.19299  10.73542    0.57687   0.56409
## Age              0.34943   0.68662    0.50891   0.61087
## I(Age^2)        -0.00663   0.01095   -0.60543   0.54496
## FAF             15.91738   2.25783    7.04985   0.00000
## TUE              1.22208   0.85085    1.43630   0.15106
## FCVC             9.58888   1.19863    7.99988   0.00000
## FAVC_num        12.06132   3.37948    3.56899   0.00037
## family_history  33.94733   1.69428   20.03647   0.00000
## GenderMale      16.19580   1.71269    9.45638   0.00000
## SMOKE_num        7.73227   2.70160    2.86211   0.00425
## CH2O             2.35600   1.14224    2.06262   0.03927
## NCP              6.99712   1.02355    6.83610   0.00000
## FAF:GenderMale -15.73342   2.38595   -6.59418   0.00000

Lectura general de los coeficientes cuantilicos:

En todos los cuantiles, el historial familiar (family_history) y el consumo calórico (FAVC_num) mantienen efectos positivos y significativos, pero su magnitud crece cuando nos movemos hacia los cuantiles altos del peso.

La actividad física (FAF) tiene un patrón interesante: en cuantiles bajos su efecto es pequeño o incluso cercano a cero, mientras que en los cuantiles altos (0.75 y 0.9) su coeficiente se vuelve muy grande. Esto sugiere que el ejercicio marca una diferencia mucho mayor entre las personas con más peso.

Otros efectos, como el del tiempo de pantalla (TUE), resultan menos estables y en general no muestran un patrón tan fuerte a través de los cuantiles.

  1. Organización de coeficientes cuantilicos y comparación Para visualizar mejor el comportamiento de los coeficientes cuantilicos organizamos los resultados de summary.rq en un solo data frame.
qr_coefs <- purrr::map_dfr(
  seq_along(taus),
  ~ {
    tau_val  <- taus[.x]
    coef_tab <- as.data.frame(qr_sum[[.x]]$coefficients)
    coef_tab$term <- rownames(coef_tab)
    coef_tab$tau  <- tau_val
    rownames(coef_tab) <- NULL
    coef_tab
  }
)

qr_coefs <- qr_coefs %>%
  rename(
    Estimate  = Value,
    Std.Error = `Std. Error`,
    t.value   = `t value`,
    p.value   = `Pr(>|t|)`
  ) %>%
  select(tau, term, Estimate, Std.Error, t.value, p.value)

head(qr_coefs)
##   tau        term     Estimate  Std.Error     t.value      p.value
## 1 0.1 (Intercept) -39.07797949 13.4140317 -2.91321657 3.615095e-03
## 2 0.1         Age   5.24237594  0.8933827  5.86800683 5.113191e-09
## 3 0.1    I(Age^2)  -0.07213900  0.0166577 -4.33067014 1.556592e-05
## 4 0.1         FAF  -0.87526540  0.9281670 -0.94300421 3.457873e-01
## 5 0.1         TUE  -3.01158305  0.9500519 -3.16991408 1.546830e-03
## 6 0.1        FCVC  -0.07200765  1.1061639 -0.06509673 9.481032e-01
qr_coefs %>%
  filter(term %in% c("FAF", "TUE")) %>%
  arrange(term, tau)
##     tau term   Estimate Std.Error    t.value      p.value
## 1  0.10  FAF -0.8752654 0.9281670 -0.9430042 3.457873e-01
## 2  0.25  FAF -1.1774738 0.8238756 -1.4291888 1.530988e-01
## 3  0.50  FAF -1.6747263 0.7556445 -2.2162886 2.677866e-02
## 4  0.75  FAF  8.7797947 3.9102583  2.2453235 2.485113e-02
## 5  0.90  FAF 15.9173847 2.2578317  7.0498544 2.420952e-12
## 6  0.10  TUE -3.0115831 0.9500519 -3.1699141 1.546830e-03
## 7  0.25  TUE  0.3697973 0.9997586  0.3698866 7.115043e-01
## 8  0.50  TUE -0.3638034 0.6954910 -0.5230886 6.009679e-01
## 9  0.75  TUE -0.6089032 0.7791064 -0.7815405 4.345729e-01
## 10 0.90  TUE  1.2220771 0.8508480  1.4363049 1.510647e-01

Interpretación focalizada (FAF y TUE):

Para FAF, el coeficiente pasa de valores pequeños o negativos en cuantiles bajos a valores muy grandes y positivos en el cuantil 0.9. Esto indica que aumentar la actividad física tiene un impacto mucho más fuerte en los individuos con mayor peso que en los de peso bajo o mediano.

Para TUE, los coeficientes se mueven alrededor de cero y cambian de signo, con evidencia estadística débil. Esto sugiere que el tiempo de pantalla, por sí solo, no es un predictor tan potente del peso cuando controlamos por el resto de variables.

  1. Gráficos de coeficientes cuantilicos vs. cuantil Definimos una función que nos permite ver cómo cambia el coeficiente de una covariable a lo largo de los cuantiles y compararlo con el coeficiente OLS (media).
plot_coef_tau <- function(term_name) {
  df_plot <- qr_coefs %>% filter(term == term_name)
  ggplot(df_plot, aes(x = tau, y = Estimate)) +
    geom_line(color = "steelblue") +
    geom_point(size = 2, color = "steelblue") +
    geom_hline(yintercept = coef(ols)[term_name],
               linetype = "dashed", color = "red") +
    theme_minimal() +
    labs(title = paste("Coeficiente de", term_name,
                       "a lo largo de los cuantiles de Weight"),
         subtitle = "Línea roja punteada: coeficiente OLS (media)",
         x = "Cuantil (tau)",
         y = "Estimación del coeficiente")
}
plot_coef_tau("FAF")

plot_coef_tau("TUE")

plot_coef_tau("FAVC_num")

plot_coef_tau("family_history")

Conclusiones visuales clave:

En el gráfico de FAF, la línea azul se dispara hacia arriba en los cuantiles 0.75 y 0.9, mientras que el coeficiente de la media (línea roja) queda en un nivel intermedio. Esto significa que, si nos fijáramos solo en el promedio, subestimaríamos la importancia de la actividad física para las personas con más peso.

En el gráfico de family_history, la línea azul crece casi de forma lineal desde el cuantil 0.1 hasta el 0.9. Tener historial familiar de sobrepeso aumenta el peso en todos los niveles, pero el efecto es mucho más grande en los individuos más pesados, lo que sugiere vulnerabilidad acumulada.

Para FAVC_num, los coeficientes son consistentemente positivos, con valores especialmente altos en la mediana y en el cuantil 0.75. Esto indica que una dieta con mucha comida calórica está asociada con más peso en prácticamente toda la distribución.

En el caso de TUE, la línea azul oscila cerca de cero y no muestra un patrón claro. El tiempo de pantalla por sí solo no parece ser el motor principal del peso cuando consideramos otros hábitos.

  1. Resumen general y conclusiones Desde una perspectiva de analítica de datos, los resultados permiten extraer varias ideas útiles:

Factores estructurales y de estilo de vida El peso se encuentra fuertemente condicionado por:

El historial familiar de sobrepeso, que amplifica el peso en todos los cuantiles, especialmente en la parte alta de la distribución.

El consumo frecuente de alimentos calóricos (FAVC_num), que se asocia con mayor peso en todos los niveles.

La edad, el consumo de verduras, la cantidad de agua y el número de comidas también influyen, aunque con menor intensidad.

Importancia heterogénea de la actividad física La regresión cuantilica muestra que la actividad física (FAF) tiene un impacto relativamente modesto en cuantiles bajos y medios, pero se vuelve muy relevante en el cuantil 0.9, es decir, en personas con mayor peso. Esto sugiere que incrementar la frecuencia de actividad física podría tener beneficios especialmente grandes para quienes se encuentran en la parte más alta de la distribución del peso.

Más allá de la media El modelo lineal clásico ofrece una buena referencia del efecto promedio, pero:

No captura bien la variación de los efectos según el nivel de peso.

Presenta heterocedasticidad, lo que indica que la dispersión del peso cambia con las covariables. La regresión cuantilica complementa este análisis al mostrar cómo cambian los efectos en diferentes segmentos de la población, permitiendo formular recomendaciones específicas para grupos con bajo, medio o alto peso.

Implicaciones prácticas

Para personas con historial familiar de sobrepeso, podría ser prioritario trabajar el control de la dieta (reducir FAVC) y aumentar la actividad física, dado que estos factores están asociados con incrementos muy grandes en los cuantiles altos.

Las intervenciones de actividad física parecen ser especialmente efectivas cuando se dirigen a individuos con peso elevado, donde el impacto marginal de FAF es mucho mayor.

El tiempo de pantalla, aunque relevante a nivel de salud general, en este conjunto de datos no aparece como un predictor robusto del peso cuando se ajusta por otros factores.

En conjunto, la combinación de regresión lineal y regresión cuantilica permite construir una visión más completa: no solo sabemos cuánto cambia el peso “en promedio” cuando se modifica una variable, sino que también entendemos para qué grupos de la población esos cambios son más críticos. Esto alinea el análisis con la idea central de la regresión cuantilica: mirar más allá de la media para apoyar decisiones más finas y segmentadas.