O Speed Dating surgiu em 1998 nos Estados Unidos. Seu criador foi o Rabino Yaacov Deyo, baseados na tradição judaica de ajudar jovens judeus solteiros a encontrarem o amor de suas vidas.
Trata-se de um modelo de encontros, onde um grupo se divide em casais temporários que têm um curto período de tempo para se conhecerem. No fim desse tempo os parceiros rotacionam. O objetivo é a formação de potenciais casais que tenham interesse em um encontro posterior.
Nossa tarefa aqui é analisar quais fatores têm maior relevancia na chance do casal ter um match.
## Parsed with column specification:
## cols(
## .default = col_double(),
## field = col_character(),
## from = col_character(),
## career = col_character(),
## attr3_s = col_logical(),
## sinc3_s = col_logical(),
## intel3_s = col_logical(),
## fun3_s = col_logical(),
## amb3_s = col_logical(),
## dec = col_character()
## )
## See spec(...) for full column specifications.
## Warning: 10220 parsing failures.
## row col expected actual file
## 1847 attr3_s 1/0/T/F/TRUE/FALSE 8.00 '/home/leal/Documentos/FPCC2/fpcc2-lab5-p2-MatheusHALeal/5-regressao/speed-dating/speed-dating2.csv'
## 1847 sinc3_s 1/0/T/F/TRUE/FALSE 10.00 '/home/leal/Documentos/FPCC2/fpcc2-lab5-p2-MatheusHALeal/5-regressao/speed-dating/speed-dating2.csv'
## 1847 intel3_s 1/0/T/F/TRUE/FALSE 9.00 '/home/leal/Documentos/FPCC2/fpcc2-lab5-p2-MatheusHALeal/5-regressao/speed-dating/speed-dating2.csv'
## 1847 fun3_s 1/0/T/F/TRUE/FALSE 10 '/home/leal/Documentos/FPCC2/fpcc2-lab5-p2-MatheusHALeal/5-regressao/speed-dating/speed-dating2.csv'
## 1847 amb3_s 1/0/T/F/TRUE/FALSE 10 '/home/leal/Documentos/FPCC2/fpcc2-lab5-p2-MatheusHALeal/5-regressao/speed-dating/speed-dating2.csv'
## .... ........ .................. ...... ....................................................................................................
## See problems(...) for more details.
EDA
dates <- dados %>%
mutate(dec = as.factor(dec),
gender = as.factor(gender),
age_gap = abs(age - age_o))Por curiosidade, vejamos qual a distribuição da diferença de idade entre os casais.
p <- dates %>%
ggplot( aes(x=age_gap)) +
geom_histogram( binwidth=3, fill="#69b3a2", color="#e9ecef", alpha=0.9) +
ggtitle("Diferença de idade") +
hrbrthemes::theme_ipsum() +
theme(
plot.title = element_text(size=15)
)
pEmbora a maior parte dos casais tenha uma diferença de idade abaixo de 5 anos, existe um volume considerável de casais entre 5 e 10 anos de diferença de idade. Iremos guardar essa informação como age_gap, a diferença em anos de idade dos casais.
Para nossa análise iremos utilizar as variáveis que indicam avaliações feitas de uma pessoa sobre outra que conheceu (attr, sinc, intel, fun, shar e like), além da correlação entre os interesses (int_corr), se ambos possuem a mesma raça (samerace) e a diferença de idade (age_gap). Nossa variável resposta é a dec, que indica se houve match ou não.
Vejamos como essas variáveis se relacionam:
dates_bin <- dates %>%
mutate(dec = ifelse(str_detect(tolower(dec), "yes"), 1, 0))
corr <- cor(dates_bin %>% select(int_corr,
samerace,
age_gap,
attr,
sinc,
intel,
fun,
shar,
like,
dec), use = "pairwise.complete.obs")
ggcorr(corr,
palette = "RdYlBu",
nbreaks = 10,
label = TRUE,
label_round = 2,
label_size = 3,
hjust = 0.75,
size = 4,
color = "black",
angle = -15) +
hrbrthemes::theme_ipsum_rc()Podemos perceber que, além da variável like, que indica que uma pessoa gostou da outra, a variável attr parece ter uma correlação positiva razoávelmente alta com dec, indicando que o match tem relação com o fato de uma pessoa achar outra atraente ou não.
Alguns fatos interessantes:
- Correlação negativa razoável entre
age_gapefun, que pode nos dizer que as pessoas não se acham divertidas quando a diferença de idade é alta. - Correlação negativa razoável entre
age_gapelike, pessoas parecem não gostar daquelas com diferença alta de idade. - Correlação positiva alta entre as variáveis (
attrefun) elike, aparentemente pessoas gostam daquelas que lhe aparentam mais atraentes e divertidas.
Modelo
Nós utilizaremos um modelo de regressão logística para prever se o casal deu match ou não, mas para isso precisamos checar o balanceamento das classes para que não interfiram em nosso modelo.
p <- dates %>%
ggplot( aes(x=dec)) +
geom_bar( fill="#69b3a2", color="#e9ecef", alpha=0.9) +
ggtitle("Match?") +
hrbrthemes::theme_ipsum() +
theme(
plot.title = element_text(size=15)
)
pEmbora pouca, existe sim uma diferença entre as classes da variável resposta, portanto, faremos um downsample para balancear as classes.
p <- balanced %>%
ggplot( aes(x=dec)) +
geom_bar( fill="#69b3a2", color="#e9ecef", alpha=0.9) +
ggtitle("Match?") +
hrbrthemes::theme_ipsum() +
theme(
plot.title = element_text(size=15)
)
pAgora com as classes balanceadas, vejamos o modelo.
modelo = glm(formula = dec ~ int_corr + samerace + age_gap + attr + sinc + intel + fun + shar + like,
data = balanced,
family = "binomial")
t_modelo <- tidy(modelo,
conf.int = TRUE,
exponentiate = TRUE)
kable(t_modelo, format = 'html') %>%
kable_styling(bootstrap_options = c('hover', 'striped'))| term | estimate | std.error | statistic | p.value | conf.low | conf.high |
|---|---|---|---|---|---|---|
| (Intercept) | 0.0039183 | 0.2889317 | -19.1813188 | 0.0000000 | 0.0022059 | 0.0068483 |
| int_corr | 0.9468934 | 0.1401057 | -0.3894827 | 0.6969191 | 0.7193766 | 1.2460932 |
| samerace | 0.9488102 | 0.0877432 | -0.5988669 | 0.5492616 | 0.7987990 | 1.1268048 |
| age_gap | 1.0176036 | 0.0162384 | 1.0746415 | 0.2825353 | 0.9857774 | 1.0505907 |
| attr | 1.5123388 | 0.0331220 | 12.4889069 | 0.0000000 | 1.4179201 | 1.6145937 |
| sinc | 0.8288149 | 0.0355000 | -5.2889706 | 0.0000001 | 0.7728233 | 0.8882652 |
| intel | 0.8332785 | 0.0409130 | -4.4579332 | 0.0000083 | 0.7687798 | 0.9025594 |
| fun | 1.1143193 | 0.0346263 | 3.1260592 | 0.0017717 | 1.0412812 | 1.1927228 |
| shar | 1.1680758 | 0.0275257 | 5.6441028 | 0.0000000 | 1.1068408 | 1.2330037 |
| like | 1.9142859 | 0.0458704 | 14.1560738 | 0.0000000 | 1.7515614 | 2.0967454 |
As variáveis attr e like são as mais significativas, com valores estimados de 1.914 (IC [1.751, 2.097] com 95% de confiança) e 1.512 (IC [1.418, 1.614] com 95% de confiança) respectivamente. As outras apresentam estimativas mais modestas, embora todas elas possuam influência razoável no provável match.
Como utilizamos um modelo de regressão logística, não temos um R², mas podemos utilizar um pseudo R²:
## fitting null model for pseudo-r2
## llh llhNull G2 McFadden r2ML
## -1645.7538368 -2378.4717643 1465.4358550 0.3080625 0.3474499
## r2CU
## 0.4633658
Avaliando o modelo com o R² de McFadden vemos que o modelo explica 30% dos nossos dados.
Concluímos que, com os dados disponíveis e o nosso modelo, quanto mais uma pessoa acha outra atraente e gostar dela, maiores as chances do match acontecer.