Cargar librerias

library(readxl)
## Warning: package 'readxl' was built under R version 4.2.3
library(pscl)
## Warning: package 'pscl' was built under R version 4.2.3
## Classes and Methods for R originally developed in the
## Political Science Computational Laboratory
## Department of Political Science
## Stanford University (2002-2015),
## by and under the direction of Simon Jackman.
## hurdle and zeroinfl functions by Achim Zeileis.
library(car)
## Warning: package 'car' was built under R version 4.2.3
## Loading required package: carData
## Warning: package 'carData' was built under R version 4.2.3
library(nnet)
## Warning: package 'nnet' was built under R version 4.2.3
library(tidyverse)
## Warning: package 'tidyverse' was built under R version 4.2.3
## Warning: package 'ggplot2' was built under R version 4.2.3
## Warning: package 'tibble' was built under R version 4.2.3
## Warning: package 'tidyr' was built under R version 4.2.3
## Warning: package 'readr' was built under R version 4.2.3
## Warning: package 'purrr' was built under R version 4.2.3
## Warning: package 'dplyr' was built under R version 4.2.3
## Warning: package 'stringr' was built under R version 4.2.3
## Warning: package 'forcats' was built under R version 4.2.3
## Warning: package 'lubridate' was built under R version 4.2.3
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.2     ✔ readr     2.1.4
## ✔ forcats   1.0.0     ✔ stringr   1.5.0
## ✔ ggplot2   3.5.1     ✔ tibble    3.2.1
## ✔ lubridate 1.9.2     ✔ tidyr     1.3.0
## ✔ purrr     1.0.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ✖ dplyr::recode() masks car::recode()
## ✖ purrr::some()   masks car::some()
## ℹ Use the ]8;;http://conflicted.r-lib.org/conflicted package]8;; to force all conflicts to become errors
library(plotly)
## Warning: package 'plotly' was built under R version 4.2.3
## 
## Attaching package: 'plotly'
## 
## The following object is masked from 'package:ggplot2':
## 
##     last_plot
## 
## The following object is masked from 'package:stats':
## 
##     filter
## 
## The following object is masked from 'package:graphics':
## 
##     layout
library(caret)
## Warning: package 'caret' was built under R version 4.2.3
## Loading required package: lattice
## 
## Attaching package: 'caret'
## 
## The following object is masked from 'package:purrr':
## 
##     lift
library(dplyr)

Acondicionamiento de los datos

data$Tipo_apuesta <- as.factor(data$Tipo_apuesta)

data <- data %>%
  mutate(Apuesta = ifelse(Apuesta == "Si", 1, 0))
data$Edad[is.na(data$Edad)] <- mean(data$Edad, na.rm = TRUE)
data$Estrato[is.na(data$Estrato)] <- mean(data$Estrato, na.rm = TRUE)
data_long <- data %>%
  pivot_longer(cols = starts_with("Factores."), 
               names_to = "Factor", 
               values_to = "Respuesta")
data_wide <- data_long %>%
  mutate(Indicador = 1) %>%  
  pivot_wider(names_from = Respuesta, 
              values_from = Indicador, 
              values_fill = list(Indicador = 0))  
colnames(data_wide) <- make.names(colnames(data_wide)
)
data_unique <- data_wide %>%
  distinct(ID, .keep_all = TRUE)
colnames(data_unique)
##  [1] "ID"                                                                                                                         
##  [2] "Facultad"                                                                                                                   
##  [3] "Programa"                                                                                                                   
##  [4] "Edad"                                                                                                                       
##  [5] "Estrato"                                                                                                                    
##  [6] "Sexo"                                                                                                                       
##  [7] "Apuesta"                                                                                                                    
##  [8] "Frecuencia"                                                                                                                 
##  [9] "Tipo_apuesta"                                                                                                               
## [10] "Gasto"                                                                                                                      
## [11] "Ingresos"                                                                                                                   
## [12] "Factor"                                                                                                                     
## [13] "Emoción.y.adrenalina..Busco.la.emoción.y.la.adrenalina.que.proporciona.la.actividad.de.apostar."                            
## [14] "Entretenimiento..Lo.hago.como.forma.de.entretenimiento.y.diversión."                                                        
## [15] "NA."                                                                                                                        
## [16] "No.tengo.motivos.para.apostar"                                                                                              
## [17] "Ganancias.financieras..Busco.ganancias.financieras.y.la.posibilidad.de.obtener.beneficios.económicos."                      
## [18] "Conocimiento.del.deporte.o.evento..Me.motiva.el.conocimiento.que.tengo.sobre.el.deporte.o.evento.en.el.que.estoy.apostando."
## [19] "Publicidad.y.promociones..La.publicidad.y.las.promociones.de.las.casas.de.apuestas.me.impulsan.a.participar."               
## [20] "Ninguna.de.las.anteriores"                                                                                                  
## [21] "Socialización..Participar.en.apuestas.es.una.manera.de.socializar.con.amigos.o.familiares."                                 
## [22] "Influencia.de.amigos.o.familiares..La.influencia.de.amigos.o.familiares.me.motiva.a.realizar.apuestas."
data_unique <- data_unique %>%
  select(-Factor)
