Data

  1. ses: all session data of consumers who subscribe to the focal period (same/previous year)
  2. contract_1st_pvt: first regular contract that is signed up during the focal period from 2017-2022, exclude those who registered accounts repeatedly (more than 6)
  3. alumno: student-parent id information, including date_trial_end, number of associated user accounts, date of birth, gender, tutor_id
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
## ---------------------------------------------------------------------------------------------------

Regression

Default

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'
Effect on Monthly Usage Rates Over Time

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')
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')
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 = '.'
Effect on Monthly Usage Rates Over Time

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

Price Change

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 = '.'
Effect on Monthly Usage Rates Over Time

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 = '.'
Effect on Monthly Usage Rates Over Time

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 = '.'
Price Change: Covariates & No Interaction

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"))
Price Change: With Covariates & Interaction

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

Default

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 = '.'
Effect on Monthly Usage Rates Over Time

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')
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')
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 = '.'
Default Change: Covariates & Interaction with Contract Type

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

Price Change

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 = '.'
Price Change: No Covariates & No Interaction

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 = '.'
Price Change: No Covariates & Interaction with Contract Type

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 = '.'
Price Change: With Covariates & No Interaction

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"))
Price Change: With Covariates & Interaction with Contract Type

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))