contract_1st_pvt$trial_math_dfn = as.numeric(contract_1st_pvt$math_fecha_inicio-contract_1st_pvt$trial_math_end) #dfn:days from now
contract_1st_pvt$trial_math_rec = ifelse(is.na(contract_1st_pvt$trial_math_dfn),'no_mathtrial',ifelse(contract_1st_pvt$trial_math_dfn %in% 0:14 & !is.na(contract_1st_pvt$trial_math_dfn),'recent','returned'))
contract_1st_pvt$trial_reading_dfn = as.numeric(contract_1st_pvt$reading_fecha_inicio-contract_1st_pvt$trial_reading_end)
contract_1st_pvt$trial_reading_rec = ifelse(is.na(contract_1st_pvt$trial_reading_dfn),'no_readingtrial',ifelse(contract_1st_pvt$trial_reading_dfn %in% 0:14 & !is.na(contract_1st_pvt$trial_math_dfn),'recent','no_readingtrialatall'))
contract_1st_pvt$rep_regist = factor(ifelse(contract_1st_pvt$account_id>1,1,0))
ses$period = factor(ifelse(ses$cohort %in% c('09-29~10-19','12-20~01-09'),'before','after'),levels=c('before','after'))
contract_1st_pvt_focal = contract_1st_pvt[contract_1st_pvt$academic_year=='2021-2022' & contract_1st_pvt$cohort!='other',]
table(contract_1st_pvt_focal$cohort)
##
## 09-29~10-19 10-20~11-09 12-20~01-09 01-10~02-04 other
## 341 275 252 364 0
summary(as.numeric(contract_1st_pvt_focal$reading_fecha_inicio - contract_1st_pvt_focal$math_fecha_inicio)) #Exclude individuals who subscribed reading program before/ within 200 days after they subscribed to the math program, to control main interest in the math program
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## -7.00 0.00 0.00 12.12 0.00 378.00 911
table(is.na(contract_1st_pvt_focal$trial_reading_end))
##
## FALSE TRUE
## 613 619
sum(as.numeric(contract_1st_pvt_focal$trial_reading_end - contract_1st_pvt_focal$math_fecha_inicio)>=0,na.rm=T)
## [1] 168
summary(as.numeric(contract_1st_pvt_focal$trial_reading_end - contract_1st_pvt_focal$math_fecha_inicio))
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## -466.000 -5.000 -1.000 -8.467 0.000 379.000 619
ses_focal = ses[ses$academic_year=='2021-2022',]
table(ses_focal$program)
##
## COMP_LECTORA MATEMATICAS
## 35080 162721
table(trial=ses_focal$day_contract<0,program=ses_focal$program)
## program
## trial COMP_LECTORA MATEMATICAS
## FALSE 32306 155000
## TRUE 2774 7721
table(is.na(contract_1st_pvt_focal$reading_tarifa))
##
## FALSE TRUE
## 321 911
contract_1st_pvt_focal = contract_1st_pvt[contract_1st_pvt$academic_year=='2021-2022' & contract_1st_pvt$cohort!='other',]
contract_1st_pvt_focal = contract_1st_pvt_focal[is.na(contract_1st_pvt_focal$reading_tarifa),]
#contract_1st_pvt_focal = subset(contract_1st_pvt_focal,is.na(reading_fecha_inicio)| reading_fecha_inicio- math_fecha_inicio>=200)
#contract_1st_pvt_focal = contract_1st_pvt_focal[!is.na(contract_1st_pvt_focal$math_importe),]
alumno_ids = contract_1st_pvt_focal$alumno
ses_focal = ses[ses$alumno %in% alumno_ids,]
ses_focal_reading = ses_focal[ses_focal$program=='COMP_LECTORA'&!is.na(ses_focal$program),]
ses_focal = ses_focal[ses_focal$program!='COMP_LECTORA'|is.na(ses_focal$program),]
summary(ses_focal)
## fecha id_sesion estado tipo
## Min. :2019-12-25 Min. :42582542 Length:217109 Length:217109
## 1st Qu.:2022-01-22 1st Qu.:83473141 Class :character Class :character
## Median :2022-04-04 Median :86206246 Mode :character Mode :character
## Mean :2022-04-07 Mean :86160683
## 3rd Qu.:2022-06-29 3rd Qu.:89127145
## Max. :2022-10-17 Max. :92816186
##
## efectividad tmr mundo_virtual orden
## Min. :0.00 Min. :0.00 Min. :0.0000 Min. : 1.0
## 1st Qu.:0.72 1st Qu.:0.92 1st Qu.:0.0000 1st Qu.: 37.0
## Median :0.83 Median :1.18 Median :0.0000 Median : 84.0
## Mean :0.78 Mean :1.28 Mean :0.3818 Mean :100.5
## 3rd Qu.:0.91 3rd Qu.:1.52 3rd Qu.:1.0000 3rd Qu.:149.0
## Max. :1.00 Max. :8.50 Max. :1.0000 Max. :381.0
## NA's :91910 NA's :100900 NA's :97858
## orden_program pregunta_inicio pregunta_fin alumno
## Min. : 1.0 Min. :0.00 Min. :0.00 Min. :1078054
## 1st Qu.: 37.0 1st Qu.:4.00 1st Qu.:4.00 1st Qu.:4150327
## Median : 83.0 Median :5.00 Median :5.00 Median :4204327
## Mean :100.3 Mean :4.13 Mean :3.87 Mean :4072991
## 3rd Qu.:149.0 3rd Qu.:5.00 3rd Qu.:5.00 3rd Qu.:4290120
## Max. :381.0 Max. :5.00 Max. :5.00 Max. :4337022
## NA's :97858 NA's :216682 NA's :216647
## calificacion velocidad correccion num_problemas
## Length:217109 Length:217109 Min. :0.0000 Min. : 0.00
## Class :character Class :character 1st Qu.:0.0000 1st Qu.: 0.00
## Mode :character Mode :character Median :0.0000 Median : 18.00
## Mean :0.3747 Mean : 21.72
## 3rd Qu.:1.0000 3rd Qu.: 39.00
## Max. :1.0000 Max. :225.00
##
## program use days min_fecha
## Length:217109 Min. :0.0000 Min. : 1.0 Min. :2019-12-25
## Class :character 1st Qu.:0.0000 1st Qu.: 62.0 1st Qu.:2021-09-28
## Mode :character Median :1.0000 Median :132.0 Median :2021-10-20
## Mean :0.5557 Mean :144.2 Mean :2021-09-27
## 3rd Qu.:1.0000 3rd Qu.:218.0 3rd Qu.:2021-12-26
## Max. :1.0000 Max. :404.0 Max. :2022-02-09
##
## num_kid_con math reading reading_index
## Min. :1.000 Min. : 1.000 Min. :0.00000 Min. : NA
## 1st Qu.:1.000 1st Qu.: 1.000 1st Qu.:0.00000 1st Qu.: NA
## Median :1.000 Median : 2.000 Median :0.00000 Median : NA
## Mean :1.566 Mean : 3.423 Mean :0.01701 Mean :NaN
## 3rd Qu.:2.000 3rd Qu.: 4.000 3rd Qu.:0.00000 3rd Qu.: NA
## Max. :3.000 Max. :14.000 Max. :3.00000 Max. : NA
## NA's :217109
## math_fecha_creacion math_fecha_inicio math_fecha_fin math_tarifa
## Min. :2021-09-23 Min. :2021-09-29 Min. :2021-10-28 101:55448
## 1st Qu.:2021-10-15 1st Qu.:2021-10-16 1st Qu.:2022-01-11 102:76678
## Median :2021-11-04 Median :2021-11-04 Median :2022-03-21 103:84983
## Mean :2021-11-23 Mean :2021-11-24 Mean :2022-05-23
## 3rd Qu.:2022-01-09 3rd Qu.:2022-01-09 3rd Qu.:2022-11-01
## Max. :2022-05-06 Max. :2022-01-30 Max. :2023-03-13
##
## math_importe math_importe_sin_dto reading_fecha_creacion
## Min. : 0.0 Min. : 29.5 Min. :NA
## 1st Qu.: 44.0 1st Qu.: 44.0 1st Qu.:NA
## Median :108.0 Median :108.0 Median :NA
## Mean :150.8 Mean :172.1 Mean :NaN
## 3rd Qu.:256.5 3rd Qu.:306.0 3rd Qu.:NA
## Max. :348.0 Max. :348.0 Max. :NA
## NA's :217109
## reading_fecha_inicio reading_fecha_fin reading_tarifa reading_importe
## Min. :NA Min. :NA 101 : 0 Min. : NA
## 1st Qu.:NA 1st Qu.:NA 102 : 0 1st Qu.: NA
## Median :NA Median :NA 103 : 0 Median : NA
## Mean :NaN Mean :NaN NA's:217109 Mean :NaN
## 3rd Qu.:NA 3rd Qu.:NA 3rd Qu.: NA
## Max. :NA Max. :NA Max. : NA
## NA's :217109 NA's :217109 NA's :217109
## reading_importe_sin_dto tutor_principal kid_id
## Min. : NA Min. : 197347 Length:217109
## 1st Qu.: NA 1st Qu.:1647364 Class :character
## Median : NA Median :2288804 Mode :character
## Mean :NaN Mean :1954608
## 3rd Qu.: NA 3rd Qu.:2347097
## Max. : NA Max. :2373927
## NA's :217109
## trial_math_end trial_reading_end math_trial_unique
## Min. :2017-02-18 Min. :2020-09-29 Min. :0.000
## 1st Qu.:2021-10-03 1st Qu.:2021-10-10 1st Qu.:1.000
## Median :2021-10-26 Median :2021-11-07 Median :1.000
## Mean :2021-09-25 Mean :2021-11-26 Mean :1.085
## 3rd Qu.:2022-01-01 3rd Qu.:2022-01-21 3rd Qu.:1.000
## Max. :2022-05-09 Max. :2022-10-21 Max. :4.000
## NA's :874 NA's :139177
## reading_trial_unique account_id num_uniq_kid num_asso_kid
## Min. :0.0000 Min. :1.000 Min. :1.0 Min. :1.000
## 1st Qu.:0.0000 1st Qu.:1.000 1st Qu.:1.0 1st Qu.:1.000
## Median :0.0000 Median :1.000 Median :2.0 Median :2.000
## Mean :0.3814 Mean :1.148 Mean :1.6 Mean :1.867
## 3rd Qu.:1.0000 3rd Qu.:1.000 3rd Qu.:2.0 3rd Qu.:2.000
## Max. :2.0000 Max. :5.000 Max. :3.0 Max. :6.000
##
## genero fecha_nacimiento SOURCE age_sub
## Length:217109 Min. :1997-01-10 Length:217109 Min. : 2.000
## Class :character 1st Qu.:2012-05-17 Class :character 1st Qu.: 6.000
## Mode :character Median :2014-01-15 Mode :character Median : 7.000
## Mean :2013-11-30 Mean : 7.479
## 3rd Qu.:2015-07-31 3rd Qu.: 9.000
## Max. :2019-05-29 Max. :25.000
##
## age_trial ad age_syn_ind age_syn
## Min. : 2.000 0:181148 Min. :0.00000 Min. : 4.000
## 1st Qu.: 6.000 1: 35961 1st Qu.:0.00000 1st Qu.: 6.000
## Median : 7.000 Median :0.00000 Median : 7.000
## Mean : 7.323 Mean :0.03701 Mean : 7.566
## 3rd Qu.: 9.000 3rd Qu.:0.00000 3rd Qu.: 9.000
## Max. :25.000 Max. :1.00000 Max. :14.000
## NA's :874
## age_cut cohort change academic_year
## (3,6] : 72525 09-29~10-19:64054 Length:217109 Length:217109
## (6,9] :102059 10-20~11-09:58611 Class :character Class :character
## (9,12] : 38963 12-20~01-09:40181 Mode :character Mode :character
## (12,14]: 3562 01-10~02-04:54263
## other : 0
##
##
## day_contract month_contract period
## Min. :-755.0 1 :27159 before:104235
## 1st Qu.: 53.0 2 :25624 after :112874
## Median : 124.0 3 :24522
## Mean : 133.8 4 :21267
## 3rd Qu.: 211.0 5 :20138
## Max. : 383.0 6 :19142
## (Other):79257
ses_focal.gp = ses_focal %>% mutate_at(c('efectividad','tmr','correccion','num_problemas','mundo_virtual'),~replace_na(.,0)) %>%group_by(change,period,alumno,math_tarifa,month_contract) %>% summarise(nses=n(),dayrange=diff(range(day_contract)),usagerate=mean(estado=='REALIZADA'),correctionrate=mean(correccion),gamerate=mean(mundo_virtual==1),med.efec=median(efectividad),avg.efec=mean(efectividad),IQR.efec = IQR(efectividad),med.tmr= median(tmr),avg.tmr= mean(tmr),IQR.tmr = IQR(tmr),avg.problem=mean(num_problemas))
summary(ses_focal.gp$nses[ses_focal.gp$month_contract!=-1 & ses_focal.gp$nses<28])
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1.000 2.000 6.000 9.628 17.000 27.000
ses_focal.gp = ses_focal.gp[ses_focal.gp$month_contract==-1 | ses_focal.gp$nses>= 8,]
rcorr(as.matrix(ses_focal.gp[ses_focal.gp$month_contract!=99,6:ncol(ses_focal.gp)]))
## nses dayrange usagerate correctionrate gamerate med.efec
## nses 1.00 0.21 -0.14 -0.17 -0.10 -0.11
## dayrange 0.21 1.00 -0.06 -0.06 -0.04 -0.05
## usagerate -0.14 -0.06 1.00 0.78 0.75 0.90
## correctionrate -0.17 -0.06 0.78 1.00 0.70 0.73
## gamerate -0.10 -0.04 0.75 0.70 1.00 0.70
## med.efec -0.11 -0.05 0.90 0.73 0.70 1.00
## avg.efec -0.13 -0.05 0.98 0.80 0.77 0.91
## IQR.efec 0.06 0.05 0.06 0.00 0.03 0.05
## med.tmr -0.21 -0.06 0.82 0.67 0.61 0.88
## avg.tmr -0.25 -0.06 0.84 0.69 0.62 0.76
## IQR.tmr -0.04 0.03 0.26 0.14 0.15 0.23
## avg.problem -0.10 -0.05 0.87 0.66 0.67 0.77
## avg.efec IQR.efec med.tmr avg.tmr IQR.tmr avg.problem
## nses -0.13 0.06 -0.21 -0.25 -0.04 -0.10
## dayrange -0.05 0.05 -0.06 -0.06 0.03 -0.05
## usagerate 0.98 0.06 0.82 0.84 0.26 0.87
## correctionrate 0.80 0.00 0.67 0.69 0.14 0.66
## gamerate 0.77 0.03 0.61 0.62 0.15 0.67
## med.efec 0.91 0.05 0.88 0.76 0.23 0.77
## avg.efec 1.00 0.07 0.82 0.84 0.25 0.85
## IQR.efec 0.07 1.00 0.02 0.10 0.81 0.02
## med.tmr 0.82 0.02 1.00 0.90 0.31 0.57
## avg.tmr 0.84 0.10 0.90 1.00 0.43 0.54
## IQR.tmr 0.25 0.81 0.31 0.43 1.00 0.07
## avg.problem 0.85 0.02 0.57 0.54 0.07 1.00
##
## n= 7953
##
##
## P
## nses dayrange usagerate correctionrate gamerate med.efec
## nses 0.0000 0.0000 0.0000 0.0000 0.0000
## dayrange 0.0000 0.0000 0.0000 0.0017 0.0000
## usagerate 0.0000 0.0000 0.0000 0.0000 0.0000
## correctionrate 0.0000 0.0000 0.0000 0.0000 0.0000
## gamerate 0.0000 0.0017 0.0000 0.0000 0.0000
## med.efec 0.0000 0.0000 0.0000 0.0000 0.0000
## avg.efec 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
## IQR.efec 0.0000 0.0000 0.0000 0.7652 0.0052 0.0000
## med.tmr 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
## avg.tmr 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
## IQR.tmr 0.0008 0.0019 0.0000 0.0000 0.0000 0.0000
## avg.problem 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
## avg.efec IQR.efec med.tmr avg.tmr IQR.tmr avg.problem
## nses 0.0000 0.0000 0.0000 0.0000 0.0008 0.0000
## dayrange 0.0000 0.0000 0.0000 0.0000 0.0019 0.0000
## usagerate 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
## correctionrate 0.0000 0.7652 0.0000 0.0000 0.0000 0.0000
## gamerate 0.0000 0.0052 0.0000 0.0000 0.0000 0.0000
## med.efec 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
## avg.efec 0.0000 0.0000 0.0000 0.0000 0.0000
## IQR.efec 0.0000 0.1056 0.0000 0.0000 0.1051
## med.tmr 0.0000 0.1056 0.0000 0.0000 0.0000
## avg.tmr 0.0000 0.0000 0.0000 0.0000 0.0000
## IQR.tmr 0.0000 0.0000 0.0000 0.0000 0.0000
## avg.problem 0.0000 0.1051 0.0000 0.0000 0.0000
chart.Correlation(as.matrix(ses_focal.gp[ses_focal.gp$month_contract!=99,6:ncol(ses_focal.gp)]),histogram = T,pch=19)
ses_focal.gp.pvt = ses_focal.gp %>% group_by(change,period,mon=month_contract) %>% mutate(nusers=n()) %>% group_by(change,period) %>% mutate(ini_users=max(nusers,na.rm=T),retention=nusers/ini_users) %>% group_by(change,period,mon,ini_users,nusers,retention) %>% summarise(avg.usage = mean(usagerate),Q1 = quantile(usagerate,.25),Q2=median(usagerate,.5),Q3=quantile(usagerate,.75))
## `summarise()` has grouped output by 'change', 'period', 'mon', 'ini_users',
## 'nusers'. You can override using the `.groups` argument.
p1 = ses_focal.gp.pvt %>% mutate(mon=factor(mon)) %>% ggplot(aes(x=mon)) + geom_line(aes(y=retention,group=period,col=period),linewidth=1) + geom_point(aes(y=retention)) + facet_wrap(~change) + theme_bw() + ylab('Retention Rates') + xlab('Month in Contract') + scale_color_manual(values = c('before'="#F7786F",'after'='#01BFC4'),labels=c('Before','After'))
p1.1 = subset(ses_focal.gp.pvt,change=='Default Change') %>% mutate(mon=factor(mon)) %>% ggplot(aes(x=mon)) + geom_line(aes(y=retention,group=period,col=period),linewidth=1) + geom_point(aes(y=retention)) + facet_wrap(~change) + theme_bw() + ylab('Retention Rates') + xlab('Month in Contract') #+ scale_color_manual(values = c('before'="#F7786F",'after'='#01BFC4'),labels=c('Before','After'))
p1.2 = subset(ses_focal.gp.pvt,change=='Default Change') %>% mutate(mon=factor(mon)) %>% ggplot(aes(x=mon)) + geom_line(aes(y=retention,group=period,col=period),linewidth=1) + geom_point(aes(y=retention)) + facet_wrap(~change) + theme_bw() + ylab('Retention Rates') + xlab('Month in Contract') #+ scale_color_manual(values = c('before'="#F7786F",'after'='#01BFC4'),labels=c('Before','After'))
ses_focal.gp.pvt = ses_focal.gp.pvt %>% pivot_wider(names_from = period,values_from = c(ini_users,nusers,retention,avg.usage,Q1,Q2,Q3))
ses_focal.gp.pvt = ses_focal.gp.pvt[complete.cases(ses_focal.gp.pvt),]
ses_focal.gp.pvt = ses_focal.gp.pvt %>% select(change,mon,ends_with('before'),ends_with('after'))
ses_focal.gp.pvt$mon = as.numeric(as.character(ses_focal.gp.pvt$mon))
#ses_focal.gp.pvt %>% mutate(mon=factor(mon)) %>% ggplot(aes(x=mon)) + geom_line(aes(y=retention_before,group=1),col="#F7786F",linewidth=1) + geom_point(aes(y=retention_before)) + geom_line(aes(y=retention_after,group=1),col='#01BFC4',linewidth=1) + geom_point(aes(y=retention_after)) + facet_wrap(~change) + theme_bw() + ylab('Retention Rates') + xlab('Month in Contract') + scale_color_manual(values = c('Before'="#F7786F",'After'='#01BFC4'),labels=c('Before','After'))
names(ses_focal.gp.pvt) = c('change','mon','maxn','n','ratio','mean','Q1','Q2','Q3','maxn.a','n.a','ratio.a','mean.a','Q1.a','Q2.a','Q3.a')
stargazer(subset(data.frame(ses_focal.gp.pvt[,-1])),type='text',title='Comparision Between Before/After Change',summary = F,rownames = F)
##
## Comparision Between Before/After Change
## ======================================================================================
## mon maxn n ratio mean Q1 Q2 Q3 maxn.a n.a ratio.a mean.a Q1.a Q2.a Q3.a
## --------------------------------------------------------------------------------------
## -1 258 245 0.950 0.725 0.571 0.778 1 216 209 0.968 0.699 0.500 0.714 1
## 1 258 258 1 0.670 0.500 0.700 0.892 216 216 1 0.696 0.533 0.767 0.900
## 2 258 242 0.938 0.585 0.367 0.633 0.867 216 208 0.963 0.586 0.367 0.600 0.833
## 3 258 227 0.880 0.503 0.200 0.500 0.767 216 200 0.926 0.561 0.333 0.567 0.833
## 4 258 192 0.744 0.563 0.267 0.567 0.867 216 177 0.819 0.554 0.267 0.600 0.867
## 5 258 181 0.702 0.543 0.267 0.567 0.833 216 172 0.796 0.556 0.267 0.600 0.833
## 6 258 170 0.659 0.540 0.233 0.567 0.867 216 166 0.769 0.524 0.300 0.517 0.800
## 7 258 152 0.589 0.549 0.300 0.600 0.833 216 156 0.722 0.486 0.167 0.500 0.775
## 8 258 145 0.562 0.508 0.167 0.533 0.800 216 145 0.671 0.459 0.133 0.433 0.767
## 9 258 137 0.531 0.452 0.133 0.467 0.733 216 135 0.625 0.394 0.050 0.400 0.633
## 10 258 111 0.430 0.427 0.133 0.367 0.750 216 120 0.556 0.384 0.100 0.333 0.633
## 11 258 107 0.415 0.422 0.100 0.500 0.650 216 121 0.560 0.455 0.138 0.483 0.759
## 12 258 117 0.453 0.491 0.172 0.517 0.793 216 114 0.528 0.471 0.108 0.517 0.789
## -1 183 168 0.918 0.734 0.571 0.829 1 250 245 0.980 0.749 0.571 0.857 1
## 1 183 183 1 0.712 0.533 0.833 0.933 250 250 1 0.729 0.600 0.800 0.900
## 2 183 164 0.896 0.622 0.433 0.700 0.900 250 244 0.976 0.623 0.367 0.667 0.867
## 3 183 155 0.847 0.597 0.400 0.633 0.867 250 238 0.952 0.549 0.300 0.567 0.833
## 4 183 142 0.776 0.601 0.367 0.633 0.867 250 201 0.804 0.565 0.367 0.600 0.800
## 5 183 134 0.732 0.552 0.333 0.600 0.833 250 191 0.764 0.527 0.233 0.567 0.800
## 6 183 126 0.689 0.481 0.200 0.533 0.733 250 180 0.720 0.448 0.133 0.433 0.767
## 7 183 112 0.612 0.491 0.292 0.500 0.733 250 153 0.612 0.423 0.100 0.400 0.667
## 8 183 109 0.596 0.472 0.233 0.467 0.733 250 148 0.592 0.452 0.184 0.483 0.726
## 9 183 113 0.617 0.495 0.241 0.483 0.759 250 151 0.604 0.501 0.213 0.538 0.764
## 10 183 101 0.552 0.497 0.211 0.517 0.778 250 22 0.088 0.546 0.316 0.600 0.788
## --------------------------------------------------------------------------------------
ses_focal.gp.pvt = ses_focal.gp %>% group_by(change,period,month_contract) %>% mutate(nusers=n()) %>% group_by(change,period) %>% mutate(ini_users=max(nusers,na.rm=T),retention=nusers/ini_users) %>% group_by(change,period,month_contract,retention)%>% summarise_at(vars(-group_cols(),-'alumno',-'math_tarifa',-'ini_users',-'nusers'),mean)
ses_focal.gp.pvt = ses_focal.gp.pvt %>% select(-c('nses','dayrange','usagerate','avg.efec','avg.tmr')) %>%pivot_wider(names_from = period,values_from = c(retention,correctionrate,gamerate,med.efec,IQR.efec,med.tmr,IQR.tmr,avg.problem))
#mutate(nusers=n()) %>% group_by(change,period) %>% mutate(ini_users=max(nusers,na.rm=T),retention=nusers/ini_users) %>% group_by(change,period,mon,ini_users,nusers,retention) %>% summarise(avg.usage = mean(usagerate),Q1 = quantile(usagerate,.25),Q2=median(usagerate,.5),Q3=quantile(usagerate,.75)) %>% pivot_wider(names_from = period,values_from = c(ini_users,nusers,retention,avg.usage,Q1,Q2,Q3))
ses_focal.gp.pvt = ses_focal.gp.pvt[complete.cases(ses_focal.gp.pvt),]
ses_focal.gp.pvt = ses_focal.gp.pvt %>% select(change,month_contract,ends_with('before'),ends_with('after'))
ses_focal.gp.pvt$month_contract = as.numeric(as.character(ses_focal.gp.pvt$month_contract))
names(ses_focal.gp.pvt) = c('change','mon','retention','correction','gamerat','med.efe','IQR.efe','med.tmr','IQR.tmr','avg.prob','retention.a','correction.a','gamerat.a','med.efe.a','IQR.efe.a','med.tmr.a','IQR.tmr.a','avg.prob.a')
stargazer(subset(data.frame(ses_focal.gp.pvt[,-1])),type='text',title='Comparision Between Before/After Change',summary = F,rownames = F)
##
## Comparision Between Before/After Change
## ===============================================================================================================================================================
## mon retention correction gamerat med.efe IQR.efe med.tmr IQR.tmr avg.prob retention.a correction.a gamerat.a med.efe.a IQR.efe.a med.tmr.a IQR.tmr.a avg.prob.a
## ---------------------------------------------------------------------------------------------------------------------------------------------------------------
## -1 0.950 0.552 0.512 0.649 0.362 1.053 0.852 30.025 0.968 0.540 0.461 0.599 0.373 0.990 0.834 27.384
## 1 1 0.461 0.469 0.604 0.447 0.679 0.747 31.363 1 0.476 0.476 0.629 0.449 0.729 0.803 32.272
## 2 0.938 0.398 0.425 0.501 0.417 0.581 0.640 26.545 0.963 0.402 0.452 0.497 0.435 0.603 0.708 26.077
## 3 0.880 0.356 0.396 0.404 0.395 0.507 0.630 20.819 0.926 0.374 0.416 0.471 0.395 0.610 0.665 23.294
## 4 0.744 0.398 0.434 0.457 0.395 0.571 0.638 22.108 0.819 0.358 0.396 0.461 0.390 0.605 0.678 22.151
## 5 0.702 0.382 0.383 0.458 0.393 0.586 0.664 20.926 0.796 0.356 0.389 0.463 0.374 0.631 0.699 21.276
## 6 0.659 0.373 0.389 0.452 0.386 0.595 0.670 19.523 0.769 0.330 0.357 0.404 0.428 0.563 0.739 19.633
## 7 0.589 0.383 0.357 0.444 0.416 0.602 0.726 19.965 0.722 0.296 0.286 0.378 0.357 0.575 0.674 17.695
## 8 0.562 0.352 0.307 0.412 0.378 0.591 0.683 18.249 0.671 0.272 0.268 0.332 0.341 0.515 0.679 16.172
## 9 0.531 0.304 0.247 0.346 0.350 0.483 0.631 15.535 0.625 0.243 0.235 0.289 0.390 0.420 0.709 12.808
## 10 0.430 0.295 0.246 0.317 0.355 0.502 0.655 13.828 0.556 0.228 0.216 0.247 0.349 0.408 0.648 11.734
## 11 0.415 0.277 0.261 0.320 0.410 0.537 0.788 12.775 0.560 0.261 0.266 0.345 0.334 0.595 0.741 13.433
## 12 0.453 0.322 0.293 0.365 0.355 0.602 0.716 15.583 0.528 0.274 0.283 0.369 0.327 0.644 0.707 14.492
## -1 0.918 0.579 0.523 0.649 0.373 1.057 0.780 28.546 0.980 0.617 0.549 0.646 0.348 1.119 0.810 28.710
## 1 1 0.565 0.598 0.649 0.373 0.830 0.680 32.845 1 0.575 0.621 0.662 0.364 0.842 0.661 33.802
## 2 0.896 0.461 0.482 0.572 0.358 0.694 0.616 27.632 0.976 0.455 0.485 0.557 0.427 0.684 0.698 27.512
## 3 0.847 0.414 0.442 0.522 0.406 0.641 0.686 25.038 0.952 0.391 0.412 0.472 0.429 0.582 0.705 22.649
## 4 0.776 0.399 0.418 0.517 0.437 0.669 0.742 23.440 0.804 0.382 0.399 0.478 0.472 0.614 0.794 22.629
## 5 0.732 0.356 0.364 0.463 0.422 0.596 0.705 22.233 0.764 0.349 0.345 0.440 0.409 0.586 0.701 20.637
## 6 0.689 0.292 0.307 0.402 0.412 0.522 0.671 18.658 0.720 0.288 0.259 0.354 0.354 0.510 0.667 15.826
## 7 0.612 0.308 0.295 0.377 0.493 0.515 0.842 17.409 0.612 0.259 0.257 0.313 0.378 0.468 0.718 14.580
## 8 0.596 0.301 0.297 0.347 0.447 0.505 0.799 15.732 0.592 0.289 0.271 0.337 0.384 0.536 0.779 14.562
## 9 0.617 0.305 0.310 0.345 0.440 0.554 0.781 16.445 0.604 0.300 0.312 0.387 0.383 0.608 0.735 16.754
## 10 0.552 0.318 0.320 0.369 0.414 0.584 0.757 15.983 0.088 0.432 0.404 0.454 0.409 0.763 0.805 17.725
## ---------------------------------------------------------------------------------------------------------------------------------------------------------------
ses_focal.gp.pvt = ses_focal.gp %>% group_by(change,period,math_tarifa,mon=month_contract) %>% mutate(nusers=n()) %>% group_by(change,period,math_tarifa) %>% mutate(ini_users=max(nusers,na.rm=T),retention=nusers/ini_users) %>% group_by(change,period,math_tarifa,mon,ini_users,nusers,retention) %>% summarise(avg.usage = mean(usagerate),Q1 = quantile(usagerate,.25),Q2=median(usagerate,.5),Q3=quantile(usagerate,.75)) %>% pivot_wider(names_from = period,values_from = c(ini_users,nusers,retention,avg.usage,Q1,Q2,Q3))
## `summarise()` has grouped output by 'change', 'period', 'math_tarifa', 'mon',
## 'ini_users', 'nusers'. You can override using the `.groups` argument.
ses_focal.gp.pvt = ses_focal.gp.pvt[complete.cases(ses_focal.gp.pvt),]
ses_focal.gp.pvt = ses_focal.gp.pvt %>% select(change,math_tarifa,mon,ends_with('before'),ends_with('after'))
ses_focal.gp.pvt$mon = as.numeric(as.character(ses_focal.gp.pvt$mon))
names(ses_focal.gp.pvt) = c('change','tarifa','mon','maxn','n','ratio','mean','Q1','Q2','Q3','maxn.a','n.a','ratio.a','mean.a','Q1.a','Q2.a','Q3.a')
stargazer(subset(data.frame(ses_focal.gp.pvt[,-1])),type='text',title='Comparision Between Before/After Change',summary = F,rownames = F)
##
## Comparision Between Before/After Change
## =============================================================================================
## tarifa mon maxn n ratio mean Q1 Q2 Q3 maxn.a n.a ratio.a mean.a Q1.a Q2.a Q3.a
## ---------------------------------------------------------------------------------------------
## 101 -1 87 78 0.897 0.654 0.475 0.714 0.857 82 78 0.951 0.603 0.366 0.613 0.871
## 101 1 87 87 1 0.580 0.433 0.567 0.767 82 82 1 0.613 0.433 0.667 0.800
## 101 2 87 71 0.816 0.464 0.183 0.467 0.683 82 74 0.902 0.477 0.233 0.500 0.700
## 101 3 87 56 0.644 0.446 0.158 0.467 0.675 82 66 0.805 0.459 0.175 0.467 0.733
## 101 4 87 51 0.586 0.472 0.133 0.467 0.783 82 59 0.720 0.440 0.100 0.433 0.717
## 101 5 87 44 0.506 0.498 0.292 0.500 0.767 82 54 0.659 0.477 0.175 0.517 0.767
## 101 6 87 34 0.391 0.545 0.367 0.533 0.833 82 48 0.585 0.448 0.233 0.400 0.767
## 101 7 87 32 0.368 0.544 0.358 0.500 0.783 82 44 0.537 0.398 0.092 0.333 0.733
## 101 8 87 31 0.356 0.469 0.250 0.500 0.717 82 37 0.451 0.369 0.067 0.300 0.567
## 101 9 87 24 0.276 0.446 0.225 0.456 0.642 82 29 0.354 0.316 0 0.200 0.533
## 101 10 87 21 0.241 0.462 0.233 0.400 0.633 82 23 0.280 0.397 0.167 0.300 0.650
## 101 11 87 19 0.218 0.454 0.167 0.433 0.650 82 26 0.317 0.443 0.181 0.440 0.655
## 101 12 87 21 0.241 0.420 0.125 0.269 0.690 82 20 0.244 0.525 0.242 0.601 0.818
## 102 -1 130 127 0.977 0.732 0.571 0.833 0.871 71 69 0.972 0.762 0.625 0.857 1
## 102 1 130 130 1 0.697 0.533 0.767 0.900 71 71 1 0.734 0.600 0.767 0.900
## 102 2 130 130 1 0.620 0.433 0.667 0.867 71 71 1 0.607 0.467 0.600 0.833
## 102 3 130 130 1 0.498 0.208 0.500 0.767 71 71 1 0.556 0.317 0.567 0.833
## 102 4 130 100 0.769 0.569 0.325 0.583 0.833 71 55 0.775 0.596 0.383 0.667 0.833
## 102 5 130 96 0.738 0.541 0.233 0.550 0.867 71 55 0.775 0.570 0.333 0.600 0.833
## 102 6 130 95 0.731 0.511 0.183 0.533 0.850 71 55 0.775 0.532 0.300 0.567 0.767
## 102 7 130 79 0.608 0.530 0.300 0.600 0.733 71 49 0.690 0.513 0.267 0.533 0.767
## 102 8 130 73 0.562 0.498 0.200 0.533 0.767 71 46 0.648 0.466 0.233 0.417 0.767
## 102 9 130 72 0.554 0.430 0.133 0.467 0.675 71 44 0.620 0.364 0.025 0.433 0.567
## 102 10 130 49 0.377 0.412 0.133 0.367 0.733 71 35 0.493 0.347 0 0.400 0.600
## 102 11 130 47 0.362 0.433 0.100 0.500 0.633 71 33 0.465 0.483 0.138 0.552 0.793
## 102 12 130 56 0.431 0.521 0.241 0.534 0.802 71 32 0.451 0.491 0.214 0.532 0.764
## 103 -1 41 40 0.976 0.839 0.714 0.938 1 63 62 0.984 0.751 0.588 0.857 1
## 103 1 41 41 1 0.775 0.633 0.833 0.933 63 63 1 0.763 0.633 0.833 0.950
## 103 2 41 41 1 0.685 0.433 0.800 0.933 63 63 1 0.692 0.517 0.800 0.900
## 103 3 41 41 1 0.597 0.400 0.667 0.867 63 63 1 0.673 0.500 0.767 0.933
## 103 4 41 41 1 0.664 0.467 0.833 0.933 63 63 1 0.625 0.450 0.733 0.900
## 103 5 41 41 1 0.598 0.367 0.667 0.867 63 63 1 0.611 0.383 0.742 0.833
## 103 6 41 41 1 0.604 0.333 0.633 0.867 63 63 1 0.575 0.367 0.600 0.867
## 103 7 41 41 1 0.591 0.200 0.767 0.933 63 63 1 0.525 0.167 0.567 0.833
## 103 8 41 41 1 0.555 0.133 0.633 0.933 63 62 0.984 0.506 0.133 0.517 0.833
## 103 9 41 41 1 0.495 0.133 0.567 0.833 63 62 0.984 0.451 0.167 0.450 0.667
## 103 10 41 41 1 0.428 0.067 0.467 0.767 63 62 0.984 0.399 0.108 0.333 0.633
## 103 11 41 41 1 0.396 0.067 0.367 0.667 63 62 0.984 0.444 0.119 0.414 0.747
## 103 12 41 40 0.976 0.487 0.172 0.552 0.793 63 62 0.984 0.443 0.036 0.483 0.840
## 101 -1 80 69 0.863 0.717 0.571 0.750 0.917 62 61 0.984 0.644 0.429 0.714 0.857
## 101 1 80 80 1 0.619 0.367 0.700 0.867 62 62 1 0.593 0.467 0.633 0.792
## 101 2 80 61 0.762 0.506 0.133 0.567 0.833 62 54 0.871 0.526 0.303 0.533 0.800
## 101 3 80 53 0.662 0.493 0.200 0.533 0.800 62 48 0.774 0.474 0.233 0.467 0.750
## 101 4 80 49 0.613 0.506 0.233 0.567 0.733 62 38 0.613 0.447 0.204 0.483 0.667
## 101 5 80 40 0.500 0.474 0.140 0.500 0.725 62 34 0.548 0.400 0.142 0.390 0.633
## 101 6 80 35 0.438 0.403 0.017 0.333 0.700 62 26 0.419 0.335 0.033 0.233 0.608
## 101 7 80 31 0.388 0.398 0.083 0.346 0.633 62 19 0.306 0.333 0.050 0.333 0.467
## 101 8 80 27 0.338 0.456 0.217 0.433 0.750 62 18 0.290 0.483 0.126 0.603 0.725
## 101 9 80 25 0.312 0.417 0.154 0.345 0.655 62 15 0.242 0.551 0.353 0.621 0.736
## 101 10 80 21 0.262 0.529 0.360 0.571 0.778 62 1 0.016 0.400 0.400 0.400 0.400
## 102 -1 40 38 0.950 0.710 0.571 0.714 0.871 83 80 0.964 0.778 0.625 0.857 1
## 102 1 40 40 1 0.698 0.508 0.767 0.908 83 82 0.988 0.754 0.667 0.833 0.900
## 102 2 40 40 1 0.611 0.458 0.655 0.900 83 83 1 0.598 0.333 0.667 0.867
## 102 3 40 40 1 0.549 0.350 0.567 0.875 83 83 1 0.509 0.200 0.533 0.833
## 102 4 40 31 0.775 0.596 0.333 0.633 0.867 83 56 0.675 0.590 0.333 0.650 0.867
## 102 5 40 32 0.800 0.529 0.292 0.600 0.800 83 53 0.639 0.569 0.333 0.633 0.833
## 102 6 40 32 0.800 0.473 0.158 0.523 0.767 83 50 0.602 0.475 0.117 0.483 0.833
## 102 7 40 22 0.550 0.423 0.267 0.367 0.650 83 31 0.373 0.472 0.208 0.433 0.783
## 102 8 40 22 0.550 0.451 0.242 0.475 0.717 83 27 0.325 0.488 0.186 0.567 0.767
## 102 9 40 28 0.700 0.510 0.302 0.483 0.854 83 33 0.398 0.571 0.241 0.586 0.913
## 102 10 40 21 0.525 0.536 0.345 0.536 0.789 83 7 0.084 0.651 0.432 0.600 0.909
## 103 -1 63 61 0.968 0.768 0.583 0.857 1 107 104 0.972 0.788 0.702 0.857 1
## 103 1 63 63 1 0.839 0.767 0.900 0.950 107 106 0.991 0.789 0.733 0.867 0.933
## 103 2 63 63 1 0.740 0.617 0.767 0.933 107 107 1 0.692 0.567 0.733 0.900
## 103 3 63 62 0.984 0.717 0.542 0.783 0.900 107 107 1 0.615 0.433 0.667 0.833
## 103 4 63 62 0.984 0.678 0.500 0.733 0.892 107 107 1 0.593 0.400 0.600 0.800
## 103 5 63 62 0.984 0.613 0.400 0.683 0.858 107 104 0.972 0.547 0.267 0.567 0.802
## 103 6 63 59 0.937 0.532 0.333 0.533 0.733 107 104 0.972 0.463 0.167 0.433 0.742
## 103 7 63 59 0.937 0.566 0.383 0.567 0.767 107 103 0.963 0.425 0.067 0.433 0.667
## 103 8 63 60 0.952 0.488 0.267 0.500 0.708 107 103 0.963 0.437 0.200 0.400 0.661
## 103 9 63 60 0.952 0.520 0.276 0.517 0.733 107 103 0.963 0.471 0.155 0.483 0.754
## 103 10 63 59 0.937 0.472 0.162 0.478 0.755 107 14 0.131 0.505 0.211 0.600 0.744
## ---------------------------------------------------------------------------------------------
subset(ses_focal.gp,change=='Default Change' & math_tarifa=='103') %>% group_by(alumno) %>% summarise(n=n()) %>% arrange(n) %>% head()
## # A tibble: 6 × 2
## alumno n
## <dbl> <int>
## 1 4215344 8
## 2 4177781 11
## 3 4235419 12
## 4 2955286 13
## 5 3071566 13
## 6 3293603 13
#4151302;3;
#4151303;3
#4151304;3
#4215344;8
p2 = subset(ses_focal.gp,change=='Default Change') %>% ggplot(aes(x=month_contract,y=usagerate)) + geom_smooth(aes(group=period,col=period)) + theme_bw()
p3 = subset(ses_focal.gp,change=='Default Change') %>% ggplot(aes(x=month_contract,y=gamerate)) + geom_smooth(aes(group=period,col=period)) + theme_bw()
p4 = subset(ses_focal.gp,change=='Default Change') %>% ggplot(aes(x=month_contract,y=correctionrate)) + geom_smooth(aes(group=period,col=period)) + theme_bw()
p5 = subset(ses_focal.gp,change=='Default Change') %>% ggplot(aes(x=month_contract,y=IQR.efec)) + geom_smooth(aes(group=period,col=period)) + theme_bw()
p6 = subset(ses_focal.gp,change=='Default Change') %>% ggplot(aes(x=month_contract,y=med.efec)) + geom_smooth(aes(group=period,col=period)) + theme_bw()
p7 = subset(ses_focal.gp,change=='Default Change') %>% ggplot(aes(x=month_contract,y=med.tmr)) + geom_smooth(aes(group=period,col=period)) + theme_bw()
p8 = subset(ses_focal.gp,change=='Default Change') %>% ggplot(aes(x=month_contract,y=IQR.tmr)) + geom_smooth(aes(group=period,col=period)) + theme_bw()
p9 = subset(ses_focal.gp,change=='Default Change') %>% ggplot(aes(x=month_contract,y=avg.problem)) + geom_smooth(aes(group=period,col=period)) + theme_bw()
p10 = subset(ses_focal.gp,change=='Price Change') %>% ggplot(aes(x=month_contract,y=usagerate)) + geom_smooth(aes(group=period,col=period)) + theme_bw()
p11 = subset(ses_focal.gp,change=='Price Change') %>% ggplot(aes(x=month_contract,y=gamerate)) + geom_smooth(aes(group=period,col=period)) + theme_bw()
p12 = subset(ses_focal.gp,change=='Price Change') %>% ggplot(aes(x=month_contract,y=correctionrate)) + geom_smooth(aes(group=period,col=period)) + theme_bw()
p13= subset(ses_focal.gp,change=='Price Change') %>% ggplot(aes(x=month_contract,y=med.efec)) + geom_smooth(aes(group=period,col=period)) + theme_bw()
p14= subset(ses_focal.gp,change=='Price Change') %>% ggplot(aes(x=month_contract,y=IQR.efec)) + geom_smooth(aes(group=period,col=period)) + theme_bw()
p15 = subset(ses_focal.gp,change=='Price Change') %>% ggplot(aes(x=month_contract,y=med.tmr)) + geom_smooth(aes(group=period,col=period)) + theme_bw()
p16 = subset(ses_focal.gp,change=='Price Change') %>% ggplot(aes(x=month_contract,y=IQR.tmr)) + geom_smooth(aes(group=period,col=period)) + theme_bw()
p17 = subset(ses_focal.gp,change=='Price Change') %>% ggplot(aes(x=month_contract,y=avg.problem)) + geom_smooth(aes(group=period,col=period)) + theme_bw()
library(gridExtra)
##
## Attaching package: 'gridExtra'
## The following object is masked from 'package:dplyr':
##
## combine
library(cowplot)
##
## Attaching package: 'cowplot'
## The following object is masked from 'package:lubridate':
##
## stamp
#grid.arrange(p2,p3,p4,p5,p6,p7,p8,p9,ncol=3)p1.1+ theme(legend.position='none'),
combined_plot = plot_grid(p2+theme(legend.position = 'none') + xlab(''),p3+ theme(legend.position='none')+ xlab(''),p4+ theme(legend.position='none')+ xlab(''),p5+ theme(legend.position='none')+ xlab(''),p6+ theme(legend.position='none')+ xlab(''),p7+ theme(legend.position='none')+ xlab(''),p8+ theme(legend.position='none')+ xlab(''),p9+ theme(legend.position='none')+ xlab(''),ncol=4)
## `geom_smooth()` using method = 'gam' and formula = 'y ~ s(x, bs = "cs")'
## `geom_smooth()` using method = 'gam' and formula = 'y ~ s(x, bs = "cs")'
## `geom_smooth()` using method = 'gam' and formula = 'y ~ s(x, bs = "cs")'
## `geom_smooth()` using method = 'gam' and formula = 'y ~ s(x, bs = "cs")'
## `geom_smooth()` using method = 'gam' and formula = 'y ~ s(x, bs = "cs")'
## `geom_smooth()` using method = 'gam' and formula = 'y ~ s(x, bs = "cs")'
## `geom_smooth()` using method = 'gam' and formula = 'y ~ s(x, bs = "cs")'
## `geom_smooth()` using method = 'gam' and formula = 'y ~ s(x, bs = "cs")'
title <- ggdraw() +
draw_label(
"Comparision Between Before/After Default Change",fontface = 'bold',x = 0,hjust = 0
) +
theme(
# add margin on the left of the drawing canvas,
# so title is aligned with left edge of first plot
plot.margin = margin(0, 0, 0, 7)
)
#combined_plot = cowplot::add_common_legend(combined_plot,color = c("#F7786F",'#01BFC4'),labels=c('Before','After'))
#+ scale_color_manual(values = c('before'="#F7786F",'after'='#01BFC4'),labels=c('Before','After'))
combined_plot1 = plot_grid(title,combined_plot,ncol=1,rel_heights = c(0.1, 1))
combined_plot = plot_grid(p10+theme(legend.position = 'none') + xlab(''),p11+ theme(legend.position='none')+ xlab(''),p12+ theme(legend.position='none')+ xlab(''),p13+ theme(legend.position='none')+ xlab(''),p14+ theme(legend.position='none')+ xlab(''),p15+ theme(legend.position='none')+ xlab(''),p16+ theme(legend.position='none')+ xlab(''),p17+ theme(legend.position='none')+ xlab(''),ncol=4)
## `geom_smooth()` using method = 'gam' and formula = 'y ~ s(x, bs = "cs")'
## `geom_smooth()` using method = 'gam' and formula = 'y ~ s(x, bs = "cs")'
## `geom_smooth()` using method = 'gam' and formula = 'y ~ s(x, bs = "cs")'
## `geom_smooth()` using method = 'gam' and formula = 'y ~ s(x, bs = "cs")'
## `geom_smooth()` using method = 'gam' and formula = 'y ~ s(x, bs = "cs")'
## `geom_smooth()` using method = 'gam' and formula = 'y ~ s(x, bs = "cs")'
## `geom_smooth()` using method = 'gam' and formula = 'y ~ s(x, bs = "cs")'
## `geom_smooth()` using method = 'gam' and formula = 'y ~ s(x, bs = "cs")'
title <- ggdraw() +
draw_label(
"Comparision Between Before/After Price Change",fontface = 'bold',x = 0,hjust = 0
) +
theme(
# add margin on the left of the drawing canvas,
# so title is aligned with left edge of first plot
plot.margin = margin(0, 0, 0, 7)
)
#combined_plot = cowplot::add_common_legend(combined_plot,color = c("#F7786F",'#01BFC4'),labels=c('Before','After'))
#+ scale_color_manual(values = c('before'="#F7786F",'after'='#01BFC4'),labels=c('Before','After'))
combined_plot2 = plot_grid(title,combined_plot,ncol=1,rel_heights = c(0.1, 1))
cp = plot_grid(p1,combined_plot1,combined_plot2,ncol = 1)
#ggsave("my_plot.jpeg", cp, width = 12, height = 12, dpi = 600)
cp
temp = data.frame(alumno = rep(unique(ses_focal.gp$alumno),length(unique(ses_focal.gp$month_contract)))) %>% arrange(alumno)
temp$month_contract = rep(unique(ses_focal.gp$month_contract),length(unique(ses_focal.gp$alumno)))
temp = ses_focal.gp[,c('change','period','alumno','math_tarifa')] %>% distinct() %>% right_join(temp,by='alumno')
temp = temp %>% anti_join(ses_focal.gp[,c('alumno','month_contract')],by =c('alumno', 'month_contract'))
temp2 = data.frame(matrix(rep(NA,nrow(temp)*12),ncol = 12))
names(temp2) = names(ses_focal.gp)[6:17]
temp = cbind(temp,temp2)
temp$active = 0
temp = temp %>% replace(is.na(.),0)
ses_focal.gp$active = 1
ses_focal.gp2 = rbind(ses_focal.gp,temp) %>% arrange(change,period,alumno,month_contract)
ses_focal.gp2.pvt = ses_focal.gp2 %>% group_by(change,period,mon=month_contract) %>% mutate(nusers=sum(active)) %>% group_by(change,period) %>% mutate(ini_users=max(nusers),retention=nusers/ini_users) %>% group_by(change,period,mon,ini_users,nusers,retention) %>% summarise(avg.usage = mean(usagerate),Q1 = quantile(usagerate,.25),Q2=median(usagerate,.5),Q3=quantile(usagerate,.75)) %>% pivot_wider(names_from = period,values_from = c(ini_users,nusers,retention,avg.usage,Q1,Q2,Q3))
## `summarise()` has grouped output by 'change', 'period', 'mon', 'ini_users',
## 'nusers'. You can override using the `.groups` argument.
ses_focal.gp2.pvt = ses_focal.gp2.pvt %>% select(change,mon,ends_with('before'),ends_with('after'))
#ses_focal.gp2.pvt[,c(5:9,12:16)] = lapply(ses_focal.gp2.pvt[,c(5:9,12:16)],function(x){round(x,2)})
names(ses_focal.gp2.pvt) = c('change','mon','maxn','n','ratio','mean','Q1','Q2','Q3','maxn.a','n.a','ratio.a','mean.a','Q1.a','Q2.a','Q3.a')
stargazer(data.frame(ses_focal.gp2.pvt[,-1]),summary=F,type='text',rownames = F) #colnames = F
##
## ======================================================================================
## mon maxn n ratio mean Q1 Q2 Q3 maxn.a n.a ratio.a mean.a Q1.a Q2.a Q3.a
## --------------------------------------------------------------------------------------
## -1 258 245 0.950 0.685 0.517 0.714 0.875 216 209 0.968 0.677 0.462 0.714 0.950
## 1 258 258 1 0.667 0.500 0.700 0.883 216 216 1 0.696 0.533 0.767 0.900
## 2 258 242 0.938 0.547 0.267 0.600 0.867 216 208 0.963 0.565 0.300 0.600 0.833
## 3 258 227 0.880 0.441 0.129 0.433 0.767 216 200 0.926 0.520 0.200 0.567 0.833
## 4 258 192 0.744 0.418 0 0.400 0.817 216 177 0.819 0.454 0.067 0.500 0.775
## 5 258 181 0.702 0.380 0 0.333 0.767 216 172 0.796 0.442 0 0.483 0.800
## 6 258 170 0.659 0.354 0 0.233 0.717 216 166 0.769 0.403 0 0.400 0.733
## 7 258 152 0.589 0.322 0 0.133 0.667 216 156 0.722 0.351 0 0.250 0.700
## 8 258 145 0.562 0.284 0 0 0.600 216 145 0.671 0.308 0 0.150 0.608
## 9 258 137 0.531 0.239 0 0 0.500 216 135 0.625 0.246 0 0 0.500
## 10 258 111 0.430 0.183 0 0 0.317 216 120 0.556 0.213 0 0 0.408
## 11 258 107 0.415 0.175 0 0 0.283 216 121 0.560 0.255 0 0 0.517
## 12 258 117 0.453 0.222 0 0 0.483 216 114 0.528 0.248 0 0 0.542
## 99 258 72 0.279 0.151 0 0 0.065 216 0 0 0 0 0 0
## -1 183 168 0.918 0.674 0.483 0.714 1 250 245 0.980 0.725 0.571 0.857 1
## 1 183 183 1 0.712 0.533 0.833 0.933 250 250 1 0.720 0.600 0.800 0.900
## 2 183 164 0.896 0.557 0.183 0.633 0.883 250 244 0.976 0.601 0.367 0.667 0.867
## 3 183 155 0.847 0.506 0.050 0.567 0.833 250 238 0.952 0.517 0.233 0.533 0.800
## 4 183 142 0.776 0.466 0 0.500 0.800 250 201 0.804 0.449 0.033 0.500 0.767
## 5 183 134 0.732 0.404 0 0.400 0.733 250 191 0.764 0.398 0 0.367 0.733
## 6 183 126 0.689 0.331 0 0.200 0.667 250 180 0.720 0.319 0 0.200 0.600
## 7 183 112 0.612 0.301 0 0.167 0.583 250 153 0.612 0.256 0 0.033 0.467
## 8 183 109 0.596 0.281 0 0.067 0.550 250 148 0.592 0.264 0 0.034 0.533
## 9 183 113 0.617 0.305 0 0.154 0.603 250 151 0.604 0.299 0 0.077 0.621
## 10 183 101 0.552 0.274 0 0 0.577 250 22 0.088 0.048 0 0 0
## 11 183 0 0 0 0 0 0 250 0 0 0 0 0 0
## 12 183 0 0 0 0 0 0 250 0 0 0 0 0 0
## 99 183 0 0 0 0 0 0 250 0 0 0 0 0 0
## --------------------------------------------------------------------------------------
stargazer(subset(data.frame(ses_focal.gp2.pvt),change=='Price Change'),summary=F,type='text',rownames = F)
##
## ===================================================================================================
## change mon maxn n ratio mean Q1 Q2 Q3 maxn.a n.a ratio.a mean.a Q1.a Q2.a Q3.a
## ---------------------------------------------------------------------------------------------------
## Price Change -1 183 168 0.918 0.674 0.483 0.714 1 250 245 0.980 0.725 0.571 0.857 1
## Price Change 1 183 183 1 0.712 0.533 0.833 0.933 250 250 1 0.720 0.600 0.800 0.900
## Price Change 2 183 164 0.896 0.557 0.183 0.633 0.883 250 244 0.976 0.601 0.367 0.667 0.867
## Price Change 3 183 155 0.847 0.506 0.050 0.567 0.833 250 238 0.952 0.517 0.233 0.533 0.800
## Price Change 4 183 142 0.776 0.466 0 0.500 0.800 250 201 0.804 0.449 0.033 0.500 0.767
## Price Change 5 183 134 0.732 0.404 0 0.400 0.733 250 191 0.764 0.398 0 0.367 0.733
## Price Change 6 183 126 0.689 0.331 0 0.200 0.667 250 180 0.720 0.319 0 0.200 0.600
## Price Change 7 183 112 0.612 0.301 0 0.167 0.583 250 153 0.612 0.256 0 0.033 0.467
## Price Change 8 183 109 0.596 0.281 0 0.067 0.550 250 148 0.592 0.264 0 0.034 0.533
## Price Change 9 183 113 0.617 0.305 0 0.154 0.603 250 151 0.604 0.299 0 0.077 0.621
## Price Change 10 183 101 0.552 0.274 0 0 0.577 250 22 0.088 0.048 0 0 0
## Price Change 11 183 0 0 0 0 0 0 250 0 0 0 0 0 0
## Price Change 12 183 0 0 0 0 0 0 250 0 0 0 0 0 0
## Price Change 99 183 0 0 0 0 0 0 250 0 0 0 0 0 0
## ---------------------------------------------------------------------------------------------------
ses_focal.gp2.pvt = ses_focal.gp2 %>% group_by(change,period,math_tarifa,mon=month_contract) %>% mutate(nusers=n()) %>% group_by(change,period,math_tarifa) %>% mutate(ini_users=max(nusers,na.rm=T),retention=nusers/ini_users) %>% group_by(change,period,math_tarifa,mon,ini_users,nusers,retention) %>% summarise(avg.usage = mean(usagerate),Q1 = quantile(usagerate,.25),Q2=median(usagerate,.5),Q3=quantile(usagerate,.75)) %>% pivot_wider(names_from = period,values_from = c(ini_users,nusers,retention,avg.usage,Q1,Q2,Q3))
## `summarise()` has grouped output by 'change', 'period', 'math_tarifa', 'mon',
## 'ini_users', 'nusers'. You can override using the `.groups` argument.
ses_focal.gp2.pvt = ses_focal.gp2.pvt[complete.cases(ses_focal.gp2.pvt),]
ses_focal.gp2.pvt = ses_focal.gp2.pvt %>% select(change,math_tarifa,mon,ends_with('before'),ends_with('after'))
ses_focal.gp2.pvt$mon = as.numeric(as.character(ses_focal.gp2.pvt$mon))
names(ses_focal.gp2.pvt) = c('change','tarifa','mon','maxn','n','ratio','mean','Q1','Q2','Q3','maxn.a','n.a','ratio.a','mean.a','Q1.a','Q2.a','Q3.a')
stargazer(subset(data.frame(ses_focal.gp2.pvt[,-1])),type='text',title='Comparision Between Before/After Change',summary = F,rownames = F)
##
## Comparision Between Before/After Change
## =============================================================================================
## tarifa mon maxn n ratio mean Q1 Q2 Q3 maxn.a n.a ratio.a mean.a Q1.a Q2.a Q3.a
## ---------------------------------------------------------------------------------------------
## 101 -1 87 87 1 0.587 0.429 0.571 0.857 82 82 1 0.573 0.286 0.571 0.857
## 101 1 87 87 1 0.580 0.433 0.567 0.767 82 82 1 0.613 0.433 0.667 0.800
## 101 2 87 87 1 0.379 0 0.333 0.650 82 82 1 0.431 0.167 0.467 0.667
## 101 3 87 87 1 0.287 0 0.133 0.543 82 82 1 0.370 0.033 0.333 0.592
## 101 4 87 87 1 0.277 0 0.067 0.567 82 82 1 0.316 0 0.133 0.558
## 101 5 87 87 1 0.252 0 0 0.500 82 82 1 0.314 0 0.167 0.592
## 101 6 87 87 1 0.213 0 0 0.450 82 82 1 0.262 0 0.050 0.433
## 101 7 87 87 1 0.200 0 0 0.417 82 82 1 0.214 0 0 0.358
## 101 8 87 87 1 0.167 0 0 0.283 82 82 1 0.167 0 0 0.225
## 101 9 87 87 1 0.123 0 0 0.061 82 82 1 0.112 0 0 0
## 101 10 87 87 1 0.111 0 0 0 82 82 1 0.111 0 0 0.025
## 101 11 87 87 1 0.099 0 0 0 82 82 1 0.141 0 0 0.129
## 101 12 87 87 1 0.101 0 0 0 82 82 1 0.128 0 0 0
## 101 99 87 87 1 0.075 0 0 0 82 82 1 0 0 0 0
## 102 -1 131 131 1 0.709 0.571 0.778 0.862 71 71 1 0.741 0.625 0.857 0.938
## 102 1 131 131 1 0.692 0.533 0.767 0.900 71 71 1 0.734 0.600 0.767 0.900
## 102 2 131 131 1 0.616 0.433 0.667 0.867 71 71 1 0.607 0.467 0.600 0.833
## 102 3 131 131 1 0.495 0.200 0.500 0.767 71 71 1 0.556 0.317 0.567 0.833
## 102 4 131 131 1 0.434 0 0.433 0.800 71 71 1 0.462 0.067 0.500 0.767
## 102 5 131 131 1 0.396 0 0.367 0.767 71 71 1 0.441 0 0.400 0.833
## 102 6 131 131 1 0.370 0 0.300 0.733 71 71 1 0.412 0 0.400 0.717
## 102 7 131 131 1 0.320 0 0.200 0.667 71 71 1 0.354 0 0.267 0.700
## 102 8 131 131 1 0.278 0 0.033 0.600 71 71 1 0.302 0 0.200 0.617
## 102 9 131 131 1 0.236 0 0 0.500 71 71 1 0.226 0 0 0.500
## 102 10 131 131 1 0.154 0 0 0.200 71 71 1 0.171 0 0 0.267
## 102 11 131 131 1 0.155 0 0 0.167 71 71 1 0.225 0 0 0.500
## 102 12 131 131 1 0.223 0 0 0.481 71 71 1 0.221 0 0 0.517
## 102 99 131 131 1 0.165 0 0 0.183 71 71 1 0 0 0 0
## 103 -1 41 41 1 0.818 0.714 0.875 1 63 63 1 0.739 0.577 0.857 1
## 103 1 41 41 1 0.775 0.633 0.833 0.933 63 63 1 0.763 0.633 0.833 0.950
## 103 2 41 41 1 0.685 0.433 0.800 0.933 63 63 1 0.692 0.517 0.800 0.900
## 103 3 41 41 1 0.597 0.400 0.667 0.867 63 63 1 0.673 0.500 0.767 0.933
## 103 4 41 41 1 0.664 0.467 0.833 0.933 63 63 1 0.625 0.450 0.733 0.900
## 103 5 41 41 1 0.598 0.367 0.667 0.867 63 63 1 0.611 0.383 0.742 0.833
## 103 6 41 41 1 0.604 0.333 0.633 0.867 63 63 1 0.575 0.367 0.600 0.867
## 103 7 41 41 1 0.591 0.200 0.767 0.933 63 63 1 0.525 0.167 0.567 0.833
## 103 8 41 41 1 0.555 0.133 0.633 0.933 63 63 1 0.498 0.133 0.500 0.833
## 103 9 41 41 1 0.495 0.133 0.567 0.833 63 63 1 0.444 0.167 0.433 0.667
## 103 10 41 41 1 0.428 0.067 0.467 0.767 63 63 1 0.393 0.100 0.333 0.633
## 103 11 41 41 1 0.396 0.067 0.367 0.667 63 63 1 0.437 0.103 0.414 0.728
## 103 12 41 41 1 0.475 0.069 0.483 0.793 63 63 1 0.436 0.018 0.467 0.834
## 103 99 41 41 1 0.270 0 0 0.444 63 63 1 0 0 0 0
## 101 -1 80 80 1 0.619 0.429 0.714 0.862 63 63 1 0.623 0.402 0.714 0.857
## 101 1 80 80 1 0.619 0.367 0.700 0.867 63 63 1 0.584 0.450 0.633 0.783
## 101 2 80 80 1 0.386 0 0.317 0.733 63 63 1 0.451 0.169 0.400 0.750
## 101 3 80 80 1 0.327 0 0.167 0.608 63 63 1 0.361 0 0.333 0.667
## 101 4 80 80 1 0.310 0 0.167 0.633 63 63 1 0.269 0 0.133 0.550
## 101 5 80 80 1 0.237 0 0 0.500 63 63 1 0.216 0 0.033 0.424
## 101 6 80 80 1 0.176 0 0 0.267 63 63 1 0.138 0 0 0.167
## 101 7 80 80 1 0.154 0 0 0.167 63 63 1 0.100 0 0 0.017
## 101 8 80 80 1 0.154 0 0 0.208 63 63 1 0.138 0 0 0
## 101 9 80 80 1 0.130 0 0 0.078 63 63 1 0.131 0 0 0
## 101 10 80 80 1 0.139 0 0 0 63 63 1 0.006 0 0 0
## 101 11 80 80 1 0 0 0 0 63 63 1 0 0 0 0
## 101 12 80 80 1 0 0 0 0 63 63 1 0 0 0 0
## 101 99 80 80 1 0 0 0 0 63 63 1 0 0 0 0
## 102 -1 40 40 1 0.674 0.513 0.714 0.862 83 83 1 0.750 0.571 0.857 1
## 102 1 40 40 1 0.698 0.508 0.767 0.908 83 83 1 0.745 0.650 0.833 0.900
## 102 2 40 40 1 0.611 0.458 0.655 0.900 83 83 1 0.598 0.333 0.667 0.867
## 102 3 40 40 1 0.549 0.350 0.567 0.875 83 83 1 0.509 0.200 0.533 0.833
## 102 4 40 40 1 0.462 0.025 0.467 0.808 83 83 1 0.398 0 0.333 0.767
## 102 5 40 40 1 0.424 0.050 0.417 0.733 83 83 1 0.363 0 0.267 0.783
## 102 6 40 40 1 0.379 0 0.283 0.717 83 83 1 0.286 0 0.033 0.550
## 102 7 40 40 1 0.232 0 0.067 0.400 83 83 1 0.176 0 0 0.283
## 102 8 40 40 1 0.248 0 0 0.516 83 83 1 0.159 0 0 0.136
## 102 9 40 40 1 0.357 0 0.328 0.647 83 83 1 0.227 0 0 0.438
## 102 10 40 40 1 0.281 0 0 0.558 83 83 1 0.055 0 0 0
## 102 11 40 40 1 0 0 0 0 83 83 1 0 0 0 0
## 102 12 40 40 1 0 0 0 0 83 83 1 0 0 0 0
## 102 99 40 40 1 0 0 0 0 83 83 1 0 0 0 0
## 103 -1 63 63 1 0.744 0.571 0.857 1 107 107 1 0.766 0.625 0.857 1
## 103 1 63 63 1 0.839 0.767 0.900 0.950 107 107 1 0.781 0.733 0.867 0.933
## 103 2 63 63 1 0.740 0.617 0.767 0.933 107 107 1 0.692 0.567 0.733 0.900
## 103 3 63 63 1 0.706 0.533 0.767 0.900 107 107 1 0.615 0.433 0.667 0.833
## 103 4 63 63 1 0.668 0.500 0.733 0.883 107 107 1 0.593 0.400 0.600 0.800
## 103 5 63 63 1 0.604 0.383 0.667 0.850 107 107 1 0.532 0.233 0.567 0.800
## 103 6 63 63 1 0.498 0.300 0.533 0.733 107 107 1 0.450 0.167 0.433 0.733
## 103 7 63 63 1 0.530 0.350 0.567 0.767 107 107 1 0.409 0.067 0.400 0.667
## 103 8 63 63 1 0.464 0.233 0.500 0.683 107 107 1 0.420 0.133 0.367 0.655
## 103 9 63 63 1 0.495 0.241 0.483 0.724 107 107 1 0.453 0.127 0.476 0.740
## 103 10 63 63 1 0.442 0.088 0.417 0.743 107 107 1 0.066 0 0 0
## 103 11 63 63 1 0 0 0 0 107 107 1 0 0 0 0
## 103 12 63 63 1 0 0 0 0 107 107 1 0 0 0 0
## 103 99 63 63 1 0 0 0 0 107 107 1 0 0 0 0
## ---------------------------------------------------------------------------------------------
ses_focal.gp2.pvt = ses_focal.gp2[ses_focal.gp2$active==1,] %>% group_by(change,period,mon=month_contract) %>% mutate(nusers=sum(active)) %>% group_by(change,period) %>% mutate(ini_users=max(nusers),retention=nusers/ini_users) %>% group_by(change,period,mon,ini_users,nusers,retention) %>% summarise(avg.usage = mean(usagerate),Q1 = quantile(usagerate,.25),Q2=median(usagerate,.5),Q3=quantile(usagerate,.75)) %>% pivot_wider(names_from = period,values_from = c(ini_users,nusers,retention,avg.usage,Q1,Q2,Q3))
## `summarise()` has grouped output by 'change', 'period', 'mon', 'ini_users',
## 'nusers'. You can override using the `.groups` argument.
ses_focal.gp2.pvt = ses_focal.gp2.pvt %>% select(change,mon,ends_with('before'),ends_with('after'))
#ses_focal.gp2.pvt[,c(5:9,12:16)] = lapply(ses_focal.gp2.pvt[,c(5:9,12:16)],function(x){round(x,2)})
names(ses_focal.gp2.pvt) = c('change','mon','maxn','n','reten','mean','Q1','Q2','Q3','maxn.a','n.a','reten.a','mean.a','Q1.a','Q2.a','Q3.a')
stargazer(subset(data.frame(ses_focal.gp2.pvt),change=='Default Change'),summary=F,type='text',rownames = F)
##
## =====================================================================================================
## change mon maxn n reten mean Q1 Q2 Q3 maxn.a n.a reten.a mean.a Q1.a Q2.a Q3.a
## -----------------------------------------------------------------------------------------------------
## Default Change -1 258 245 0.950 0.725 0.571 0.778 1 216 209 0.968 0.699 0.500 0.714 1
## Default Change 1 258 258 1 0.670 0.500 0.700 0.892 216 216 1 0.696 0.533 0.767 0.900
## Default Change 2 258 242 0.938 0.585 0.367 0.633 0.867 216 208 0.963 0.586 0.367 0.600 0.833
## Default Change 3 258 227 0.880 0.503 0.200 0.500 0.767 216 200 0.926 0.561 0.333 0.567 0.833
## Default Change 4 258 192 0.744 0.563 0.267 0.567 0.867 216 177 0.819 0.554 0.267 0.600 0.867
## Default Change 5 258 181 0.702 0.543 0.267 0.567 0.833 216 172 0.796 0.556 0.267 0.600 0.833
## Default Change 6 258 170 0.659 0.540 0.233 0.567 0.867 216 166 0.769 0.524 0.300 0.517 0.800
## Default Change 7 258 152 0.589 0.549 0.300 0.600 0.833 216 156 0.722 0.486 0.167 0.500 0.775
## Default Change 8 258 145 0.562 0.508 0.167 0.533 0.800 216 145 0.671 0.459 0.133 0.433 0.767
## Default Change 9 258 137 0.531 0.452 0.133 0.467 0.733 216 135 0.625 0.394 0.050 0.400 0.633
## Default Change 10 258 111 0.430 0.427 0.133 0.367 0.750 216 120 0.556 0.384 0.100 0.333 0.633
## Default Change 11 258 107 0.415 0.422 0.100 0.500 0.650 216 121 0.560 0.455 0.138 0.483 0.759
## Default Change 12 258 117 0.453 0.491 0.172 0.517 0.793 216 114 0.528 0.471 0.108 0.517 0.789
## Default Change 99 258 72 0.279 0.544 0.299 0.500 0.836
## -----------------------------------------------------------------------------------------------------
stargazer(subset(data.frame(ses_focal.gp2.pvt),change=='Price Change'),summary=F,type='text',rownames = F)
##
## ===================================================================================================
## change mon maxn n reten mean Q1 Q2 Q3 maxn.a n.a reten.a mean.a Q1.a Q2.a Q3.a
## ---------------------------------------------------------------------------------------------------
## Price Change -1 183 168 0.918 0.734 0.571 0.829 1 250 245 0.980 0.749 0.571 0.857 1
## Price Change 1 183 183 1 0.712 0.533 0.833 0.933 250 250 1 0.729 0.600 0.800 0.900
## Price Change 2 183 164 0.896 0.622 0.433 0.700 0.900 250 244 0.976 0.623 0.367 0.667 0.867
## Price Change 3 183 155 0.847 0.597 0.400 0.633 0.867 250 238 0.952 0.549 0.300 0.567 0.833
## Price Change 4 183 142 0.776 0.601 0.367 0.633 0.867 250 201 0.804 0.565 0.367 0.600 0.800
## Price Change 5 183 134 0.732 0.552 0.333 0.600 0.833 250 191 0.764 0.527 0.233 0.567 0.800
## Price Change 6 183 126 0.689 0.481 0.200 0.533 0.733 250 180 0.720 0.448 0.133 0.433 0.767
## Price Change 7 183 112 0.612 0.491 0.292 0.500 0.733 250 153 0.612 0.423 0.100 0.400 0.667
## Price Change 8 183 109 0.596 0.472 0.233 0.467 0.733 250 148 0.592 0.452 0.184 0.483 0.726
## Price Change 9 183 113 0.617 0.495 0.241 0.483 0.759 250 151 0.604 0.501 0.213 0.538 0.764
## Price Change 10 183 101 0.552 0.497 0.211 0.517 0.778 250 22 0.088 0.546 0.316 0.600 0.788
## ---------------------------------------------------------------------------------------------------
NO Covariates and No Matching, NO Interactions
lm1.01 = lm(usagerate~period,subset(ses_focal.gp,month_contract==1 & change=='Default Change'))
lm1.02 = lm(usagerate~period,subset(ses_focal.gp,month_contract==2 & change=='Default Change'))
lm1.03 = lm(usagerate~period,subset(ses_focal.gp,month_contract==3 & change=='Default Change'))
lm1.04 = lm(usagerate~period,subset(ses_focal.gp,month_contract==4 & change=='Default Change'))
lm1.05 = lm(usagerate~period,subset(ses_focal.gp,month_contract==5 & change=='Default Change'))
lm1.06 = lm(usagerate~period,subset(ses_focal.gp,month_contract==6 & change=='Default Change'))
lm1.07 = lm(usagerate~period,subset(ses_focal.gp,month_contract==7 & change=='Default Change'))
lm1.08 = lm(usagerate~period,subset(ses_focal.gp,month_contract==8 & change=='Default Change'))
lm1.0_none = list('m1'=lm1.01,'m2'=lm1.02,'m3'=lm1.03,'m4'=lm1.04,'m5'=lm1.05,'m6'=lm1.06,'m7'=lm1.07,'m8'=lm1.08)
modelsummary(lm1.0_none,estimate='{estimate}{stars}',stars=T,coef_omit = '^(?!period)',statistic = c('conf.int','p={p.value}'),title='Effect on Monthly Usage Rates Over Time',gof_map = 'nobs') #output='latex'
| m1 | m2 | m3 | m4 | m5 | m6 | m7 | m8 |
|---|---|---|---|---|---|---|---|---|
periodafter | 0.027 | 0.001 | 0.058+ | -0.009 | 0.012 | -0.016 | -0.064+ | -0.049 |
[-0.019, 0.072] | [-0.056, 0.057] | [-0.003, 0.118] | [-0.076, 0.058] | [-0.055, 0.080] | [-0.085, 0.053] | [-0.136, 0.009] | [-0.127, 0.028] | |
p=0.252 | p=0.978 | p=0.060 | p=0.783 | p=0.718 | p=0.650 | p=0.085 | p=0.212 | |
Num.Obs. | 474 | 450 | 427 | 369 | 353 | 336 | 308 | 290 |
lm1.01 = lm(usagerate~period*math_tarifa,subset(ses_focal.gp,month_contract==1 & change=='Default Change'))
lm1.02 = lm(usagerate~period*math_tarifa,subset(ses_focal.gp,month_contract==2 & change=='Default Change'))
lm1.03 = lm(usagerate~period*math_tarifa,subset(ses_focal.gp,month_contract==3 & change=='Default Change'))
lm1.04 = lm(usagerate~period*math_tarifa,subset(ses_focal.gp,month_contract==4 & change=='Default Change'))
lm1.05 = lm(usagerate~period*math_tarifa,subset(ses_focal.gp,month_contract==5 & change=='Default Change'))
lm1.06 = lm(usagerate~period*math_tarifa,subset(ses_focal.gp,month_contract==6 & change=='Default Change'))
lm1.07 = lm(usagerate~period*math_tarifa,subset(ses_focal.gp,month_contract==7 & change=='Default Change'))
lm1.08 = lm(usagerate~period*math_tarifa,subset(ses_focal.gp,month_contract==8 & change=='Default Change'))
lm1.0_none_int = list('m1'=lm1.01,'m2'=lm1.02,'m3'=lm1.03,'m4'=lm1.04,'m5'=lm1.05,'m6'=lm1.06,'m7'=lm1.07,'m8'=lm1.08)
modelsummary(lm1.0_none_int,estimate='{estimate}{stars}',stars=T,gof_map='nobs',coef_omit = '^(?!period)',statistic = c('conf.int','p={p.value}'),title='Effect on Monthly Usage Rates Over Time')
| m1 | m2 | m3 | m4 | m5 | m6 | m7 | m8 |
|---|---|---|---|---|---|---|---|---|
periodafter | 0.033 | 0.013 | 0.013 | -0.032 | -0.022 | -0.098 | -0.146+ | -0.099 |
[-0.041, 0.106] | [-0.082, 0.109] | [-0.098, 0.125] | [-0.152, 0.088] | [-0.150, 0.107] | [-0.239, 0.044] | [-0.293, 0.002] | [-0.260, 0.061] | |
p=0.385 | p=0.788 | p=0.811 | p=0.597 | p=0.741 | p=0.176 | p=0.053 | p=0.224 | |
periodafter × math_tarifa102 | 0.005 | -0.027 | 0.044 | 0.059 | 0.051 | 0.119 | 0.128 | 0.067 |
[-0.097, 0.107] | [-0.155, 0.101] | [-0.099, 0.187] | [-0.100, 0.219] | [-0.117, 0.218] | [-0.058, 0.296] | [-0.059, 0.316] | [-0.136, 0.270] | |
p=0.925 | p=0.681 | p=0.542 | p=0.465 | p=0.552 | p=0.187 | p=0.178 | p=0.514 | |
periodafter × math_tarifa103 | -0.045 | -0.007 | 0.063 | -0.007 | 0.035 | 0.069 | 0.080 | 0.051 |
[-0.165, 0.076] | [-0.157, 0.143] | [-0.103, 0.228] | [-0.181, 0.167] | [-0.145, 0.216] | [-0.121, 0.258] | [-0.115, 0.275] | [-0.158, 0.259] | |
p=0.469 | p=0.927 | p=0.455 | p=0.937 | p=0.701 | p=0.478 | p=0.420 | p=0.633 | |
Num.Obs. | 474 | 450 | 427 | 369 | 353 | 336 | 308 | 290 |
ses_focal.gp_tr = subset(ses_focal.gp,month_contract==-1) #%>% select(-c("change","period","math_tarifa" ,"month_contract","active" ))
ses_focal.gp_tr= ses_focal.gp_tr[,c(3,6:17)]
ses_focal.gp_con = subset(ses_focal.gp,month_contract!=-1) %>% left_join(ses_focal.gp_tr,by='alumno',suffix = c('','_tr'))
#ses_focal.gp_con = ses_focal.gp_con[!is.na(ses_focal.gp_con$math_tarifa),]
ses_focal.gp_con = ses_focal.gp_con %>% left_join(contract_1st_pvt[,c('alumno','num_kid_con','rep_regist','num_uniq_kid','num_asso_kid','genero','age_cut','age_syn_ind','ad','trial_math_rec','trial_reading_rec')],by='alumno')
ses_focal.gp_con = ses_focal.gp_con %>% replace(is.na(.),0)
lm1.01 = lm(usagerate~period+usagerate_tr+correctionrate_tr+gamerate_tr+avg.efec_tr+IQR.efec_tr+med.efec_tr+avg.efec_tr+IQR.efec_tr+med.tmr_tr+avg.tmr_tr+IQR.tmr_tr+avg.problem_tr+num_kid_con+rep_regist+num_uniq_kid+num_asso_kid+genero+age_cut+age_syn_ind+ad+trial_math_rec,subset(ses_focal.gp_con,month_contract==1 & change=='Default Change'))
lm1.02 = lm(usagerate~period+usagerate_tr+correctionrate_tr+gamerate_tr+avg.efec_tr+IQR.efec_tr+med.efec_tr+avg.efec_tr+IQR.efec_tr+med.tmr_tr+avg.tmr_tr+IQR.tmr_tr+avg.problem_tr+num_kid_con+rep_regist+num_uniq_kid+num_asso_kid+genero+age_cut+age_syn_ind+ad+trial_math_rec,subset(ses_focal.gp_con,month_contract==2 & change=='Default Change'))
lm1.03 = lm(usagerate~period+usagerate_tr+correctionrate_tr+gamerate_tr+avg.efec_tr+IQR.efec_tr+med.efec_tr+avg.efec_tr+IQR.efec_tr+med.tmr_tr+avg.tmr_tr+IQR.tmr_tr+avg.problem_tr+num_kid_con+rep_regist+num_uniq_kid+num_asso_kid+genero+age_cut+age_syn_ind+ad+trial_math_rec,subset(ses_focal.gp_con,month_contract==3 & change=='Default Change'))
lm1.04 = lm(usagerate~period+usagerate_tr+correctionrate_tr+gamerate_tr+avg.efec_tr+IQR.efec_tr+med.efec_tr+avg.efec_tr+IQR.efec_tr+med.tmr_tr+avg.tmr_tr+IQR.tmr_tr+avg.problem_tr+num_kid_con+rep_regist+num_uniq_kid+num_asso_kid+genero+age_cut+age_syn_ind+ad+trial_math_rec,subset(ses_focal.gp_con,month_contract==4 & change=='Default Change'))
lm1.05 = lm(usagerate~period+usagerate_tr+correctionrate_tr+gamerate_tr+avg.efec_tr+IQR.efec_tr+med.efec_tr+avg.efec_tr+IQR.efec_tr+med.tmr_tr+avg.tmr_tr+IQR.tmr_tr+avg.problem_tr+num_kid_con+rep_regist+num_uniq_kid+num_asso_kid+genero+age_cut+age_syn_ind+ad+trial_math_rec,subset(ses_focal.gp_con,month_contract==5 & change=='Default Change'))
lm1.06 = lm(usagerate~period+usagerate_tr+correctionrate_tr+gamerate_tr+avg.efec_tr+IQR.efec_tr+med.efec_tr+avg.efec_tr+IQR.efec_tr+med.tmr_tr+avg.tmr_tr+IQR.tmr_tr+avg.problem_tr+num_kid_con+rep_regist+num_uniq_kid+num_asso_kid+genero+age_cut+age_syn_ind+ad+trial_math_rec,subset(ses_focal.gp_con,month_contract==6 & change=='Default Change'))
lm1.07 = lm(usagerate~period+usagerate_tr+correctionrate_tr+gamerate_tr+avg.efec_tr+IQR.efec_tr+med.efec_tr+avg.efec_tr+IQR.efec_tr+med.tmr_tr+avg.tmr_tr+IQR.tmr_tr+avg.problem_tr+num_kid_con+rep_regist+num_uniq_kid+num_asso_kid+genero+age_cut+age_syn_ind+ad+trial_math_rec,subset(ses_focal.gp_con,month_contract==7 & change=='Default Change'))
lm1.08 = lm(usagerate~period+usagerate_tr+correctionrate_tr+gamerate_tr+avg.efec_tr+IQR.efec_tr+med.efec_tr+avg.efec_tr+IQR.efec_tr+med.tmr_tr+avg.tmr_tr+IQR.tmr_tr+avg.problem_tr+num_kid_con+rep_regist+num_uniq_kid+num_asso_kid+genero+age_cut+age_syn_ind+ad+trial_math_rec,subset(ses_focal.gp_con,month_contract==8 & change=='Default Change'))
lm1.0_cov = list('m1'=lm1.01,'m2'=lm1.02,'m3'=lm1.03,'m4'=lm1.04,'m5'=lm1.05,'m6'=lm1.06,'m7'=lm1.07,'m8'=lm1.08)
modelsummary(lm1.0_cov,estimate='{estimate}{stars}',stars=T,gof_map = 'nobs',coef_omit = '^(?!period)',statistic = c('conf.int','p={p.value}'),title='Effect on Monthly Usage Rates Over Time')
| m1 | m2 | m3 | m4 | m5 | m6 | m7 | m8 |
|---|---|---|---|---|---|---|---|---|
periodafter | 0.031 | 0.000 | 0.055+ | 0.007 | 0.025 | -0.020 | -0.064+ | -0.049 |
[-0.008, 0.070] | [-0.050, 0.051] | [-0.002, 0.112] | [-0.057, 0.070] | [-0.041, 0.090] | [-0.087, 0.047] | [-0.135, 0.008] | [-0.126, 0.028] | |
p=0.118 | p=0.996 | p=0.060 | p=0.834 | p=0.458 | p=0.560 | p=0.080 | p=0.208 | |
Num.Obs. | 474 | 450 | 427 | 369 | 353 | 336 | 308 | 290 |
lm1.01 = lm(usagerate~period*math_tarifa+usagerate_tr+correctionrate_tr+gamerate_tr+avg.efec_tr+IQR.efec_tr+med.efec_tr+avg.efec_tr+IQR.efec_tr+med.tmr_tr+avg.tmr_tr+IQR.tmr_tr+avg.problem_tr+num_kid_con+rep_regist+num_uniq_kid+num_asso_kid+genero+age_cut+age_syn_ind+ad+trial_math_rec,subset(ses_focal.gp_con,month_contract==1 & change=='Default Change'))
lm1.02 = lm(usagerate~period*math_tarifa+usagerate_tr+correctionrate_tr+gamerate_tr+avg.efec_tr+IQR.efec_tr+med.efec_tr+avg.efec_tr+IQR.efec_tr+med.tmr_tr+avg.tmr_tr+IQR.tmr_tr+avg.problem_tr+num_kid_con+rep_regist+num_uniq_kid+num_asso_kid+genero+age_cut+age_syn_ind+ad+trial_math_rec,subset(ses_focal.gp_con,month_contract==2 & change=='Default Change'))
lm1.03 = lm(usagerate~period*math_tarifa+usagerate_tr+correctionrate_tr+gamerate_tr+avg.efec_tr+IQR.efec_tr+med.efec_tr+avg.efec_tr+IQR.efec_tr+med.tmr_tr+avg.tmr_tr+IQR.tmr_tr+avg.problem_tr+num_kid_con+rep_regist+num_uniq_kid+num_asso_kid+genero+age_cut+age_syn_ind+ad+trial_math_rec,subset(ses_focal.gp_con,month_contract==3 & change=='Default Change'))
lm1.04 = lm(usagerate~period*math_tarifa+usagerate_tr+correctionrate_tr+gamerate_tr+avg.efec_tr+IQR.efec_tr+med.efec_tr+avg.efec_tr+IQR.efec_tr+med.tmr_tr+avg.tmr_tr+IQR.tmr_tr+avg.problem_tr+num_kid_con+rep_regist+num_uniq_kid+num_asso_kid+genero+age_cut+age_syn_ind+ad+trial_math_rec,subset(ses_focal.gp_con,month_contract==4 & change=='Default Change'))
lm1.05 = lm(usagerate~period*math_tarifa+usagerate_tr+correctionrate_tr+gamerate_tr+avg.efec_tr+IQR.efec_tr+med.efec_tr+avg.efec_tr+IQR.efec_tr+med.tmr_tr+avg.tmr_tr+IQR.tmr_tr+avg.problem_tr+num_kid_con+rep_regist+num_uniq_kid+num_asso_kid+genero+age_cut+age_syn_ind+ad+trial_math_rec,subset(ses_focal.gp_con,month_contract==5 & change=='Default Change'))
lm1.06 = lm(usagerate~period*math_tarifa+usagerate_tr+correctionrate_tr+gamerate_tr+avg.efec_tr+IQR.efec_tr+med.efec_tr+avg.efec_tr+IQR.efec_tr+med.tmr_tr+avg.tmr_tr+IQR.tmr_tr+avg.problem_tr+num_kid_con+rep_regist+num_uniq_kid+num_asso_kid+genero+age_cut+age_syn_ind+ad+trial_math_rec,subset(ses_focal.gp_con,month_contract==6 & change=='Default Change'))
lm1.07 = lm(usagerate~period*math_tarifa+usagerate_tr+correctionrate_tr+gamerate_tr+avg.efec_tr+IQR.efec_tr+med.efec_tr+avg.efec_tr+IQR.efec_tr+med.tmr_tr+avg.tmr_tr+IQR.tmr_tr+avg.problem_tr+num_kid_con+rep_regist+num_uniq_kid+num_asso_kid+genero+age_cut+age_syn_ind+ad+trial_math_rec,subset(ses_focal.gp_con,month_contract==7 & change=='Default Change'))
lm1.08 = lm(usagerate~period*math_tarifa+usagerate_tr+correctionrate_tr+gamerate_tr+avg.efec_tr+IQR.efec_tr+med.efec_tr+avg.efec_tr+IQR.efec_tr+med.tmr_tr+avg.tmr_tr+IQR.tmr_tr+avg.problem_tr+num_kid_con+rep_regist+num_uniq_kid+num_asso_kid+genero+age_cut+age_syn_ind+ad+trial_math_rec,subset(ses_focal.gp_con,month_contract==8 & change=='Default Change'))
lm1.0_cov_int = list('m1'=lm1.01,'m2'=lm1.02,'m3'=lm1.03,'m4'=lm1.04,'m5'=lm1.05,'m6'=lm1.06,'m7'=lm1.07,'m8'=lm1.08)
modelsummary(lm1.0_cov_int,estimate='{estimate}{stars}',stars=T,coef_omit = '^(?!period)',statistic = c('conf.int','p={p.value}'),title='Effect on Monthly Usage Rates Over Time',gof_map = c("nobs"))#,gof_omit = '.'
| m1 | m2 | m3 | m4 | m5 | m6 | m7 | m8 |
|---|---|---|---|---|---|---|---|---|
periodafter | 0.043 | 0.013 | 0.002 | -0.020 | -0.011 | -0.112 | -0.151* | -0.102 |
[-0.022, 0.108] | [-0.074, 0.101] | [-0.104, 0.107] | [-0.134, 0.094] | [-0.134, 0.111] | [-0.246, 0.023] | [-0.293, -0.009] | [-0.260, 0.055] | |
p=0.192 | p=0.763 | p=0.977 | p=0.732 | p=0.857 | p=0.104 | p=0.037 | p=0.202 | |
periodafter × math_tarifa102 | -0.019 | -0.049 | 0.030 | 0.046 | 0.036 | 0.115 | 0.116 | 0.052 |
[-0.109, 0.070] | [-0.165, 0.067] | [-0.105, 0.165] | [-0.104, 0.197] | [-0.121, 0.193] | [-0.052, 0.281] | [-0.062, 0.294] | [-0.144, 0.248] | |
p=0.671 | p=0.407 | p=0.660 | p=0.544 | p=0.653 | p=0.177 | p=0.201 | p=0.601 | |
periodafter × math_tarifa103 | -0.018 | 0.028 | 0.108 | 0.017 | 0.062 | 0.109 | 0.120 | 0.092 |
[-0.125, 0.089] | [-0.109, 0.165] | [-0.049, 0.266] | [-0.149, 0.183] | [-0.108, 0.233] | [-0.070, 0.287] | [-0.066, 0.306] | [-0.108, 0.291] | |
p=0.735 | p=0.689 | p=0.178 | p=0.839 | p=0.473 | p=0.233 | p=0.205 | p=0.366 | |
Num.Obs. | 474 | 450 | 427 | 369 | 353 | 336 | 308 | 290 |
lm2.01 = lm(usagerate~period,subset(ses_focal.gp,month_contract==1 & change=='Price Change'))
lm2.02 = lm(usagerate~period,subset(ses_focal.gp,month_contract==2 & change=='Price Change'))
lm2.03 = lm(usagerate~period,subset(ses_focal.gp,month_contract==3 & change=='Price Change'))
lm2.04 = lm(usagerate~period,subset(ses_focal.gp,month_contract==4 & change=='Price Change'))
lm2.05 = lm(usagerate~period,subset(ses_focal.gp,month_contract==5 & change=='Price Change'))
lm2.06 = lm(usagerate~period,subset(ses_focal.gp,month_contract==6 & change=='Price Change'))
lm2.07 = lm(usagerate~period,subset(ses_focal.gp,month_contract==7 & change=='Price Change'))
lm2.08 = lm(usagerate~period,subset(ses_focal.gp,month_contract==8 & change=='Price Change'))
lm2.0_none = list('m1'=lm2.01,'m2'=lm2.02,'m3'=lm2.03,'m4'=lm2.04,'m5'=lm2.05,'m6'=lm2.06,'m7'=lm2.07,'m8'=lm2.08)
modelsummary(lm2.0_none,estimate='{estimate}{stars}',stars=T,coef_omit = '^(?!period)',statistic = c('conf.int','p={p.value}'),title='Effect on Monthly Usage Rates Over Time',gof_map = c("nobs"))#,gof_omit = '.'
| m1 | m2 | m3 | m4 | m5 | m6 | m7 | m8 |
|---|---|---|---|---|---|---|---|---|
periodafter | 0.017 | 0.002 | -0.048 | -0.036 | -0.025 | -0.034 | -0.068+ | -0.021 |
[-0.032, 0.066] | [-0.058, 0.062] | [-0.112, 0.016] | [-0.100, 0.028] | [-0.095, 0.045] | [-0.108, 0.041] | [-0.143, 0.007] | [-0.098, 0.056] | |
p=0.499 | p=0.952 | p=0.144 | p=0.269 | p=0.486 | p=0.377 | p=0.077 | p=0.596 | |
Num.Obs. | 433 | 408 | 393 | 343 | 325 | 306 | 265 | 257 |
lm2.01 = lm(usagerate~period*math_tarifa,subset(ses_focal.gp,month_contract==1 & change=='Price Change'))
lm2.02 = lm(usagerate~period*math_tarifa,subset(ses_focal.gp,month_contract==2 & change=='Price Change'))
lm2.03 = lm(usagerate~period*math_tarifa,subset(ses_focal.gp,month_contract==3 & change=='Price Change'))
lm2.04 = lm(usagerate~period*math_tarifa,subset(ses_focal.gp,month_contract==4 & change=='Price Change'))
lm2.05 = lm(usagerate~period*math_tarifa,subset(ses_focal.gp,month_contract==5 & change=='Price Change'))
lm2.06 = lm(usagerate~period*math_tarifa,subset(ses_focal.gp,month_contract==6 & change=='Price Change'))
lm2.07 = lm(usagerate~period*math_tarifa,subset(ses_focal.gp,month_contract==7 & change=='Price Change'))
lm2.08 = lm(usagerate~period*math_tarifa,subset(ses_focal.gp,month_contract==8 & change=='Price Change'))
lm2.0_none_int = list('m1'=lm2.01,'m2'=lm2.02,'m3'=lm2.03,'m4'=lm2.04,'m5'=lm2.05,'m6'=lm2.06,'m7'=lm2.07,'m8'=lm2.08)
#library(marginaleffects)
#mfx = marginaleffects(lm2.01)
#modelsummary(mfx,shape=term:contrast~model)
modelsummary(lm2.0_none_int,estimate='{estimate}{stars}',stars=T,coef_omit = '^(?!period)',statistic = c('conf.int','p={p.value}'),title='Effect on Monthly Usage Rates Over Time',gof_map = c("nobs"))#,gof_omit = '.'
| m1 | m2 | m3 | m4 | m5 | m6 | m7 | m8 |
|---|---|---|---|---|---|---|---|---|
periodafter | -0.025 | 0.020 | -0.020 | -0.059 | -0.074 | -0.068 | -0.065 | 0.027 |
[-0.106, 0.056] | [-0.088, 0.128] | [-0.140, 0.101] | [-0.183, 0.065] | [-0.216, 0.069] | [-0.233, 0.098] | [-0.240, 0.110] | [-0.160, 0.215] | |
p=0.540 | p=0.714 | p=0.750 | p=0.348 | p=0.311 | p=0.421 | p=0.464 | p=0.774 | |
periodafter × math_tarifa102 | 0.081 | -0.033 | -0.020 | 0.054 | 0.113 | 0.070 | 0.114 | 0.009 |
[-0.041, 0.204] | [-0.188, 0.122] | [-0.187, 0.147] | [-0.125, 0.232] | [-0.085, 0.311] | [-0.150, 0.290] | [-0.128, 0.356] | [-0.249, 0.267] | |
p=0.193 | p=0.677 | p=0.812 | p=0.556 | p=0.261 | p=0.532 | p=0.353 | p=0.945 | |
periodafter × math_tarifa103 | -0.026 | -0.068 | -0.083 | -0.026 | 0.007 | -0.002 | -0.076 | -0.078 |
[-0.137, 0.086] | [-0.210, 0.073] | [-0.237, 0.071] | [-0.180, 0.128] | [-0.166, 0.181] | [-0.197, 0.194] | [-0.276, 0.125] | [-0.291, 0.134] | |
p=0.651 | p=0.342 | p=0.291 | p=0.741 | p=0.934 | p=0.986 | p=0.458 | p=0.468 | |
Num.Obs. | 433 | 408 | 393 | 343 | 325 | 306 | 265 | 257 |
lm2.01 = lm(usagerate~period+usagerate_tr+correctionrate_tr+gamerate_tr+avg.efec_tr+IQR.efec_tr+med.efec_tr+avg.efec_tr+IQR.efec_tr+med.tmr_tr+avg.tmr_tr+IQR.tmr_tr+avg.problem_tr+num_kid_con+rep_regist+num_uniq_kid+num_asso_kid+genero+age_cut+age_syn_ind+ad+trial_math_rec,subset(ses_focal.gp_con,month_contract==1 & change=='Price Change'))
lm2.02 = lm(usagerate~period+usagerate_tr+correctionrate_tr+gamerate_tr+avg.efec_tr+IQR.efec_tr+med.efec_tr+avg.efec_tr+IQR.efec_tr+med.tmr_tr+avg.tmr_tr+IQR.tmr_tr+avg.problem_tr+num_kid_con+rep_regist+num_uniq_kid+num_asso_kid+genero+age_cut+age_syn_ind+ad+trial_math_rec,subset(ses_focal.gp_con,month_contract==2 & change=='Price Change'))
lm2.03 = lm(usagerate~period+usagerate_tr+correctionrate_tr+gamerate_tr+avg.efec_tr+IQR.efec_tr+med.efec_tr+avg.efec_tr+IQR.efec_tr+med.tmr_tr+avg.tmr_tr+IQR.tmr_tr+avg.problem_tr+num_kid_con+rep_regist+num_uniq_kid+num_asso_kid+genero+age_cut+age_syn_ind+ad+trial_math_rec,subset(ses_focal.gp_con,month_contract==3 & change=='Price Change'))
lm2.04 = lm(usagerate~period+usagerate_tr+correctionrate_tr+gamerate_tr+avg.efec_tr+IQR.efec_tr+med.efec_tr+avg.efec_tr+IQR.efec_tr+med.tmr_tr+avg.tmr_tr+IQR.tmr_tr+avg.problem_tr+num_kid_con+rep_regist+num_uniq_kid+num_asso_kid+genero+age_cut+age_syn_ind+ad+trial_math_rec,subset(ses_focal.gp_con,month_contract==4 & change=='Price Change'))
lm2.05 = lm(usagerate~period+usagerate_tr+correctionrate_tr+gamerate_tr+avg.efec_tr+IQR.efec_tr+med.efec_tr+avg.efec_tr+IQR.efec_tr+med.tmr_tr+avg.tmr_tr+IQR.tmr_tr+avg.problem_tr+num_kid_con+rep_regist+num_uniq_kid+num_asso_kid+genero+age_cut+age_syn_ind+ad+trial_math_rec,subset(ses_focal.gp_con,month_contract==5 & change=='Price Change'))
lm2.06 = lm(usagerate~period+usagerate_tr+correctionrate_tr+gamerate_tr+avg.efec_tr+IQR.efec_tr+med.efec_tr+avg.efec_tr+IQR.efec_tr+med.tmr_tr+avg.tmr_tr+IQR.tmr_tr+avg.problem_tr+num_kid_con+rep_regist+num_uniq_kid+num_asso_kid+genero+age_cut+age_syn_ind+ad+trial_math_rec,subset(ses_focal.gp_con,month_contract==6 & change=='Price Change'))
lm2.07 = lm(usagerate~period+usagerate_tr+correctionrate_tr+gamerate_tr+avg.efec_tr+IQR.efec_tr+med.efec_tr+avg.efec_tr+IQR.efec_tr+med.tmr_tr+avg.tmr_tr+IQR.tmr_tr+avg.problem_tr+num_kid_con+rep_regist+num_uniq_kid+num_asso_kid+genero+age_cut+age_syn_ind+ad+trial_math_rec,subset(ses_focal.gp_con,month_contract==7 & change=='Price Change'))
lm2.08 = lm(usagerate~period+usagerate_tr+correctionrate_tr+gamerate_tr+avg.efec_tr+IQR.efec_tr+med.efec_tr+avg.efec_tr+IQR.efec_tr+med.tmr_tr+avg.tmr_tr+IQR.tmr_tr+avg.problem_tr+num_kid_con+rep_regist+num_uniq_kid+num_asso_kid+genero+age_cut+age_syn_ind+ad+trial_math_rec,subset(ses_focal.gp_con,month_contract==8 & change=='Price Change'))
lm2.0_cov = list('m1'=lm2.01,'m2'=lm2.02,'m3'=lm2.03,'m4'=lm2.04,'m5'=lm2.05,'m6'=lm2.06,'m7'=lm2.07,'m8'=lm2.08)
modelsummary(lm2.0_cov,estimate='{estimate}{stars}',stars=T,coef_omit = '^(?!period)',statistic = c('conf.int','p={p.value}'),title='Price Change: Covariates & No Interaction',gof_map = c("nobs"))#,gof_omit = '.'
| m1 | m2 | m3 | m4 | m5 | m6 | m7 | m8 |
|---|---|---|---|---|---|---|---|---|
periodafter | 0.004 | -0.004 | -0.049 | -0.043 | -0.032 | -0.055 | -0.070+ | -0.033 |
[-0.042, 0.050] | [-0.062, 0.054] | [-0.111, 0.013] | [-0.106, 0.020] | [-0.102, 0.037] | [-0.131, 0.021] | [-0.148, 0.008] | [-0.112, 0.045] | |
p=0.863 | p=0.896 | p=0.121 | p=0.182 | p=0.362 | p=0.152 | p=0.079 | p=0.403 | |
Num.Obs. | 433 | 408 | 393 | 343 | 325 | 306 | 265 | 257 |
lm2.01 = lm(usagerate~period*math_tarifa+usagerate_tr+correctionrate_tr+gamerate_tr+avg.efec_tr+IQR.efec_tr+med.efec_tr+avg.efec_tr+IQR.efec_tr+med.tmr_tr+avg.tmr_tr+IQR.tmr_tr+avg.problem_tr+num_kid_con+rep_regist+num_uniq_kid+num_asso_kid+genero+age_cut+age_syn_ind+ad+trial_math_rec,subset(ses_focal.gp_con,month_contract==1 & change=='Price Change'))
lm2.02 = lm(usagerate~period*math_tarifa+usagerate_tr+correctionrate_tr+gamerate_tr+avg.efec_tr+IQR.efec_tr+med.efec_tr+avg.efec_tr+IQR.efec_tr+med.tmr_tr+avg.tmr_tr+IQR.tmr_tr+avg.problem_tr+num_kid_con+rep_regist+num_uniq_kid+num_asso_kid+genero+age_cut+age_syn_ind+ad+trial_math_rec,subset(ses_focal.gp_con,month_contract==2 & change=='Price Change'))
lm2.03 = lm(usagerate~period*math_tarifa+usagerate_tr+correctionrate_tr+gamerate_tr+avg.efec_tr+IQR.efec_tr+med.efec_tr+avg.efec_tr+IQR.efec_tr+med.tmr_tr+avg.tmr_tr+IQR.tmr_tr+avg.problem_tr+num_kid_con+rep_regist+num_uniq_kid+num_asso_kid+genero+age_cut+age_syn_ind+ad+trial_math_rec,subset(ses_focal.gp_con,month_contract==3 & change=='Price Change'))
lm2.04 = lm(usagerate~period*math_tarifa+usagerate_tr+correctionrate_tr+gamerate_tr+avg.efec_tr+IQR.efec_tr+med.efec_tr+avg.efec_tr+IQR.efec_tr+med.tmr_tr+avg.tmr_tr+IQR.tmr_tr+avg.problem_tr+num_kid_con+rep_regist+num_uniq_kid+num_asso_kid+genero+age_cut+age_syn_ind+ad+trial_math_rec,subset(ses_focal.gp_con,month_contract==4 & change=='Price Change'))
lm2.05 = lm(usagerate~period*math_tarifa+usagerate_tr+correctionrate_tr+gamerate_tr+avg.efec_tr+IQR.efec_tr+med.efec_tr+avg.efec_tr+IQR.efec_tr+med.tmr_tr+avg.tmr_tr+IQR.tmr_tr+avg.problem_tr+num_kid_con+rep_regist+num_uniq_kid+num_asso_kid+genero+age_cut+age_syn_ind+ad+trial_math_rec,subset(ses_focal.gp_con,month_contract==5 & change=='Price Change'))
lm2.06 = lm(usagerate~period*math_tarifa+usagerate_tr+correctionrate_tr+gamerate_tr+avg.efec_tr+IQR.efec_tr+med.efec_tr+avg.efec_tr+IQR.efec_tr+med.tmr_tr+avg.tmr_tr+IQR.tmr_tr+avg.problem_tr+num_kid_con+rep_regist+num_uniq_kid+num_asso_kid+genero+age_cut+age_syn_ind+ad+trial_math_rec,subset(ses_focal.gp_con,month_contract==6 & change=='Price Change'))
lm2.07 = lm(usagerate~period*math_tarifa+usagerate_tr+correctionrate_tr+gamerate_tr+avg.efec_tr+IQR.efec_tr+med.efec_tr+avg.efec_tr+IQR.efec_tr+med.tmr_tr+avg.tmr_tr+IQR.tmr_tr+avg.problem_tr+num_kid_con+rep_regist+num_uniq_kid+num_asso_kid+genero+age_cut+age_syn_ind+ad+trial_math_rec,subset(ses_focal.gp_con,month_contract==7 & change=='Price Change'))
lm2.08 = lm(usagerate~period*math_tarifa+usagerate_tr+correctionrate_tr+gamerate_tr+avg.efec_tr+IQR.efec_tr+med.efec_tr+avg.efec_tr+IQR.efec_tr+med.tmr_tr+avg.tmr_tr+IQR.tmr_tr+avg.problem_tr+num_kid_con+rep_regist+num_uniq_kid+num_asso_kid+genero+age_cut+age_syn_ind+ad+trial_math_rec,subset(ses_focal.gp_con,month_contract==8 & change=='Price Change'))
lm2.0_cov_int = list('m1'=lm2.01,'m2'=lm2.02,'m3'=lm2.03,'m4'=lm2.04,'m5'=lm2.05,'m6'=lm2.06,'m7'=lm2.07,'m8'=lm2.08)
modelsummary(lm2.0_cov_int,estimate='{estimate}{stars}',stars=T,coef_omit = '^(?!period)',statistic = c('conf.int','p={p.value}'),title='Price Change: With Covariates & Interaction',gof_map = c("nobs"))
| m1 | m2 | m3 | m4 | m5 | m6 | m7 | m8 |
|---|---|---|---|---|---|---|---|---|
periodafter | -0.001 | 0.054 | 0.003 | -0.054 | -0.061 | -0.068 | -0.049 | -0.003 |
[-0.078, 0.076] | [-0.052, 0.160] | [-0.117, 0.122] | [-0.179, 0.072] | [-0.205, 0.083] | [-0.237, 0.101] | [-0.233, 0.135] | [-0.195, 0.190] | |
p=0.979 | p=0.317 | p=0.967 | p=0.401 | p=0.407 | p=0.429 | p=0.601 | p=0.979 | |
periodafter × math_tarifa102 | 0.024 | -0.094 | -0.060 | 0.026 | 0.063 | 0.035 | 0.066 | 0.030 |
[-0.091, 0.139] | [-0.245, 0.056] | [-0.225, 0.105] | [-0.153, 0.205] | [-0.135, 0.261] | [-0.187, 0.257] | [-0.187, 0.320] | [-0.233, 0.293] | |
p=0.680 | p=0.219 | p=0.473 | p=0.773 | p=0.532 | p=0.757 | p=0.607 | p=0.822 | |
periodafter × math_tarifa103 | -0.066 | -0.112 | -0.099 | -0.021 | -0.001 | -0.019 | -0.084 | -0.049 |
[-0.171, 0.039] | [-0.251, 0.027] | [-0.251, 0.054] | [-0.176, 0.135] | [-0.175, 0.174] | [-0.217, 0.178] | [-0.292, 0.125] | [-0.266, 0.167] | |
p=0.217 | p=0.114 | p=0.203 | p=0.793 | p=0.994 | p=0.850 | p=0.432 | p=0.656 | |
Num.Obs. | 433 | 408 | 393 | 343 | 325 | 306 | 265 | 257 |
NO Covariates and No Matching, NO Interactions
lm1.01 = lm(usagerate~period,subset(ses_focal.gp2,month_contract==1 & change=='Default Change'))
lm1.02 = lm(usagerate~period,subset(ses_focal.gp2,month_contract==2 & change=='Default Change'))
lm1.03 = lm(usagerate~period,subset(ses_focal.gp2,month_contract==3 & change=='Default Change'))
lm1.04 = lm(usagerate~period,subset(ses_focal.gp2,month_contract==4 & change=='Default Change'))
lm1.05 = lm(usagerate~period,subset(ses_focal.gp2,month_contract==5 & change=='Default Change'))
lm1.06 = lm(usagerate~period,subset(ses_focal.gp2,month_contract==6 & change=='Default Change'))
lm1.07 = lm(usagerate~period,subset(ses_focal.gp2,month_contract==7 & change=='Default Change'))
lm1.08 = lm(usagerate~period,subset(ses_focal.gp2,month_contract==8 & change=='Default Change'))
lm1.1_none = list('m1'=lm1.01,'m2'=lm1.02,'m3'=lm1.03,'m4'=lm1.04,'m5'=lm1.05,'m6'=lm1.06,'m7'=lm1.07,'m8'=lm1.08)
modelsummary(lm1.1_none,estimate='{estimate}{stars}',stars=T,coef_omit = '^(?!period)',statistic = c('conf.int','p={p.value}'),title='Effect on Monthly Usage Rates Over Time',gof_map='nobs') #output='latex',gof_omit = '.'
| m1 | m2 | m3 | m4 | m5 | m6 | m7 | m8 |
|---|---|---|---|---|---|---|---|---|
periodafter | 0.029 | 0.018 | 0.079* | 0.036 | 0.063+ | 0.048 | 0.028 | 0.023 |
[-0.017, 0.075] | [-0.041, 0.076] | [0.017, 0.140] | [-0.031, 0.103] | [-0.004, 0.129] | [-0.017, 0.114] | [-0.037, 0.093] | [-0.040, 0.087] | |
p=0.212 | p=0.557 | p=0.012 | p=0.286 | p=0.063 | p=0.149 | p=0.394 | p=0.471 | |
Num.Obs. | 475 | 475 | 475 | 475 | 475 | 475 | 475 | 475 |
lm1.01 = lm(usagerate~period*math_tarifa,subset(ses_focal.gp2,month_contract==1 & change=='Default Change'))
lm1.02 = lm(usagerate~period*math_tarifa,subset(ses_focal.gp2,month_contract==2 & change=='Default Change'))
lm1.03 = lm(usagerate~period*math_tarifa,subset(ses_focal.gp2,month_contract==3 & change=='Default Change'))
lm1.04 = lm(usagerate~period*math_tarifa,subset(ses_focal.gp2,month_contract==4 & change=='Default Change'))
lm1.05 = lm(usagerate~period*math_tarifa,subset(ses_focal.gp2,month_contract==5 & change=='Default Change'))
lm1.06 = lm(usagerate~period*math_tarifa,subset(ses_focal.gp2,month_contract==6 & change=='Default Change'))
lm1.07 = lm(usagerate~period*math_tarifa,subset(ses_focal.gp2,month_contract==7 & change=='Default Change'))
lm1.08 = lm(usagerate~period*math_tarifa,subset(ses_focal.gp2,month_contract==8 & change=='Default Change'))
lm1.1_none_int = list('m1'=lm1.01,'m2'=lm1.02,'m3'=lm1.03,'m4'=lm1.04,'m5'=lm1.05,'m6'=lm1.06,'m7'=lm1.07,'m8'=lm1.08)
modelsummary(lm1.1_none_int,estimate='{estimate}{stars}',stars=T,gof_omit = '.',coef_omit = '^(?!period)',statistic = c('conf.int','p={p.value}'),title='Default Change: No Covariates & Interaction with Contract Type')
| m1 | m2 | m3 | m4 | m5 | m6 | m7 | m8 |
|---|---|---|---|---|---|---|---|---|
periodafter | 0.033 | 0.052 | 0.083+ | 0.040 | 0.062 | 0.049 | 0.014 | 0.000 |
[-0.041, 0.107] | [-0.040, 0.143] | [-0.014, 0.179] | [-0.066, 0.145] | [-0.044, 0.167] | [-0.054, 0.152] | [-0.088, 0.116] | [-0.100, 0.099] | |
p=0.388 | p=0.266 | p=0.092 | p=0.460 | p=0.250 | p=0.350 | p=0.792 | p=0.994 | |
periodafter × math_tarifa102 | 0.010 | -0.061 | -0.021 | -0.012 | -0.017 | -0.007 | 0.021 | 0.025 |
[-0.092, 0.113] | [-0.188, 0.066] | [-0.155, 0.112] | [-0.158, 0.134] | [-0.163, 0.129] | [-0.150, 0.136] | [-0.121, 0.162] | [-0.113, 0.163] | |
p=0.845 | p=0.346 | p=0.757 | p=0.869 | p=0.821 | p=0.923 | p=0.775 | p=0.725 | |
periodafter × math_tarifa103 | -0.045 | -0.046 | -0.006 | -0.079 | -0.048 | -0.078 | -0.079 | -0.056 |
[-0.166, 0.077] | [-0.196, 0.105] | [-0.165, 0.152] | [-0.252, 0.094] | [-0.222, 0.125] | [-0.247, 0.091] | [-0.247, 0.088] | [-0.220, 0.107] | |
p=0.472 | p=0.550 | p=0.937 | p=0.371 | p=0.585 | p=0.366 | p=0.353 | p=0.498 |
#comback…#
ses_focal.gp2_tr = subset(ses_focal.gp2,month_contract==-1)
ses_focal.gp2_tr= ses_focal.gp2_tr[,c(3,6:17)]
ses_focal.gp2_con = subset(ses_focal.gp2,month_contract!=-1) %>% right_join(ses_focal.gp2_tr,by='alumno',suffix = c('','_tr'))
ses_focal.gp2_con = ses_focal.gp2_con %>% left_join(contract_1st_pvt[,c('alumno','num_kid_con','rep_regist','num_uniq_kid','num_asso_kid','genero','age_cut','age_syn_ind','ad','trial_math_rec','trial_reading_rec')],by='alumno')
ses_focal.gp2_con = ses_focal.gp2_con %>% replace(is.na(.),0)
lm1.01 = lm(usagerate~period+usagerate_tr+correctionrate_tr+gamerate_tr+avg.efec_tr+IQR.efec_tr+med.efec_tr+avg.efec_tr+IQR.efec_tr+med.tmr_tr+avg.tmr_tr+IQR.tmr_tr+avg.problem_tr+num_kid_con+rep_regist+num_uniq_kid+num_asso_kid+genero+age_cut+age_syn_ind+ad+trial_math_rec,subset(ses_focal.gp2_con,month_contract==1 & change=='Default Change'))
lm1.02 = lm(usagerate~period+usagerate_tr+correctionrate_tr+gamerate_tr+avg.efec_tr+IQR.efec_tr+med.efec_tr+avg.efec_tr+IQR.efec_tr+med.tmr_tr+avg.tmr_tr+IQR.tmr_tr+avg.problem_tr+num_kid_con+rep_regist+num_uniq_kid+num_asso_kid+genero+age_cut+age_syn_ind+ad+trial_math_rec,subset(ses_focal.gp2_con,month_contract==2 & change=='Default Change'))
lm1.03 = lm(usagerate~period+usagerate_tr+correctionrate_tr+gamerate_tr+avg.efec_tr+IQR.efec_tr+med.efec_tr+avg.efec_tr+IQR.efec_tr+med.tmr_tr+avg.tmr_tr+IQR.tmr_tr+avg.problem_tr+num_kid_con+rep_regist+num_uniq_kid+num_asso_kid+genero+age_cut+age_syn_ind+ad+trial_math_rec,subset(ses_focal.gp2_con,month_contract==3 & change=='Default Change'))
lm1.04 = lm(usagerate~period+usagerate_tr+correctionrate_tr+gamerate_tr+avg.efec_tr+IQR.efec_tr+med.efec_tr+avg.efec_tr+IQR.efec_tr+med.tmr_tr+avg.tmr_tr+IQR.tmr_tr+avg.problem_tr+num_kid_con+rep_regist+num_uniq_kid+num_asso_kid+genero+age_cut+age_syn_ind+ad+trial_math_rec,subset(ses_focal.gp2_con,month_contract==4 & change=='Default Change'))
lm1.05 = lm(usagerate~period+usagerate_tr+correctionrate_tr+gamerate_tr+avg.efec_tr+IQR.efec_tr+med.efec_tr+avg.efec_tr+IQR.efec_tr+med.tmr_tr+avg.tmr_tr+IQR.tmr_tr+avg.problem_tr+num_kid_con+rep_regist+num_uniq_kid+num_asso_kid+genero+age_cut+age_syn_ind+ad+trial_math_rec,subset(ses_focal.gp2_con,month_contract==5 & change=='Default Change'))
lm1.06 = lm(usagerate~period+usagerate_tr+correctionrate_tr+gamerate_tr+avg.efec_tr+IQR.efec_tr+med.efec_tr+avg.efec_tr+IQR.efec_tr+med.tmr_tr+avg.tmr_tr+IQR.tmr_tr+avg.problem_tr+num_kid_con+rep_regist+num_uniq_kid+num_asso_kid+genero+age_cut+age_syn_ind+ad+trial_math_rec,subset(ses_focal.gp2_con,month_contract==6 & change=='Default Change'))
lm1.07 = lm(usagerate~period+usagerate_tr+correctionrate_tr+gamerate_tr+avg.efec_tr+IQR.efec_tr+med.efec_tr+avg.efec_tr+IQR.efec_tr+med.tmr_tr+avg.tmr_tr+IQR.tmr_tr+avg.problem_tr+num_kid_con+rep_regist+num_uniq_kid+num_asso_kid+genero+age_cut+age_syn_ind+ad+trial_math_rec,subset(ses_focal.gp2_con,month_contract==7 & change=='Default Change'))
lm1.08 = lm(usagerate~period+usagerate_tr+correctionrate_tr+gamerate_tr+avg.efec_tr+IQR.efec_tr+med.efec_tr+avg.efec_tr+IQR.efec_tr+med.tmr_tr+avg.tmr_tr+IQR.tmr_tr+avg.problem_tr+num_kid_con+rep_regist+num_uniq_kid+num_asso_kid+genero+age_cut+age_syn_ind+ad+trial_math_rec,subset(ses_focal.gp2_con,month_contract==8 & change=='Default Change'))
lm1.1_cov = list('m1'=lm1.01,'m2'=lm1.02,'m3'=lm1.03,'m4'=lm1.04,'m5'=lm1.05,'m6'=lm1.06,'m7'=lm1.07,'m8'=lm1.08)
modelsummary(lm1.1_cov,estimate='{estimate}{stars}',stars=T,gof_map='nobs',coef_omit = '^(?!period)',statistic = c('conf.int','p={p.value}'),title='Default Change: Covariates & No Interaction')
| m1 | m2 | m3 | m4 | m5 | m6 | m7 | m8 |
|---|---|---|---|---|---|---|---|---|
periodafter | 0.032 | 0.020 | 0.084** | 0.048 | 0.073* | 0.052 | 0.035 | 0.034 |
[-0.007, 0.071] | [-0.033, 0.073] | [0.026, 0.142] | [-0.017, 0.112] | [0.010, 0.137] | [-0.011, 0.116] | [-0.028, 0.098] | [-0.029, 0.096] | |
p=0.106 | p=0.450 | p=0.005 | p=0.145 | p=0.024 | p=0.104 | p=0.272 | p=0.294 | |
Num.Obs. | 475 | 475 | 475 | 475 | 475 | 475 | 475 | 475 |
lm1.01 = lm(usagerate~period*math_tarifa+usagerate_tr+correctionrate_tr+gamerate_tr+avg.efec_tr+IQR.efec_tr+med.efec_tr+avg.efec_tr+IQR.efec_tr+med.tmr_tr+avg.tmr_tr+IQR.tmr_tr+avg.problem_tr+num_kid_con+rep_regist+num_uniq_kid+num_asso_kid+genero+age_cut+age_syn_ind+ad+trial_math_rec,subset(ses_focal.gp2_con,month_contract==1 & change=='Default Change'))
lm1.02 = lm(usagerate~period*math_tarifa+usagerate_tr+correctionrate_tr+gamerate_tr+avg.efec_tr+IQR.efec_tr+med.efec_tr+avg.efec_tr+IQR.efec_tr+med.tmr_tr+avg.tmr_tr+IQR.tmr_tr+avg.problem_tr+num_kid_con+rep_regist+num_uniq_kid+num_asso_kid+genero+age_cut+age_syn_ind+ad+trial_math_rec,subset(ses_focal.gp2_con,month_contract==2 & change=='Default Change'))
lm1.03 = lm(usagerate~period*math_tarifa+usagerate_tr+correctionrate_tr+gamerate_tr+avg.efec_tr+IQR.efec_tr+med.efec_tr+avg.efec_tr+IQR.efec_tr+med.tmr_tr+avg.tmr_tr+IQR.tmr_tr+avg.problem_tr+num_kid_con+rep_regist+num_uniq_kid+num_asso_kid+genero+age_cut+age_syn_ind+ad+trial_math_rec,subset(ses_focal.gp2_con,month_contract==3 & change=='Default Change'))
lm1.04 = lm(usagerate~period*math_tarifa+usagerate_tr+correctionrate_tr+gamerate_tr+avg.efec_tr+IQR.efec_tr+med.efec_tr+avg.efec_tr+IQR.efec_tr+med.tmr_tr+avg.tmr_tr+IQR.tmr_tr+avg.problem_tr+num_kid_con+rep_regist+num_uniq_kid+num_asso_kid+genero+age_cut+age_syn_ind+ad+trial_math_rec,subset(ses_focal.gp2_con,month_contract==4 & change=='Default Change'))
lm1.05 = lm(usagerate~period*math_tarifa+usagerate_tr+correctionrate_tr+gamerate_tr+avg.efec_tr+IQR.efec_tr+med.efec_tr+avg.efec_tr+IQR.efec_tr+med.tmr_tr+avg.tmr_tr+IQR.tmr_tr+avg.problem_tr+num_kid_con+rep_regist+num_uniq_kid+num_asso_kid+genero+age_cut+age_syn_ind+ad+trial_math_rec,subset(ses_focal.gp2_con,month_contract==5 & change=='Default Change'))
lm1.06 = lm(usagerate~period*math_tarifa+usagerate_tr+correctionrate_tr+gamerate_tr+avg.efec_tr+IQR.efec_tr+med.efec_tr+avg.efec_tr+IQR.efec_tr+med.tmr_tr+avg.tmr_tr+IQR.tmr_tr+avg.problem_tr+num_kid_con+rep_regist+num_uniq_kid+num_asso_kid+genero+age_cut+age_syn_ind+ad+trial_math_rec,subset(ses_focal.gp2_con,month_contract==6 & change=='Default Change'))
lm1.07 = lm(usagerate~period*math_tarifa+usagerate_tr+correctionrate_tr+gamerate_tr+avg.efec_tr+IQR.efec_tr+med.efec_tr+avg.efec_tr+IQR.efec_tr+med.tmr_tr+avg.tmr_tr+IQR.tmr_tr+avg.problem_tr+num_kid_con+rep_regist+num_uniq_kid+num_asso_kid+genero+age_cut+age_syn_ind+ad+trial_math_rec,subset(ses_focal.gp2_con,month_contract==7 & change=='Default Change'))
lm1.08 = lm(usagerate~period*math_tarifa+usagerate_tr+correctionrate_tr+gamerate_tr+avg.efec_tr+IQR.efec_tr+med.efec_tr+avg.efec_tr+IQR.efec_tr+med.tmr_tr+avg.tmr_tr+IQR.tmr_tr+avg.problem_tr+num_kid_con+rep_regist+num_uniq_kid+num_asso_kid+genero+age_cut+age_syn_ind+ad+trial_math_rec,subset(ses_focal.gp2_con,month_contract==8 & change=='Default Change'))
lm1.1_cov_int = list('m1'=lm1.01,'m2'=lm1.02,'m3'=lm1.03,'m4'=lm1.04,'m5'=lm1.05,'m6'=lm1.06,'m7'=lm1.07,'m8'=lm1.08)
modelsummary(lm1.1_cov_int,estimate='{estimate}{stars}',stars=T,coef_omit = '^(?!period)',statistic = c('conf.int','p={p.value}'),title='Default Change: Covariates & Interaction with Contract Type',gof_map = c("nobs"))#,gof_omit = '.'
| m1 | m2 | m3 | m4 | m5 | m6 | m7 | m8 |
|---|---|---|---|---|---|---|---|---|
periodafter | 0.043 | 0.055 | 0.085+ | 0.047 | 0.068 | 0.043 | 0.005 | 0.000 |
[-0.022, 0.108] | [-0.030, 0.140] | [-0.009, 0.178] | [-0.057, 0.151] | [-0.036, 0.171] | [-0.058, 0.145] | [-0.096, 0.106] | [-0.101, 0.100] | |
p=0.195 | p=0.207 | p=0.076 | p=0.370 | p=0.200 | p=0.401 | p=0.917 | p=0.993 | |
periodafter × math_tarifa102 | -0.017 | -0.085 | -0.040 | -0.030 | -0.032 | -0.017 | 0.019 | 0.014 |
[-0.106, 0.073] | [-0.202, 0.032] | [-0.169, 0.089] | [-0.173, 0.113] | [-0.175, 0.110] | [-0.157, 0.122] | [-0.120, 0.158] | [-0.125, 0.152] | |
p=0.711 | p=0.155 | p=0.538 | p=0.683 | p=0.655 | p=0.809 | p=0.784 | p=0.846 | |
periodafter × math_tarifa103 | -0.018 | -0.008 | 0.029 | -0.053 | -0.016 | -0.043 | -0.037 | -0.020 |
[-0.125, 0.089] | [-0.149, 0.132] | [-0.126, 0.183] | [-0.225, 0.119] | [-0.188, 0.155] | [-0.210, 0.125] | [-0.203, 0.130] | [-0.186, 0.145] | |
p=0.740 | p=0.906 | p=0.716 | p=0.544 | p=0.852 | p=0.617 | p=0.666 | p=0.809 | |
Num.Obs. | 475 | 475 | 475 | 475 | 475 | 475 | 475 | 475 |
lm2.01 = lm(usagerate~period,subset(ses_focal.gp2,month_contract==1 & change=='Price Change'))
lm2.02 = lm(usagerate~period,subset(ses_focal.gp2,month_contract==2 & change=='Price Change'))
lm2.03 = lm(usagerate~period,subset(ses_focal.gp2,month_contract==3 & change=='Price Change'))
lm2.04 = lm(usagerate~period,subset(ses_focal.gp2,month_contract==4 & change=='Price Change'))
lm2.05 = lm(usagerate~period,subset(ses_focal.gp2,month_contract==5 & change=='Price Change'))
lm2.06 = lm(usagerate~period,subset(ses_focal.gp2,month_contract==6 & change=='Price Change'))
lm2.07 = lm(usagerate~period,subset(ses_focal.gp2,month_contract==7 & change=='Price Change'))
lm2.08 = lm(usagerate~period,subset(ses_focal.gp2,month_contract==8 & change=='Price Change'))
lm2.1_none = list('m1'=lm2.01,'m2'=lm2.02,'m3'=lm2.03,'m4'=lm2.04,'m5'=lm2.05,'m6'=lm2.06,'m7'=lm2.07,'m8'=lm2.08)
modelsummary(lm2.1_none,estimate='{estimate}{stars}',stars=T,coef_omit = '^(?!period)',statistic = c('conf.int','p={p.value}'),title='Price Change: No Covariates & No Interaction',gof_map = c("nobs"))#,gof_omit = '.'
| m1 | m2 | m3 | m4 | m5 | m6 | m7 | m8 |
|---|---|---|---|---|---|---|---|---|
periodafter | 0.008 | 0.044 | 0.011 | -0.018 | -0.006 | -0.013 | -0.045 | -0.017 |
[-0.042, 0.059] | [-0.019, 0.107] | [-0.055, 0.077] | [-0.085, 0.050] | [-0.075, 0.062] | [-0.079, 0.053] | [-0.107, 0.018] | [-0.080, 0.046] | |
p=0.746 | p=0.169 | p=0.740 | p=0.611 | p=0.860 | p=0.703 | p=0.158 | p=0.590 | |
Num.Obs. | 436 | 436 | 436 | 436 | 436 | 436 | 436 | 436 |
lm2.01 = lm(usagerate~period*math_tarifa,subset(ses_focal.gp2,month_contract==1 & change=='Price Change'))
lm2.02 = lm(usagerate~period*math_tarifa,subset(ses_focal.gp2,month_contract==2 & change=='Price Change'))
lm2.03 = lm(usagerate~period*math_tarifa,subset(ses_focal.gp2,month_contract==3 & change=='Price Change'))
lm2.04 = lm(usagerate~period*math_tarifa,subset(ses_focal.gp2,month_contract==4 & change=='Price Change'))
lm2.05 = lm(usagerate~period*math_tarifa,subset(ses_focal.gp2,month_contract==5 & change=='Price Change'))
lm2.06 = lm(usagerate~period*math_tarifa,subset(ses_focal.gp2,month_contract==6 & change=='Price Change'))
lm2.07 = lm(usagerate~period*math_tarifa,subset(ses_focal.gp2,month_contract==7 & change=='Price Change'))
lm2.08 = lm(usagerate~period*math_tarifa,subset(ses_focal.gp2,month_contract==8 & change=='Price Change'))
lm2.1_none_int = list('m1'=lm2.01,'m2'=lm2.02,'m3'=lm2.03,'m4'=lm2.04,'m5'=lm2.05,'m6'=lm2.06,'m7'=lm2.07,'m8'=lm2.08)
#library(marginaleffects)
#mfx = marginaleffects(lm2.01)
#modelsummary(mfx,shape=term:contrast~model)
modelsummary(lm2.1_none_int,estimate='{estimate}{stars}',stars=T,coef_omit = '^(?!period)',statistic = c('conf.int','p={p.value}'),title='Price Change: No Covariates & Interaction with Contract Type',gof_map = c("nobs"))#,gof_omit = '.'
| m1 | m2 | m3 | m4 | m5 | m6 | m7 | m8 |
|---|---|---|---|---|---|---|---|---|
periodafter | -0.035 | 0.065 | 0.034 | -0.040 | -0.021 | -0.038 | -0.054 | -0.016 |
[-0.117, 0.048] | [-0.036, 0.167] | [-0.072, 0.140] | [-0.148, 0.068] | [-0.131, 0.089] | [-0.144, 0.068] | [-0.150, 0.043] | [-0.115, 0.084] | |
p=0.410 | p=0.208 | p=0.526 | p=0.463 | p=0.707 | p=0.482 | p=0.273 | p=0.756 | |
periodafter × math_tarifa102 | 0.082 | -0.078 | -0.074 | -0.023 | -0.039 | -0.054 | -0.002 | -0.074 |
[-0.044, 0.207] | [-0.232, 0.076] | [-0.234, 0.087] | [-0.187, 0.141] | [-0.206, 0.127] | [-0.215, 0.107] | [-0.149, 0.144] | [-0.225, 0.078] | |
p=0.201 | p=0.322 | p=0.366 | p=0.781 | p=0.643 | p=0.508 | p=0.974 | p=0.339 | |
periodafter × math_tarifa103 | -0.024 | -0.113 | -0.125+ | -0.034 | -0.051 | -0.011 | -0.067 | -0.028 |
[-0.137, 0.090] | [-0.253, 0.026] | [-0.270, 0.020] | [-0.182, 0.115] | [-0.202, 0.100] | [-0.157, 0.135] | [-0.199, 0.066] | [-0.165, 0.109] | |
p=0.684 | p=0.111 | p=0.091 | p=0.653 | p=0.506 | p=0.885 | p=0.322 | p=0.684 | |
Num.Obs. | 436 | 436 | 436 | 436 | 436 | 436 | 436 | 436 |
lm2.01 = lm(usagerate~period+usagerate_tr+correctionrate_tr+gamerate_tr+avg.efec_tr+IQR.efec_tr+med.efec_tr+avg.efec_tr+IQR.efec_tr+med.tmr_tr+avg.tmr_tr+IQR.tmr_tr+avg.problem_tr+num_kid_con+rep_regist+num_uniq_kid+num_asso_kid+genero+age_cut+age_syn_ind+ad+trial_math_rec,subset(ses_focal.gp2_con,month_contract==1 & change=='Price Change'))
lm2.02 = lm(usagerate~period+usagerate_tr+correctionrate_tr+gamerate_tr+avg.efec_tr+IQR.efec_tr+med.efec_tr+avg.efec_tr+IQR.efec_tr+med.tmr_tr+avg.tmr_tr+IQR.tmr_tr+avg.problem_tr+num_kid_con+rep_regist+num_uniq_kid+num_asso_kid+genero+age_cut+age_syn_ind+ad+trial_math_rec,subset(ses_focal.gp2_con,month_contract==2 & change=='Price Change'))
lm2.03 = lm(usagerate~period+usagerate_tr+correctionrate_tr+gamerate_tr+avg.efec_tr+IQR.efec_tr+med.efec_tr+avg.efec_tr+IQR.efec_tr+med.tmr_tr+avg.tmr_tr+IQR.tmr_tr+avg.problem_tr+num_kid_con+rep_regist+num_uniq_kid+num_asso_kid+genero+age_cut+age_syn_ind+ad+trial_math_rec,subset(ses_focal.gp2_con,month_contract==3 & change=='Price Change'))
lm2.04 = lm(usagerate~period+usagerate_tr+correctionrate_tr+gamerate_tr+avg.efec_tr+IQR.efec_tr+med.efec_tr+avg.efec_tr+IQR.efec_tr+med.tmr_tr+avg.tmr_tr+IQR.tmr_tr+avg.problem_tr+num_kid_con+rep_regist+num_uniq_kid+num_asso_kid+genero+age_cut+age_syn_ind+ad+trial_math_rec,subset(ses_focal.gp2_con,month_contract==4 & change=='Price Change'))
lm2.05 = lm(usagerate~period+usagerate_tr+correctionrate_tr+gamerate_tr+avg.efec_tr+IQR.efec_tr+med.efec_tr+avg.efec_tr+IQR.efec_tr+med.tmr_tr+avg.tmr_tr+IQR.tmr_tr+avg.problem_tr+num_kid_con+rep_regist+num_uniq_kid+num_asso_kid+genero+age_cut+age_syn_ind+ad+trial_math_rec,subset(ses_focal.gp2_con,month_contract==5 & change=='Price Change'))
lm2.06 = lm(usagerate~period+usagerate_tr+correctionrate_tr+gamerate_tr+avg.efec_tr+IQR.efec_tr+med.efec_tr+avg.efec_tr+IQR.efec_tr+med.tmr_tr+avg.tmr_tr+IQR.tmr_tr+avg.problem_tr+num_kid_con+rep_regist+num_uniq_kid+num_asso_kid+genero+age_cut+age_syn_ind+ad+trial_math_rec,subset(ses_focal.gp2_con,month_contract==6 & change=='Price Change'))
lm2.07 = lm(usagerate~period+usagerate_tr+correctionrate_tr+gamerate_tr+avg.efec_tr+IQR.efec_tr+med.efec_tr+avg.efec_tr+IQR.efec_tr+med.tmr_tr+avg.tmr_tr+IQR.tmr_tr+avg.problem_tr+num_kid_con+rep_regist+num_uniq_kid+num_asso_kid+genero+age_cut+age_syn_ind+ad+trial_math_rec,subset(ses_focal.gp2_con,month_contract==7 & change=='Price Change'))
lm2.08 = lm(usagerate~period+usagerate_tr+correctionrate_tr+gamerate_tr+avg.efec_tr+IQR.efec_tr+med.efec_tr+avg.efec_tr+IQR.efec_tr+med.tmr_tr+avg.tmr_tr+IQR.tmr_tr+avg.problem_tr+num_kid_con+rep_regist+num_uniq_kid+num_asso_kid+genero+age_cut+age_syn_ind+ad+trial_math_rec,subset(ses_focal.gp2_con,month_contract==8 & change=='Price Change'))
lm2.1_cov = list('m1'=lm2.01,'m2'=lm2.02,'m3'=lm2.03,'m4'=lm2.04,'m5'=lm2.05,'m6'=lm2.06,'m7'=lm2.07,'m8'=lm2.08)
modelsummary(lm2.1_cov,estimate='{estimate}{stars}',stars=T,coef_omit = '^(?!period)',statistic = c('conf.int','p={p.value}'),title='Price Change: With Covariates & No Interaction',gof_map = c("nobs"))#,gof_omit = '.'
| m1 | m2 | m3 | m4 | m5 | m6 | m7 | m8 |
|---|---|---|---|---|---|---|---|---|
periodafter | -0.002 | 0.034 | 0.003 | -0.026 | -0.014 | -0.030 | -0.046 | -0.036 |
[-0.048, 0.044] | [-0.026, 0.094] | [-0.059, 0.066] | [-0.092, 0.040] | [-0.081, 0.052] | [-0.095, 0.034] | [-0.108, 0.015] | [-0.098, 0.027] | |
p=0.926 | p=0.261 | p=0.921 | p=0.441 | p=0.676 | p=0.359 | p=0.141 | p=0.265 | |
Num.Obs. | 436 | 436 | 436 | 436 | 436 | 436 | 436 | 436 |
lm2.01 = lm(usagerate~period*math_tarifa+usagerate_tr+correctionrate_tr+gamerate_tr+avg.efec_tr+IQR.efec_tr+med.efec_tr+avg.efec_tr+IQR.efec_tr+med.tmr_tr+avg.tmr_tr+IQR.tmr_tr+avg.problem_tr+num_kid_con+rep_regist+num_uniq_kid+num_asso_kid+genero+age_cut+age_syn_ind+ad+trial_math_rec,subset(ses_focal.gp2_con,month_contract==1 & change=='Price Change'))
lm2.02 = lm(usagerate~period*math_tarifa+usagerate_tr+correctionrate_tr+gamerate_tr+avg.efec_tr+IQR.efec_tr+med.efec_tr+avg.efec_tr+IQR.efec_tr+med.tmr_tr+avg.tmr_tr+IQR.tmr_tr+avg.problem_tr+num_kid_con+rep_regist+num_uniq_kid+num_asso_kid+genero+age_cut+age_syn_ind+ad+trial_math_rec,subset(ses_focal.gp2_con,month_contract==2 & change=='Price Change'))
lm2.03 = lm(usagerate~period*math_tarifa+usagerate_tr+correctionrate_tr+gamerate_tr+avg.efec_tr+IQR.efec_tr+med.efec_tr+avg.efec_tr+IQR.efec_tr+med.tmr_tr+avg.tmr_tr+IQR.tmr_tr+avg.problem_tr+num_kid_con+rep_regist+num_uniq_kid+num_asso_kid+genero+age_cut+age_syn_ind+ad+trial_math_rec,subset(ses_focal.gp2_con,month_contract==3 & change=='Price Change'))
lm2.04 = lm(usagerate~period*math_tarifa+usagerate_tr+correctionrate_tr+gamerate_tr+avg.efec_tr+IQR.efec_tr+med.efec_tr+avg.efec_tr+IQR.efec_tr+med.tmr_tr+avg.tmr_tr+IQR.tmr_tr+avg.problem_tr+num_kid_con+rep_regist+num_uniq_kid+num_asso_kid+genero+age_cut+age_syn_ind+ad+trial_math_rec,subset(ses_focal.gp2_con,month_contract==4 & change=='Price Change'))
lm2.05 = lm(usagerate~period*math_tarifa+usagerate_tr+correctionrate_tr+gamerate_tr+avg.efec_tr+IQR.efec_tr+med.efec_tr+avg.efec_tr+IQR.efec_tr+med.tmr_tr+avg.tmr_tr+IQR.tmr_tr+avg.problem_tr+num_kid_con+rep_regist+num_uniq_kid+num_asso_kid+genero+age_cut+age_syn_ind+ad+trial_math_rec,subset(ses_focal.gp2_con,month_contract==5 & change=='Price Change'))
lm2.06 = lm(usagerate~period*math_tarifa+usagerate_tr+correctionrate_tr+gamerate_tr+avg.efec_tr+IQR.efec_tr+med.efec_tr+avg.efec_tr+IQR.efec_tr+med.tmr_tr+avg.tmr_tr+IQR.tmr_tr+avg.problem_tr+num_kid_con+rep_regist+num_uniq_kid+num_asso_kid+genero+age_cut+age_syn_ind+ad+trial_math_rec,subset(ses_focal.gp2_con,month_contract==6 & change=='Price Change'))
lm2.07 = lm(usagerate~period*math_tarifa+usagerate_tr+correctionrate_tr+gamerate_tr+avg.efec_tr+IQR.efec_tr+med.efec_tr+avg.efec_tr+IQR.efec_tr+med.tmr_tr+avg.tmr_tr+IQR.tmr_tr+avg.problem_tr+num_kid_con+rep_regist+num_uniq_kid+num_asso_kid+genero+age_cut+age_syn_ind+ad+trial_math_rec,subset(ses_focal.gp2_con,month_contract==7 & change=='Price Change'))
lm2.08 = lm(usagerate~period*math_tarifa+usagerate_tr+correctionrate_tr+gamerate_tr+avg.efec_tr+IQR.efec_tr+med.efec_tr+avg.efec_tr+IQR.efec_tr+med.tmr_tr+avg.tmr_tr+IQR.tmr_tr+avg.problem_tr+num_kid_con+rep_regist+num_uniq_kid+num_asso_kid+genero+age_cut+age_syn_ind+ad+trial_math_rec,subset(ses_focal.gp2_con,month_contract==8 & change=='Price Change'))
lm2.1_cov_int = list('m1'=lm2.01,'m2'=lm2.02,'m3'=lm2.03,'m4'=lm2.04,'m5'=lm2.05,'m6'=lm2.06,'m7'=lm2.07,'m8'=lm2.08)
modelsummary(lm2.1_cov_int,estimate='{estimate}{stars}',stars=T,coef_omit = '^(?!period)',statistic = c('conf.int','p={p.value}'),title='Price Change: With Covariates & Interaction with Contract Type',gof_map = c("nobs"))
| m1 | m2 | m3 | m4 | m5 | m6 | m7 | m8 |
|---|---|---|---|---|---|---|---|---|
periodafter | -0.009 | 0.101* | 0.062 | -0.015 | 0.010 | -0.026 | -0.028 | -0.011 |
[-0.086, 0.069] | [0.003, 0.200] | [-0.042, 0.165] | [-0.123, 0.094] | [-0.099, 0.120] | [-0.133, 0.081] | [-0.126, 0.071] | [-0.113, 0.091] | |
p=0.822 | p=0.044 | p=0.243 | p=0.792 | p=0.851 | p=0.633 | p=0.581 | p=0.836 | |
periodafter × math_tarifa102 | 0.028 | -0.144+ | -0.122 | -0.070 | -0.103 | -0.091 | -0.034 | -0.103 |
[-0.089, 0.144] | [-0.293, 0.004] | [-0.278, 0.034] | [-0.233, 0.093] | [-0.268, 0.062] | [-0.252, 0.070] | [-0.182, 0.115] | [-0.256, 0.051] | |
p=0.640 | p=0.057 | p=0.124 | p=0.401 | p=0.220 | p=0.267 | p=0.656 | p=0.189 | |
periodafter × math_tarifa103 | -0.065 | -0.165* | -0.157* | -0.061 | -0.084 | -0.043 | -0.100 | -0.054 |
[-0.171, 0.042] | [-0.300, -0.029] | [-0.299, -0.014] | [-0.210, 0.088] | [-0.234, 0.067] | [-0.190, 0.103] | [-0.235, 0.035] | [-0.194, 0.085] | |
p=0.233 | p=0.017 | p=0.031 | p=0.421 | p=0.275 | p=0.562 | p=0.146 | p=0.445 | |
Num.Obs. | 436 | 436 | 436 | 436 | 436 | 436 | 436 | 436 |
#ses_focal.gp.pvt = ses_focal.gp %>% group_by(change,period,month_contract) %>% mutate(nusers=n())%>% group_by(change,period) %>% mutate(ini_users=max(nusers),retention=nusers/ini_users) %>% group_by(change,period,month_contract,ini_users,nusers,retention) %>% summarise_at(vars(-group_cols(),-'alumno'),mean)
#ses_focal.gp.pvt = ses_focal.gp %>% group_by(change,period,mon=month_contract) %>% mutate(nusers=n())%>% group_by(change,period) %>% mutate(ini_users=max(nusers),retention=nusers/ini_users) %>% group_by(change,period,mon,ini_users,nusers,retention) %>% summarise_at(vars(''),mean)
#ses_focal.gp.pvt = ses_focal.gp.pvt %>% pivot_wider(names_from = period,values_from = c(nusers,nses,dayrange,usagerate))