data_unique <- data_unique %>%
  rename(
    Emoción_y_adrenalina =Emoción.y.adrenalina..Busco.la.emoción.y.la.adrenalina.que.proporciona.la.actividad.de.apostar.,
    Entretenimiento =Entretenimiento..Lo.hago.como.forma.de.entretenimiento.y.diversión.,
    Ganancias =Ganancias.financieras..Busco.ganancias.financieras.y.la.posibilidad.de.obtener.beneficios.económicos.,
    Conocimiento_deporte =Conocimiento.del.deporte.o.evento..Me.motiva.el.conocimiento.que.tengo.sobre.el.deporte.o.evento.en.el.que.estoy.apostando.,
    Publicidad =Publicidad.y.promociones..La.publicidad.y.las.promociones.de.las.casas.de.apuestas.me.impulsan.a.participar.,
    Socialización =Socialización..Participar.en.apuestas.es.una.manera.de.socializar.con.amigos.o.familiares.,
    Influencia.amigos.familiares =Influencia.de.amigos.o.familiares..La.influencia.de.amigos.o.familiares.me.motiva.a.realizar.apuestas.,
  )
vif_model <- lm(Apuesta ~ Edad + Estrato + Facultad + Sexo, data = data_unique)
vif(vif_model)
##              GVIF Df GVIF^(1/(2*Df))
## Edad     1.072872  1        1.035795
## Estrato  1.134734  1        1.065239
## Facultad 1.226977  7        1.014718
## Sexo     1.109947  1        1.053540
data_unique$Frecuencia <- as.factor(data_unique$Frecuencia)

Ajustar los niveles de ‘Frecuencia’ con los nombres exactos y Ajustar el modelo de regresión logística multinomial

## [1] "Diaria"                                            
## [2] "Semanal"                                           
## [3] "Quincenal"                                         
## [4] "Mensual"                                           
## [5] "Raramente (lapsos de mas de un mes entre apuestas)"
## [6] "No apuesta"
## # weights:  60 (45 variable)
## initial  value 696.994434 
## iter  10 value 260.628499
## iter  20 value 248.406949
## iter  30 value 247.060093
## iter  40 value 247.044538
## final  value 247.044479 
## converged
## Warning in sqrt(diag(vc)): Se han producido NaNs
## Call:
## multinom(formula = Frecuencia ~ Emoción_y_adrenalina + Entretenimiento + 
##     Ganancias + Socialización + Influencia.amigos.familiares + 
##     Conocimiento_deporte + Publicidad + No.tengo.motivos.para.apostar, 
##     data = data_unique)
## 
## Coefficients:
##                                                    (Intercept)
## Semanal                                              0.2789467
## Quincenal                                           13.0044760
## Mensual                                             14.6530420
## Raramente (lapsos de mas de un mes entre apuestas)  32.1482367
## No apuesta                                          -6.1108101
##                                                    Emoción_y_adrenalina
## Semanal                                                        2.285576
## Quincenal                                                    -10.009170
## Mensual                                                      -13.267188
## Raramente (lapsos de mas de un mes entre apuestas)           -28.459775
## No apuesta                                                    -7.253757
##                                                    Entretenimiento  Ganancias
## Semanal                                                   42.97205   1.512933
## Quincenal                                                 29.88985 -11.212596
## Mensual                                                   28.08713 -13.554307
## Raramente (lapsos de mas de un mes entre apuestas)        11.57276 -29.705769
## No apuesta                                                -5.18355 -22.674181
##                                                    Socialización
## Semanal                                                40.562433
## Quincenal                                              28.347734
## Mensual                                               -34.161152
## Raramente (lapsos de mas de un mes entre apuestas)      7.594537
## No apuesta                                             -7.318094
##                                                    Influencia.amigos.familiares
## Semanal                                                              -24.240155
## Quincenal                                                            -25.516659
## Mensual                                                               42.165382
## Raramente (lapsos de mas de un mes entre apuestas)                    24.670164
## No apuesta                                                            -3.844212
##                                                    Conocimiento_deporte
## Semanal                                                      -44.735411
## Quincenal                                                     38.185832
## Mensual                                                       36.537271
## Raramente (lapsos de mas de un mes entre apuestas)            20.246048
## No apuesta                                                    -7.096638
##                                                    Publicidad
## Semanal                                            -12.272865
## Quincenal                                          -14.530318
## Mensual                                            -11.636598
## Raramente (lapsos de mas de un mes entre apuestas)  44.301206
## No apuesta                                          -2.067811
##                                                    No.tengo.motivos.para.apostar
## Semanal                                                                -5.805613
## Quincenal                                                             -22.150195
## Mensual                                                               -19.517499
## Raramente (lapsos de mas de un mes entre apuestas)                    -18.070940
## No apuesta                                                             49.327434
## 
## Std. Errors:
##                                                    (Intercept)
## Semanal                                              0.4371362
## Quincenal                                            0.4351461
## Mensual                                              0.4526052
## Raramente (lapsos de mas de un mes entre apuestas)   0.4400067
## No apuesta                                         398.9881606
##                                                    Emoción_y_adrenalina
## Semanal                                                       0.7514667
## Quincenal                                                     0.7424268
## Mensual                                                       0.8233224
## Raramente (lapsos de mas de un mes entre apuestas)            0.7360605
## No apuesta                                                  398.9829081
##                                                    Entretenimiento    Ganancias
## Semanal                                               2.593677e-01 6.336886e-01
## Quincenal                                             2.915348e-01 6.354437e-01
## Mensual                                               3.124085e-01 6.817212e-01
## Raramente (lapsos de mas de un mes entre apuestas)    2.581205e-01 6.215690e-01
## No apuesta                                            2.601096e-15 8.011634e-05
##                                                    Socialización
## Semanal                                             4.366464e-01
## Quincenal                                           4.186023e-01
## Mensual                                             1.297908e-24
## Raramente (lapsos de mas de un mes entre apuestas)  5.981138e-01
## No apuesta                                          1.027399e-15
##                                                    Influencia.amigos.familiares
## Semanal                                                            2.040306e-13
## Quincenal                                                                   NaN
## Mensual                                                            4.324837e-01
## Raramente (lapsos de mas de un mes entre apuestas)                 4.324837e-01
## No apuesta                                                         2.544488e-21
##                                                    Conocimiento_deporte
## Semanal                                                             NaN
## Quincenal                                                  3.836200e-01
## Mensual                                                    3.878229e-01
## Raramente (lapsos de mas de un mes entre apuestas)         3.202141e-01
## No apuesta                                                 4.106141e-20
##                                                      Publicidad
## Semanal                                                     NaN
## Quincenal                                                   NaN
## Mensual                                            1.259343e-29
## Raramente (lapsos de mas de un mes entre apuestas) 1.028598e-28
## No apuesta                                         8.963211e-29
##                                                    No.tengo.motivos.para.apostar
## Semanal                                                             1.594640e-11
## Quincenal                                                           4.972247e-13
## Mensual                                                             3.071706e-11
## Raramente (lapsos de mas de un mes entre apuestas)                  5.172319e-03
## No apuesta                                                          5.172323e-03
## 
## Residual Deviance: 494.089 
## AIC: 574.089

Calcular la suma de cada motivación para cada frecuencia

data_resumen <- data_unique %>%
  group_by(Frecuencia) %>%
  summarise(
    Emoción_y_adrenalina = mean(Emoción_y_adrenalina, na.rm = TRUE),
    Entretenimiento = mean(Entretenimiento, na.rm = TRUE),
    Ganancias = mean(Ganancias, na.rm = TRUE),
    Socialización = mean(Socialización, na.rm = TRUE),
    Influencia.amigos.familiares = mean(Influencia.amigos.familiares, na.rm = TRUE),
    Conocimiento_deporte = mean(Conocimiento_deporte, na.rm = TRUE),
    Publicidad = mean(Publicidad, na.rm = TRUE),
    No.tengo.motivos.para.apostar = mean(No.tengo.motivos.para.apostar, na.rm = TRUE),
    .groups = 'drop'
  )

Transformar los datos para el gráfico

data_grafico <- pivot_longer(data_resumen, 
                             cols = -Frecuencia, 
                             names_to = "Motivacion", 
                             values_to = "Proporcion")

Graficar

plot2<-ggplot(data_grafico, aes(x = Frecuencia, y = Proporcion, fill = Motivacion)) +
  geom_bar(stat = "identity", position = position_dodge()) +
  labs(title = "Proporción de Motivaciones para Apostar según Frecuencia de Apuestas",
       x = "Frecuencia de Apuestas",
       y = "Proporción") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))
ggplotly(plot2)

Validación del modelo multinomial

train_control <- trainControl(method = "cv", number = 10)  # 10-fold cross-validation
modelo_multinom_cv <- train(Frecuencia ~ Emoción_y_adrenalina + Entretenimiento + 
                              Ganancias + Socialización + 
                              Influencia.amigos.familiares + 
                              Conocimiento_deporte + 
                              Publicidad +
                              No.tengo.motivos.para.apostar,
                            data = data_unique,
                            method = "multinom",
                            trControl = train_control)
## # weights:  60 (45 variable)
## initial  value 627.115814 
## iter  10 value 229.656312
## iter  20 value 218.854205
## iter  30 value 217.645257
## iter  40 value 217.634740
## final  value 217.634726 
## converged
## # weights:  60 (45 variable)
## initial  value 627.115814 
## iter  10 value 240.352934
## iter  20 value 233.867354
## iter  30 value 233.269536
## final  value 233.269144 
## converged
## # weights:  60 (45 variable)
## initial  value 627.115814 
## iter  10 value 229.668810
## iter  20 value 218.892845
## iter  30 value 217.769945
## iter  40 value 217.745609
## iter  50 value 217.728199
## iter  60 value 217.725507
## iter  60 value 217.725506
## iter  60 value 217.725506
## final  value 217.725506 
## converged
## # weights:  60 (45 variable)
## initial  value 628.907574 
## iter  10 value 237.167298
## iter  20 value 223.677696
## iter  30 value 222.565693
## iter  40 value 222.550196
## final  value 222.550157 
## converged
## # weights:  60 (45 variable)
## initial  value 628.907574 
## iter  10 value 247.315937
## iter  20 value 237.677210
## iter  30 value 237.110175
## final  value 237.109610 
## converged
## # weights:  60 (45 variable)
## initial  value 628.907574 
## iter  10 value 237.179023
## iter  20 value 223.710106
## iter  30 value 222.686058
## iter  40 value 222.650581
## iter  50 value 222.640521
## iter  60 value 222.635868
## final  value 222.635163 
## converged
## # weights:  60 (45 variable)
## initial  value 627.115814 
## iter  10 value 236.515818
## iter  20 value 224.223989
## iter  30 value 222.711106
## iter  40 value 222.702133
## final  value 222.702109 
## converged
## # weights:  60 (45 variable)
## initial  value 627.115814 
## iter  10 value 246.406286
## iter  20 value 237.571141
## iter  30 value 237.174726
## final  value 237.174632 
## converged
## # weights:  60 (45 variable)
## initial  value 627.115814 
## iter  10 value 236.527245
## iter  20 value 224.252968
## iter  30 value 222.836684
## iter  40 value 222.803338
## iter  50 value 222.792386
## iter  60 value 222.787854
## final  value 222.786659 
## converged
## # weights:  60 (45 variable)
## initial  value 627.115814 
## iter  10 value 234.015022
## iter  20 value 223.635993
## iter  30 value 222.728232
## iter  40 value 222.722212
## final  value 222.722198 
## converged
## # weights:  60 (45 variable)
## initial  value 627.115814 
## iter  10 value 244.039185
## iter  20 value 237.727256
## iter  30 value 237.109231
## final  value 237.108972 
## converged
## # weights:  60 (45 variable)
## initial  value 627.115814 
## iter  10 value 234.026599
## iter  20 value 223.672314
## iter  30 value 222.857767
## iter  40 value 222.822607
## iter  50 value 222.809015
## iter  60 value 222.806673
## final  value 222.806603 
## converged
## # weights:  60 (45 variable)
## initial  value 630.699333 
## iter  10 value 235.856352
## iter  20 value 225.580121
## iter  30 value 223.687044
## iter  40 value 223.672082
## final  value 223.672029 
## converged
## # weights:  60 (45 variable)
## initial  value 630.699333 
## iter  10 value 246.223362
## iter  20 value 239.140951
## iter  30 value 238.278934
## final  value 238.278673 
## converged
## # weights:  60 (45 variable)
## initial  value 630.699333 
## iter  10 value 235.868442
## iter  20 value 225.612482
## iter  30 value 223.803763
## iter  40 value 223.774420
## iter  50 value 223.760771
## iter  60 value 223.757978
## final  value 223.757303 
## converged
## # weights:  60 (45 variable)
## initial  value 628.907574 
## iter  10 value 233.540803
## iter  20 value 223.780216
## iter  30 value 222.724706
## iter  40 value 222.716407
## final  value 222.716383 
## converged
## # weights:  60 (45 variable)
## initial  value 628.907574 
## iter  10 value 244.039244
## iter  20 value 237.997398
## iter  30 value 237.342830
## final  value 237.342673 
## converged
## # weights:  60 (45 variable)
## initial  value 628.907574 
## iter  10 value 233.552997
## iter  20 value 223.815225
## iter  30 value 222.859520
## iter  40 value 222.820399
## iter  50 value 222.805299
## iter  60 value 222.802893
## final  value 222.802036 
## converged
## # weights:  60 (45 variable)
## initial  value 623.532295 
## iter  10 value 226.366985
## iter  20 value 216.549234
## iter  30 value 215.182828
## iter  40 value 215.176245
## final  value 215.176225 
## converged
## # weights:  60 (45 variable)
## initial  value 623.532295 
## iter  10 value 237.559863
## iter  20 value 230.922484
## iter  30 value 230.293952
## final  value 230.293848 
## converged
## # weights:  60 (45 variable)
## initial  value 623.532295 
## iter  10 value 226.380132
## iter  20 value 216.582513
## iter  30 value 215.307147
## iter  40 value 215.279357
## iter  50 value 215.271876
## iter  60 value 215.264644
## final  value 215.262526 
## converged
## # weights:  60 (45 variable)
## initial  value 625.324055 
## iter  10 value 232.315239
## iter  20 value 222.425505
## iter  30 value 220.879292
## iter  40 value 220.871138
## final  value 220.871122 
## converged
## # weights:  60 (45 variable)
## initial  value 625.324055 
## iter  10 value 242.369199
## iter  20 value 235.842841
## iter  30 value 235.106758
## final  value 235.106625 
## converged
## # weights:  60 (45 variable)
## initial  value 625.324055 
## iter  10 value 232.326866
## iter  20 value 222.454084
## iter  30 value 220.990523
## iter  40 value 220.967566
## iter  50 value 220.963589
## iter  60 value 220.955616
## final  value 220.953474 
## converged
## # weights:  60 (45 variable)
## initial  value 630.699333 
## iter  10 value 238.441490
## iter  20 value 226.661690
## iter  30 value 225.020200
## iter  40 value 225.009687
## final  value 225.009658 
## converged
## # weights:  60 (45 variable)
## initial  value 630.699333 
## iter  10 value 248.456182
## iter  20 value 240.696610
## iter  30 value 239.825299
## final  value 239.825109 
## converged
## # weights:  60 (45 variable)
## initial  value 630.699333 
## iter  10 value 238.453072
## iter  20 value 226.699215
## iter  30 value 225.146159
## iter  40 value 225.116732
## iter  50 value 225.100235
## iter  60 value 225.096717
## iter  70 value 225.095441
## final  value 225.095416 
## converged
## # weights:  60 (45 variable)
## initial  value 623.532295 
## iter  10 value 234.515606
## iter  20 value 223.844689
## iter  30 value 222.465952
## iter  40 value 222.448329
## final  value 222.448275 
## converged
## # weights:  60 (45 variable)
## initial  value 623.532295 
## iter  10 value 244.338087
## iter  20 value 237.284971
## iter  30 value 236.721114
## final  value 236.721036 
## converged
## # weights:  60 (45 variable)
## initial  value 623.532295 
## iter  10 value 234.526989
## iter  20 value 223.873788
## iter  30 value 222.580218
## iter  40 value 222.548450
## iter  50 value 222.541332
## iter  60 value 222.534275
## final  value 222.532569 
## converged
## # weights:  60 (45 variable)
## initial  value 696.994434 
## iter  10 value 271.302483
## iter  20 value 263.270526
## iter  30 value 262.116617
## final  value 262.115809 
## converged
# Ver el resumen del modelo
print(modelo_multinom_cv)
## Penalized Multinomial Regression 
## 
## 389 samples
##   8 predictor
##   6 classes: 'Diaria', 'Semanal', 'Quincenal', 'Mensual', 'Raramente (lapsos de mas de un mes entre apuestas)', 'No apuesta' 
## 
## No pre-processing
## Resampling: Cross-Validated (10 fold) 
## Summary of sample sizes: 350, 351, 350, 350, 352, 351, ... 
## Resampling results across tuning parameters:
## 
##   decay  Accuracy   Kappa    
##   0e+00  0.7204837  0.5699707
##   1e-04  0.7253617  0.5772784
##   1e-01  0.7253617  0.5772784
## 
## Accuracy was used to select the optimal model using the largest value.
## The final value used for the model was decay = 0.1.

Modelo de Regresión Logístico

Seleccionar solo las columnas relevantes para el modelo

data_modelo <- data %>%
  select(Apuesta, Edad, Estrato, Sexo)

Ajustar el modelo de regresión logística

modelo_logistico <- glm(Apuesta ~ Edad + Estrato + Sexo,
                        data = data_modelo,
                        family = binomial())

Resumen del modelo

summary(modelo_logistico)
## 
## Call:
## glm(formula = Apuesta ~ Edad + Estrato + Sexo, family = binomial(), 
##     data = data_modelo)
## 
## Deviance Residuals: 
##     Min       1Q   Median       3Q      Max  
## -1.8878  -1.1603   0.6894   1.0768   1.8517  
## 
## Coefficients:
##             Estimate Std. Error z value Pr(>|z|)    
## (Intercept)  4.24798    1.02359   4.150 3.32e-05 ***
## Edad        -0.14089    0.04509  -3.125  0.00178 ** 
## Estrato     -0.25538    0.09938  -2.570  0.01018 *  
## SexoMujer   -1.22007    0.24476  -4.985 6.20e-07 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 538.13  on 388  degrees of freedom
## Residual deviance: 496.66  on 385  degrees of freedom
## AIC: 504.66
## 
## Number of Fisher Scoring iterations: 4

Calcular las probabilidades predichas usando el modelo logístico

data_modelo$Probabilidad <- predict(modelo_logistico, newdata = data_modelo, type = "response")

Crear una curva de datos para diferentes combinaciones de Edad, Sexo y Estrato

data_curve <- expand.grid(
  Edad = seq(min(data_modelo$Edad, na.rm = TRUE), max(data_modelo$Edad, na.rm = TRUE), length.out = 100),
  Sexo = unique(data_modelo$Sexo),
  Estrato = unique(data_modelo$Estrato)
)

Calcular las probabilidades predichas para la curva de datos

data_curve$Probabilidad <- predict(modelo_logistico, newdata = data_curve, type = "response")

Graficar los resultados

Plot1<-ggplot() +
  geom_col(data = data_modelo, aes(x = Edad, y = Probabilidad, fill = Sexo), position = "dodge", alpha = 0.5) +  
  geom_line(data = data_curve, aes(x = Edad, y = Probabilidad, group = interaction(Sexo, Estrato), color = factor(Estrato)), linetype = "solid", linewidth = 0.8) +  # Curva de regresión 
  labs(title = "Probabilidad de Apostar según Edad, Sexo y Estrato",
       x = "Edad",
       y = "Probabilidad de Apostar",
       fill = "Sexo",
       color = "Estrato") +
  scale_fill_manual(values = c("lightblue", "pink")) +  # Ajustar los colores para Sexo
  scale_color_manual(values = c("darkblue", "darkred", "green", "orange", "purple", "yellow", "black")) +  
  theme_minimal() +
  theme(legend.position = "bottom")
ggplotly(Plot1)

Convertir la variable ‘Apuesta’ en un factor con dos niveles

data_modelo$Apuesta <- as.factor(data_modelo$Apuesta)

Verificar los niveles de la variable ‘Apuesta’

levels(data_modelo$Apuesta)
## [1] "0" "1"

Ajustar el modelo usando validación cruzada

modelo_logistico_cv <- train(Apuesta ~ Edad + Estrato + Sexo,
                             data = data_modelo,
                             method = "glm",
                             family = "binomial",
                             trControl = train_control)

Resumen del modelo con validación cruzada

print(modelo_logistico_cv)
## Generalized Linear Model 
## 
## 389 samples
##   3 predictor
##   2 classes: '0', '1' 
## 
## No pre-processing
## Resampling: Cross-Validated (10 fold) 
## Summary of sample sizes: 350, 350, 351, 350, 350, 350, ... 
## Resampling results:
## 
##   Accuracy   Kappa    
##   0.6017746  0.1934052