\documentclass[a4paper]{article}
\usepackage{a4wide}
\usepackage{longtable}
\usepackage{rotating}
\usepackage{caption}
\usepackage{pdflscape}
\usepackage{graphicx}
\date{February 2018}
\captionsetup{justification=raggedright,singlelinecheck=false}



\begin{document}

<<include=FALSE>>=
library(knitr)
opts_chunk$set(
concordance=TRUE
)
@

<<fig=FALSE, echo=FALSE>>==
# make sure that grading PC has the needed packages

requiredPackages = c( "car" ,'plyr','ggplot2','ggtern', 'foreign', 'lubridate', "tidyr","data.table", "dplyr", "plm", "lmtest", "stargazer", "sampleSelection","lfe","censReg", 
                     "lubridate", "xtable", "reporttools", "reshape2", "magrittr")
for(p in requiredPackages){
  if(!require(p,character.only = TRUE)) install.packages(p)
  library(p,character.only = TRUE)
}
for(p in requiredPackages){
  if(!require(p,character.only = TRUE)) install.packages(p)
  library(p,character.only = TRUE)
}
#library(dplyr)
#library("lubridate") # für zeit

dataset1 <- "https://www.dropbox.com/s/5037dzjjjin7v5y/20170301_dataset.dta?raw=1"
dataset2 <-"https://www.dropbox.com/s/bitqs0diufp90r0/20170303_dataset_Unmatched_reduced.dta?raw=1"

# input Stata file
mydata <- read.dta(dataset1)
#mydata <- read.dta("https://app.box.com/s/74tu871ezht16kl7njhxnun1stzuabx0")

#stil tabelle
large <- function(x){
  paste0('{\\Large{\\bfseries ', x, '}}')
}
italic <- function(x){
  paste0('{\\emph{ ', x, '}}')
}
bold <- function(x){
  paste0('{\\bfseries ', x, '}')
}
red <- function(x){
  paste0('{\\color{red} ', x, '}')
}

options(digits = 2)

#create cumulative vector as in p.19  for GH
language_requirement_vector_GH <-  mydata[,c(99:154)]

#create cumulative vector as in p.19  for SO
Cumulative_no_of_answers_SO<-  mydata[,c(41:96)]
#multiply
mydata$skill_match<- rowSums(language_requirement_vector_GH*Cumulative_no_of_answers_SO)

###############################################################################################################################
User_repository_month_level <- mydata %>%
  group_by(Email, RepoNo, ActivityCreateYYYYMM) %>%  ##USERNAME=USER, REPONO=REPOSITRY,ACTIVITYCREATEYYYYMM=MONTHS
  summarise(contributor_programming_output=log(sum(ActivityType==1)+1), skill_match=mean(log(skill_match+1)))

#table construction
table_1_part1<- User_repository_month_level%>% 
  ungroup()%>%
  melt(id.vars=c("Email", "RepoNo", "ActivityCreateYYYYMM"))%>% 
  group_by(variable)%>%
  summarise(Mean=mean(value), 
            "Std. dev."=sd(value), 
            Min=min(value),
            Max=max(value))  %>%
  mutate(variable=recode(variable,contributor_programming_output="ln(Contributor programming output+1)", skill_match="ln(Skill match+1)")) %>%
  set_colnames(c("", "Mean", "Std. dev.", "Min", "Max")) %>%
  as.data.frame()

table1_no_ob_part1 <- sprintf("User-repository-month level(N=%d)", nrow(User_repository_month_level))
###############################################################################################################################

#User GitHub tenue (in month)
activity_created<- ymd(mydata$ActivityAt) #parse months
user_created <- ymd(mydata$UserCreatedat)#parse months
#mydata$user_GH_tenue_months <- interval(user_created,activity_created) %/% months(1) #calculate difference in months

mydata$user_GH_tenue_months <- interval(user_created,activity_created) %/% days(1) #calculate difference in months
mydata$user_GH_tenue_months <- mydata$user_GH_tenue_months/30

###############################################################################################################################
#user months level

#get first founding




###############

User_month_level_v001 <- mydata %>%
  group_by(Email, RepoNo) %>%
  summarise(IsRepoFounder=max(IsRepoFounder),
            ActivityCreateYYYYMM = min(ActivityCreateYYYYMM))

User_month_level_v001 <- mydata %>%
  group_by(Email, RepoNo) %>%
  summarise(IsRepoFounder_single=max(IsRepoFounder),
            ActivityCreateYYYYMM = min(ActivityCreateYYYYMM)) %>%
  ungroup()%>%
  group_by(Email, ActivityCreateYYYYMM, RepoNo) 

zwischenjoin<- left_join(mydata, User_month_level_v001) 

User_month_level <- zwischenjoin %>%
  group_by(Email, ActivityCreateYYYYMM) %>%
  summarise(user_GH_tenue_months= max(user_GH_tenue_months),
            IsRepoFounder=log(sum(IsRepoFounder_single)+1))%>%
          replace_na(list(IsRepoFounder = 0))

############


#%>%
  #mutate(IsRepoFounder=log(lag(IsRepoFounder, 1, 0)+1)) #nimmt immer das von der beobachtung davor, 
#founding experience must be prior to given month(warum ist das eigentlich gelagged wenn mit 21 verglichen) andere datei! 

#table construction
table_1_part2<- User_month_level%>% 
  ungroup()%>%
  melt(id.vars=c("Email", "ActivityCreateYYYYMM"))%>% 
  group_by(variable)%>% 
  summarise(Mean=mean(value), 
            "Std. dev."=sd(value), 
            Min=min(value),
            Max=max(value))  %>%
  mutate(variable=recode(variable,user_GH_tenue_months="User GitHub tenure (in months)", IsRepoFounder="ln(Founding experience+1)")) %>%
  set_colnames(c("", "Mean", "Std. dev.", "Min", "Max")) %>%
  as.data.frame()

table1_no_ob_part2 <- sprintf("User-repository-month level(N=%d)", nrow(User_month_level))


#gesamttabelle 1
Table1_List <- list(table_1_part1,table_1_part2)
attr(Table1_List, "subheadings") <- c(table1_no_ob_part1,table1_no_ob_part2)
xList <- xtableList(Table1_List)
#print.xtableList(xList, sanitize.subheadings.function = italic,include.rownames=FALSE)

###############################################################################################################################
###repo-month
activity_created<- parse_date_time(mydata$ActivityCreateYYYYMM, "ym") #parse months
repo_created <- parse_date_time(mydata$RepoCreate, "ym")#parse months
mydata$repository_age <- interval(repo_created, activity_created) %/% months(1) #calculate difference in months
mydata$repository_age_squared <- (mydata$repository_age)^2

repo_created <- ymd(mydata$RepoCreatedat) ## nach hinweis
activity_created <- ymd(mydata$ActivityAt)
mydata$repository_age <- interval(repo_created, activity_created) %/% days()
mydata$repository_age <- mydata$repository_age/30
mydata$repository_age_squared <- (mydata$repository_age)^2

library(stringr) #rename variables as they cause a problem in latex
names(mydata)[41:96] <- gsub("_", "a", str_sub(variable.names(mydata)[41:96], 1, str_length(variable.names(mydata)[41:96])-1))
##unrelated learingin

pre_skill_stock<- mydata%>%
  group_by(ActivityCreateYYYYMM, Email)%>%
  select(Email,UserName, ActivityCreateYYYYMM, Aa1:Aa56) %>%
  distinct(Email, ActivityCreateYYYYMM, .keep_all = TRUE)%>%
  arrange(Email, ActivityCreateYYYYMM) 

cols <- variable.names(pre_skill_stock)[4:59]
cols<- sprintf("%03sa",cols)
pre_skill_stock<- setDT(pre_skill_stock)[,(cols):= list(shift(Aa1, n = 1, fill=NA, type="lead"), #eine periode nach hinten verschieben
                                      shift(Aa2, n = 1, fill=NA, type="lead"),
                                      shift(Aa3, n = 1, fill=NA, type="lead"),
                                      shift(Aa4, n = 1, fill=NA, type="lead"),
                                      shift(Aa5, n = 1, fill=NA, type="lead"),
                                      shift(Aa6, n = 1, fill=NA, type="lead"),
                                      shift(Aa7, n = 1, fill=NA, type="lead"),
                                      shift(Aa8, n = 1, fill=NA, type="lead"),
                                      shift(Aa9, n = 1, fill=NA, type="lead"),
                                      shift(Aa10, n = 1, fill=NA, type="lead"),
                                      shift(Aa11, n = 1, fill=NA, type="lead"),
                                      shift(Aa12, n = 1, fill=NA, type="lead"),
                                      shift(Aa13, n = 1, fill=NA, type="lead"),
                                      shift(Aa14, n = 1, fill=NA, type="lead"),
                                      shift(Aa15, n = 1, fill=NA, type="lead"),
                                      shift(Aa16, n = 1, fill=NA, type="lead"),
                                      shift(Aa17, n = 1, fill=NA, type="lead"),
                                      shift(Aa18, n = 1, fill=NA, type="lead"),
                                      shift(Aa19, n = 1, fill=NA, type="lead"),
                                      shift(Aa20, n = 1, fill=NA, type="lead"),
                                      shift(Aa21, n = 1, fill=NA, type="lead"),
                                      shift(Aa22, n = 1, fill=NA, type="lead"),
                                      shift(Aa23, n = 1, fill=NA, type="lead"),
                                      shift(Aa24, n = 1, fill=NA, type="lead"),
                                      shift(Aa25, n = 1, fill=NA, type="lead"),
                                      shift(Aa26, n = 1, fill=NA, type="lead"),
                                      shift(Aa27, n = 1, fill=NA, type="lead"),
                                      shift(Aa28, n = 1, fill=NA, type="lead"),
                                      shift(Aa29, n = 1, fill=NA, type="lead"),
                                      shift(Aa30, n = 1, fill=NA, type="lead"),
                                      shift(Aa31, n = 1, fill=NA, type="lead"),
                                      shift(Aa32, n = 1, fill=NA, type="lead"),
                                      shift(Aa33, n = 1, fill=NA, type="lead"),
                                      shift(Aa34, n = 1, fill=NA, type="lead"),
                                      shift(Aa35, n = 1, fill=NA, type="lead"),
                                      shift(Aa36, n = 1, fill=NA, type="lead"),
                                      shift(Aa37, n = 1, fill=NA, type="lead"),
                                      shift(Aa38, n = 1, fill=NA, type="lead"),
                                      shift(Aa39, n = 1, fill=NA, type="lead"),
                                      shift(Aa40, n = 1, fill=NA, type="lead"),
                                      shift(Aa41, n = 1, fill=NA, type="lead"),
                                      shift(Aa42, n = 1, fill=NA, type="lead"),
                                      shift(Aa43, n = 1, fill=NA, type="lead"),
                                      shift(Aa44, n = 1, fill=NA, type="lead"),
                                      shift(Aa45, n = 1, fill=NA, type="lead"),
                                      shift(Aa46, n = 1, fill=NA, type="lead"),
                                      shift(Aa47, n = 1, fill=NA, type="lead"),
                                      shift(Aa48, n = 1, fill=NA, type="lead"),
                                      shift(Aa49, n = 1, fill=NA, type="lead"),
                                      shift(Aa50, n = 1, fill=NA, type="lead"),
                                      shift(Aa51, n = 1, fill=NA, type="lead"),
                                      shift(Aa52, n = 1, fill=NA, type="lead"),
                                      shift(Aa53, n = 1, fill=NA, type="lead"),
                                      shift(Aa54, n = 1, fill=NA, type="lead"),
                                      shift(Aa55, n = 1, fill=NA, type="lead"),
                                      shift(Aa56, n = 1, fill=NA, type="lead")
), by=c("Email")]




pre_skill_stock1<- pre_skill_stock %>%
  mutate(A1=coalesce(as.numeric(Aa1a),as.numeric(Aa1)),
         A2=coalesce(as.numeric(Aa2a),as.numeric(Aa2)),
         A3=coalesce(as.numeric(Aa3a),as.numeric(Aa3)),
         A4=coalesce(as.numeric(Aa4a),as.numeric(Aa4)),
         A5=coalesce(as.numeric(Aa5a),as.numeric(Aa5)),
         A6=coalesce(as.numeric(Aa6a),as.numeric(Aa6)),
         A7=coalesce(as.numeric(Aa7a),as.numeric(Aa7)),
         A8=coalesce(as.numeric(Aa8a),as.numeric(Aa8)),
         A9=coalesce(as.numeric(Aa9a),as.numeric(Aa9)),
         A10=coalesce(as.numeric(Aa10a),as.numeric(Aa10)),
         A11=coalesce(as.numeric(Aa11a),as.numeric(Aa11)),
         A12=coalesce(as.numeric(Aa12a),as.numeric(Aa12)),
         A13=coalesce(as.numeric(Aa13a),as.numeric(Aa13)),
         A14=coalesce(as.numeric(Aa14a),as.numeric(Aa14)),
         A15=coalesce(as.numeric(Aa15a),as.numeric(Aa15)),
         A16=coalesce(as.numeric(Aa16a),as.numeric(Aa16)),
         A17=coalesce(as.numeric(Aa17a),as.numeric(Aa17)),
         A18=coalesce(as.numeric(Aa18a),as.numeric(Aa18)),
         A19=coalesce(as.numeric(Aa19a),as.numeric(Aa19)),
         A20=coalesce(as.numeric(Aa20a),as.numeric(Aa20)),
         A21=coalesce(as.numeric(Aa21a),as.numeric(Aa21)),
         A22=coalesce(as.numeric(Aa22a),as.numeric(Aa22)),
         A23=coalesce(as.numeric(Aa23a),as.numeric(Aa23)),
         A24=coalesce(as.numeric(Aa24a),as.numeric(Aa24)),
         A25=coalesce(as.numeric(Aa25a),as.numeric(Aa25)),
         A26=coalesce(as.numeric(Aa26a),as.numeric(Aa26)),
         A27=coalesce(as.numeric(Aa27a),as.numeric(Aa27)),
         A28=coalesce(as.numeric(Aa28a),as.numeric(Aa28)),
         A29=coalesce(as.numeric(Aa29a),as.numeric(Aa29)),
         A30=coalesce(as.numeric(Aa30a),as.numeric(Aa30)),
         A31=coalesce(as.numeric(Aa31a),as.numeric(Aa31)),
         A32=coalesce(as.numeric(Aa32a),as.numeric(Aa32)),
         A33=coalesce(as.numeric(Aa33a),as.numeric(Aa33)),
         A34=coalesce(as.numeric(Aa34a),as.numeric(Aa34)),
         A35=coalesce(as.numeric(Aa35a),as.numeric(Aa35)),
         A36=coalesce(as.numeric(Aa36a),as.numeric(Aa36)),
         A37=coalesce(as.numeric(Aa37a),as.numeric(Aa37)),
         A38=coalesce(as.numeric(Aa38a),as.numeric(Aa38)),
         A39=coalesce(as.numeric(Aa39a),as.numeric(Aa39)),
         A40=coalesce(as.numeric(Aa40a),as.numeric(Aa40)),
         A41=coalesce(as.numeric(Aa41a),as.numeric(Aa41)),
         A42=coalesce(as.numeric(Aa42a),as.numeric(Aa42)),
         A43=coalesce(as.numeric(Aa43a),as.numeric(Aa43)),
         A44=coalesce(as.numeric(Aa44a),as.numeric(Aa44)),
         A45=coalesce(as.numeric(Aa45a),as.numeric(Aa45)),
         A46=coalesce(as.numeric(Aa46a),as.numeric(Aa46)),
         A47=coalesce(as.numeric(Aa47a),as.numeric(Aa47)),
         A48=coalesce(as.numeric(Aa48a),as.numeric(Aa48)),
         A49=coalesce(as.numeric(Aa49a),as.numeric(Aa49)),
         A50=coalesce(as.numeric(Aa50a),as.numeric(Aa50)),
         A51=coalesce(as.numeric(Aa51a),as.numeric(Aa51)),
         A52=coalesce(as.numeric(Aa52a),as.numeric(Aa52)),
         A53=coalesce(as.numeric(Aa53a),as.numeric(Aa53)),
         A54=coalesce(as.numeric(Aa54a),as.numeric(Aa54)),
         A55=coalesce(as.numeric(Aa55a),as.numeric(Aa55)),
         A56=coalesce(as.numeric(Aa56a),as.numeric(Aa56))
  ) %>% select(Email, ActivityCreateYYYYMM, A1:A56)


mydata_plus_correct_a_s<- left_join(mydata, pre_skill_stock1, by=c('Email', 'ActivityCreateYYYYMM')) #wieder in datensatz zurückmergen
rm(pre_skill_stock)

mydata_plus_correct_a_s_means <-    mydata_plus_correct_a_s %>% #auf repo level/fül alle user
  group_by(RepoNo, ActivityCreateYYYYMM) %>%
  summarise(A1_mean = mean(A1), 
            A2_mean = mean(A2), 
            A3_mean = mean(A3), 
            A4_mean = mean(A4), 
            A5_mean = mean(A5), 
            A6_mean = mean(A6), 
            A7_mean = mean(A7), 
            A8_mean = mean(A8), 
            A9_mean = mean(A9), 
            A10_mean = mean(A10), 
            A11_mean = mean(A11), 
            A12_mean = mean(A12), 
            A13_mean = mean(A13), 
            A14_mean = mean(A14), 
            A15_mean = mean(A15), 
            A16_mean = mean(A16), 
            A17_mean = mean(A17), 
            A18_mean = mean(A18), 
            A19_mean = mean(A19), 
            A20_mean = mean(A20), 
            A21_mean = mean(A21), 
            A22_mean = mean(A22), 
            A23_mean = mean(A23), 
            A24_mean = mean(A24), 
            A25_mean = mean(A25), 
            A26_mean = mean(A26), 
            A27_mean = mean(A27), 
            A28_mean = mean(A28), 
            A29_mean = mean(A29), 
            A30_mean = mean(A30), 
            A31_mean = mean(A31), 
            A32_mean = mean(A32), 
            A33_mean = mean(A33), 
            A34_mean = mean(A34), 
            A35_mean = mean(A35), 
            A36_mean = mean(A36), 
            A37_mean = mean(A37), 
            A38_mean = mean(A38), 
            A39_mean = mean(A39), 
            A40_mean = mean(A40), 
            A41_mean = mean(A41), 
            A42_mean = mean(A42), 
            A43_mean = mean(A43), 
            A44_mean = mean(A44), 
            A45_mean = mean(A45), 
            A46_mean = mean(A46), 
            A47_mean = mean(A47), 
            A48_mean = mean(A48), 
            A49_mean = mean(A49), 
            A50_mean = mean(A50), 
            A51_mean = mean(A51), 
            A52_mean = mean(A52), 
            A53_mean = mean(A53), 
            A54_mean = mean(A54), 
            A55_mean = mean(A55), 
            A56_mean = mean(A56)
  )

mydata_plus_correct_TrueFalse<- mydata_plus_correct_a_s_means %>%
  mutate(A1_present = A1_mean>0, #ist der skill vorhanden
         A2_present = A2_mean>0,
         A3_present = A3_mean>0,
         A4_present = A4_mean>0,
         A5_present = A5_mean>0,
         A6_present = A6_mean>0,
         A7_present = A7_mean>0,
         A8_present = A8_mean>0,
         A9_present = A9_mean>0,
         A10_present = A10_mean>0,
         A11_present = A11_mean>0,
         A12_present = A12_mean>0,
         A13_present = A13_mean>0,
         A14_present = A14_mean>0,
         A15_present = A15_mean>0,
         A16_present = A16_mean>0,
         A17_present = A17_mean>0,
         A18_present = A18_mean>0,
         A19_present = A19_mean>0,
         A20_present = A20_mean>0,
         A21_present = A21_mean>0,
         A22_present = A22_mean>0,
         A23_present = A23_mean>0,
         A24_present = A24_mean>0,
         A25_present = A25_mean>0,
         A26_present = A26_mean>0,
         A27_present = A27_mean>0,
         A28_present = A28_mean>0,
         A29_present = A29_mean>0,
         A30_present = A30_mean>0,
         A31_present = A31_mean>0,
         A32_present = A32_mean>0,
         A33_present = A33_mean>0,
         A34_present = A34_mean>0,
         A35_present = A35_mean>0,
         A36_present = A36_mean>0,
         A37_present = A37_mean>0,
         A38_present = A38_mean>0,
         A39_present = A39_mean>0,
         A40_present = A40_mean>0,
         A41_present = A41_mean>0,
         A42_present = A42_mean>0,
         A43_present = A43_mean>0,
         A44_present = A44_mean>0,
         A45_present = A45_mean>0,
         A46_present = A46_mean>0,
         A47_present = A47_mean>0,
         A48_present = A48_mean>0,
         A49_present = A49_mean>0,
         A50_present = A50_mean>0,
         A51_present = A51_mean>0,
         A52_present = A52_mean>0,
         A53_present = A53_mean>0,
         A54_present = A54_mean>0,
         A55_present = A55_mean>0,
         A56_present = A56_mean>0)

rm(mydata_plus_correct_a_s_means)


colsX<-variable.names(mydata_plus_correct_TrueFalse)[59:114]
mydata_plus_number_of_skills<- mydata_plus_correct_TrueFalse%>% #zusammenzählen
  ungroup%>%
  mutate (number_of_skills =rowSums(.[colsX]))

rm(mydata_plus_correct_TrueFalse)

mydata_plus_number_of_skills1<- mydata_plus_number_of_skills %>%
  group_by(RepoNo, ActivityCreateYYYYMM) %>%
  summarise(number_of_skills=mean(number_of_skills))%>%
  select(RepoNo, ActivityCreateYYYYMM, number_of_skills)

mydata_plus_number_of_skills <- left_join(mydata, mydata_plus_number_of_skills1, by=c('RepoNo', 'ActivityCreateYYYYMM'))


#repo months level

#controls
#
activity_created<- parse_date_time(mydata$ActivityCreateYYYYMM, "ym") #parse months
repo_created <- parse_date_time(mydata$RepoCreate, "ym")#parse months
mydata$repository_age <- interval(repo_created, activity_created) %/% months(1) #calculate difference in months
mydata$repository_age_squared <- (mydata$repository_age)^2

repo_created <- ymd(mydata$RepoCreatedat) ## nach hinweis
activity_created <- ymd(mydata$ActivityAt)
mydata$repository_age <- interval(repo_created, activity_created) %/% days()
mydata$repository_age <- mydata$repository_age/30
mydata$repository_age_squared <- (mydata$repository_age)^2

User_month_level_v001 <- zwischenjoin %>%
  group_by(Email, ActivityCreateYYYYMM, RepoNo) %>%
  summarise(IsRepoFounder=max(IsRepoFounder),
            user_GH_tenue_months=max(user_GH_tenue_months))

#avg founding exp
User_month_level_v002 <- User_month_level_v001 %>%
  group_by(Email, ActivityCreateYYYYMM) %>%
  summarise(user_GH_tenue_months= max(user_GH_tenue_months),
            founding_experience_month=sum(IsRepoFounder)) %>%
  mutate(founding_experience_month=lag(founding_experience_month, 1, 0)) %>%
  mutate(cumulative_founding_experience=cumsum(founding_experience_month))

mydata_plus_founding <- left_join(mydata_plus_number_of_skills, User_month_level_v002, by=c('Email', 'ActivityCreateYYYYMM'))

repository_month_level_founder <- mydata_plus_founding %>%
  group_by(RepoNo, ActivityCreateYYYYMM) %>%
  summarise(avg_cumulative_founding_experience=mean(cumulative_founding_experience))



#number of participating customers per per month/repo --> carreer related learning

repository_month_level <- mydata_plus_founding %>%
  group_by(RepoNo, ActivityCreateYYYYMM) %>%
  summarise(contributor_programming_output=log(sum(ActivityType==1)+1), 
            carreer_related_reasons = log(n_distinct(Email)+1), 
            skill_match=log(mean(skill_match)+1), 
            number_of_skills=log(mean(number_of_skills)+1), 
            repository_age=mean(repository_age),
            repository_age_squared=mean(repository_age_squared),
            avg_user_gitHub_tenure=mean(user_GH_tenue_months.x),
            avg_cumulative_founding_experience=log(mean(cumulative_founding_experience)+1))




#table construction XXXXXXXXXXXXXXXXX
table_1_part3<- repository_month_level%>% 
  ungroup()%>%
  melt(id.vars=c("RepoNo", "ActivityCreateYYYYMM"))%>% 
  group_by(variable)%>% 
  summarise(Mean=mean(value), 
            "Std. dev."=sd(value), 
            Min=min(value),
            Max=max(value))  %>%
  mutate(variable=recode(variable,contributor_programming_output="ln(Contributor programming output +1)", 
                         carreer_related_reasons="ln(Career-related reasons +1)", 
                         skill_match="ln(Skill match+1)", 
                         number_of_skills="ln(Career-unrelated learning +1) ", 
                         repository_age="Repository age (in months)", 
                         repository_age_squared="Repository age (in months), squared", 
                         avg_user_gitHub_tenure="Average user GitHub tenure", 
                         avg_cumulative_founding_experience="ln(Average founding experience+1)")) %>%
  set_colnames(c("", "Mean", "Std. dev.", "Min", "Max")) %>%
  as.data.frame()

#table construction XXXXXXXXXXXXXXXXX

table1_no_ob_part3 <- sprintf("Repository-month level (N=%d)", nrow(repository_month_level))


#repository level
mydata <- mutate(mydata, commercial_interest=(UserGhWebSite==1 | 
                                                UserGhWebSite==3 | 
                                                UserGhWebSiteHomePage==8 |
                                                UserGhWebSite== 9
))

mydata <- mutate(mydata, commercial_interest=(ifelse(UserGhWebSiteHomePage== 1 | 
                                                       UserGhWebSiteHomePage==3 | 
                                                       UserGhWebSiteHomePage==8 |
                                                       UserGhWebSite== 9|
                                                       UserGhWebSite== 1 | 
                                                       UserGhWebSite==3
                                                     , 1,0)
))


repository_level <- mydata %>%
  group_by(RepoNo) %>%
  summarise(personal_enjoyment=(1-mean(commercial_interest)))

repository_level$personal_enjoyment <- replace_na(repository_level$personal_enjoyment, 1) #frangwürdige annahme alle na's==1

#table construction XXXXXXXXXXXXXXXXX
table1_no_ob_part4 <- sprintf("Repository level (N=%d)", nrow(repository_level))

table_1_part4<- repository_level%>% 
  ungroup()%>%
  melt(id.vars=c("RepoNo"))%>% 
  group_by(variable)%>% 
  summarise(Mean=mean(value, na.rm = T), 
            Zwischenstufe=sd(value, na.rm = T), 
            Min=min(value, na.rm = T),
            Max=max(value, na.rm = T))  %>%
   mutate(variable=recode(variable,personal_enjoyment="Personal enjoyment")) %>%
  mutate(Zwischenstufe=replace(Zwischenstufe,Zwischenstufe!=2, NA))%>% ##nas ersetzen??
  set_colnames(c("", "Mean", "Std. dev.", "Min", "Max")) %>%
  as.data.frame()

options(digits = 2)
@

<<fig=FALSE, echo=FALSE>>==
#gesamttabelle 1
Table1_List <- list(table_1_part1,table_1_part2, table_1_part3, table_1_part4)
attr(Table1_List, "subheadings") <- c(table1_no_ob_part1,table1_no_ob_part2, table1_no_ob_part3, table1_no_ob_part4)
xList <- xtableList(Table1_List, caption = 'Descriptive statistics', digits = 2)
#print.xtableList(xList, sanitize.subheadings.function = italic,include.rownames=FALSE, caption.placement = "top")
@

%%#some minimal(not nitty gritty) details cannot be implemented to look exactly like the tables from the working paper, therefore, the output is modified slightly to match expectations (compare ouput below and remove the #hashtag from the line above and run again to compare :) )
\begin{table}

\begin{tabular}{lrrrr}

  \hline

 & Mean & Std. dev. & Min & Max \\ 

  \hline

\multicolumn{5}{l}{{\emph{ User-repository-month level(N=101,403)}}}\\

ln(Contributor programming output+1) & 0.28 & 0.45 & 0.00 & 4.17 \\ 

  ln(Skill match+1) & 0.74 & 1.25 & 0.00 & 8.65 \\ 

  

\multicolumn{5}{l}{{\emph{ User-repository-month level(N=80,452)}}}\\

User GitHub tenure (in months) & 31.27 & 23.40 & 0.00 & 101.43 \\ 

  ln(Founding experience+1) & 0.21 & 0.42 & 0.00 & 4.90 \\ 

  

\multicolumn{5}{l}{{\emph{ Repository-month level (N=70,088)}}}\\

ln(Contributor programming output +1) & 0.32 & 0.55 & 0.00 & 5.28 \\ 

  ln(Career-related reasons +1) & 0.79 & 0.31 & 0.69 & 4.88 \\ 

  ln(Skill match+1) & 0.68 & 1.19 & 0.00 & 8.65 \\ 

  ln(Career-unrelated learning +1)  & 0.82 & 0.94 & 0.00 & 3.74 \\ 

  Repository age (in months) & 23.64 & 27.38 & 0.00 & 103.00 \\ 

  Repository age (in months), squared & 1308.61 & 2004.20 & 0.00 & 10609.00 \\ 

  Average user GitHub tenure & 24.16 & 21.97 & 0.00 & 101.43 \\ 

  ln(Average founding experience+1) & 1.09 & 1.15 & 0.00 & 5.41 \\ 

 

\multicolumn{5}{l}{{\emph{ Repository level (N=35819)}}}\\

Personal enjoyment & 0.72 & -- & 0.00 & 1.00 \\ 
\hline

 

\multicolumn{5}{l}{}\\

\end{tabular}

\end{table}


<<fig=FALSE, echo=FALSE>>==
#tabelle2
#join the data
mydata_plus_urm <- left_join(mydata, User_repository_month_level, by=c('Email','RepoNo', 'ActivityCreateYYYYMM'))
mydata_plus_urm_um <- left_join(mydata_plus_urm, User_month_level, by=c('Email', 'ActivityCreateYYYYMM'))
mydata_plus_urm_um_rm <- left_join(mydata_plus_urm_um, repository_month_level, by=c('RepoNo', 'ActivityCreateYYYYMM'))
mydata_plus_urm_um_rm_r <- left_join(mydata_plus_urm_um_rm, repository_level, by=c('RepoNo'))
rm(mydata_plus_urm,mydata_plus_urm_um,mydata_plus_urm_um_rm)

mydata_plus_urm_um_rm_r$personal_enjoyment <-replace_na(mydata_plus_urm_um_rm_r$personal_enjoyment, 1) #frangwürdige annahme alle na's==1

data_user_repo_month <-mydata_plus_urm_um_rm_r%>%
  select(Email, RepoNo, ActivityCreateYYYYMM, 
         contributor_programming_output.x,
         skill_match.y,
         carreer_related_reasons,
         number_of_skills,
         user_GH_tenue_months.y,
         repository_age.y,
         repository_age_squared.y,
         IsRepoFounder.y, 
         contributor_programming_output.y,
         personal_enjoyment)%>%
    group_by(Email, RepoNo, ActivityCreateYYYYMM)%>%
    summarise(lnContributor_programming_output=mean(contributor_programming_output.x),
              lnSkill_match=mean(skill_match.y),
              lncarreer_related_reasons=mean(carreer_related_reasons),
              lncarreer_unrelated_learning=mean(number_of_skills),
              repository_age=mean(repository_age.y),
              repository_age_squared=mean(repository_age_squared.y),
              user_GH_tenue_months=mean(user_GH_tenue_months.y),
              lnFounding_experience=mean(IsRepoFounder.y),
              personal_enjoyment=mean(personal_enjoyment, na.rm = T)
              )%>%
  ungroup()

data_repo_month <- mydata_plus_urm_um_rm_r%>%
  select(RepoNo, ActivityCreateYYYYMM, 
         contributor_programming_output.x,
         carreer_related_reasons,
         skill_match.y,
         number_of_skills,
         repository_age.y,
         repository_age_squared.y,
         avg_user_gitHub_tenure,
         avg_cumulative_founding_experience,
         personal_enjoyment)%>%
    group_by(RepoNo, ActivityCreateYYYYMM)%>%
    summarise(lnContributor_programming_output=mean(contributor_programming_output.x),
              lncarreer_related_reasons=mean(carreer_related_reasons),
              lnSkill_match=mean(skill_match.y),
              lncarreer_unrelated_learning=mean(number_of_skills),
              repository_age=mean(repository_age.y),
              repository_age_squared=mean(repository_age_squared.y),
              user_GH_tenue_months=mean(avg_user_gitHub_tenure),
              ln_average_founding_experience=mean(avg_cumulative_founding_experience),
              personal_enjoyment=mean(personal_enjoyment, na.rm = T)
              )%>%
  ungroup()

#cor table
cor_user_repo_month <- mydata_plus_urm_um_rm_r%>%
  select(Email, RepoNo, ActivityCreateYYYYMM, 
         contributor_programming_output.x,
         skill_match.y,
         carreer_related_reasons,
         number_of_skills,
         user_GH_tenue_months.y,
         repository_age.y,
         repository_age_squared.y,
         IsRepoFounder.y, 
         contributor_programming_output.y,
         personal_enjoyment)%>%
    group_by(Email, RepoNo, ActivityCreateYYYYMM)%>%
    summarise(lnContributor_programming_output=mean(contributor_programming_output.x),
              lnSkill_match=mean(skill_match.y),
              lncarreer_related_reasons=mean(carreer_related_reasons),
              lncarreer_unrelated_learning=mean(number_of_skills),
              repository_age=mean(repository_age.y),
              repository_age_squared=mean(repository_age_squared.y),
              user_GH_tenue_months=mean(user_GH_tenue_months.y),
              lnFounding_experience=mean(IsRepoFounder.y),
              personal_enjoyment=mean(personal_enjoyment, na.rm = T)
              )%>%
  ungroup()%>%
   select(-Email, -RepoNo, -ActivityCreateYYYYMM)%>%
  cor()%>%
   round(2)


   cor_user_repo_month[upper.tri(cor_user_repo_month)]<- c("")
   cor_user_repo_month<-cor_user_repo_month %>%
   as.data.frame()
   
     table_2_part1 <- cbind(1:9,name=rownames(cor_user_repo_month),cor_user_repo_month)%>%
               mutate(name=recode(name,lnContributor_programming_output="ln(Contributor programming output +1)", 
                         lnSkill_match="ln(Skill match+1)", 
                         lncarreer_related_reasons="ln(Career-related reasons +1)", 
                         lncarreer_unrelated_learning="ln(Career-unrelated learning +1)", 
                         repository_age="Repository age (in months)", 
                         repository_age_squared="Repository age (in months), squared", 
                         user_GH_tenue_months="User GitHub tenure (in months)", 
                         lnFounding_experience="ln(Founding experience+1) ",
                         personal_enjoyment="Personal enjoyment"))%>%
          as.data.frame()%>%
     set_colnames(c("","","1", "2", "3", "4", "5", "6", "7", "8", "9"))
   
  
   
table2_no_ob_part1 <- sprintf("Repository-month level (N=%d)", nrow(data_user_repo_month))


cor_repo_month <- mydata_plus_urm_um_rm_r%>%
  select(RepoNo, ActivityCreateYYYYMM, 
         contributor_programming_output.x,
         carreer_related_reasons,
         skill_match.y,
         number_of_skills,
         repository_age.y,
         repository_age_squared.y,
         avg_user_gitHub_tenure,
         avg_cumulative_founding_experience,
         personal_enjoyment)%>%
    group_by(RepoNo, ActivityCreateYYYYMM)%>%
    summarise(lnContributor_programming_output=mean(contributor_programming_output.x),
              lncarreer_related_reasons=mean(carreer_related_reasons),
              lnSkill_match=mean(skill_match.y),
              lncarreer_unrelated_learning=mean(number_of_skills),
              repository_age=mean(repository_age.y),
              repository_age_squared=mean(repository_age_squared.y),
              user_GH_tenue_months=mean(avg_user_gitHub_tenure),
              ln_average_founding_experience=mean(avg_cumulative_founding_experience),
              personal_enjoyment=mean(personal_enjoyment, na.rm = T)
              )%>%
  ungroup()%>%
   select(-RepoNo, -ActivityCreateYYYYMM)%>%
  cor()%>%
   round(2)

      cor_repo_month[upper.tri(cor_repo_month)]<- c("")
   cor_repo_month<-cor_repo_month %>%
   as.data.frame()
   
    table_2_part2 <- cbind(1:9,name=rownames(cor_repo_month),cor_repo_month)%>%
       mutate(name=recode(name,lnContributor_programming_output="ln(Contributor programming output +1)", 
                         lncarreer_related_reasons="ln(Career-related reasons +1)", 
                         lnSkill_match="ln(Skill match+1)", 
                         lncarreer_unrelated_learning="ln(Career-unrelated learning +1)", 
                         repository_age="Repository age (in months)", 
                         repository_age_squared="Repository age (in months), squared", 
                         user_GH_tenue_months="Average user GitHub tenure", 
                         ln_average_founding_experience="ln(Average founding experience+1)",
                         personal_enjoyment="Personal enjoyment"))%>%
   as.data.frame()%>%
     set_colnames(c("","","1", "2", "3", "4", "5", "6", "7", "8", "9"))
       
table2_no_ob_part2 <- sprintf("Repository-month level (N=%d)", nrow(data_repo_month))


Table2_List <- list(table_2_part1,table_2_part2)
attr(Table2_List, "subheadings") <- c(table2_no_ob_part1,table2_no_ob_part2)
xList <- xtableList(Table2_List, caption = 'Correlations', digits = 2)
#print.xtableList(xList, sanitize.subheadings.function = italic,include.rownames=FALSE, caption.placement = "top",floating.environment="sidewaystable")
@
%MINIMAL ADJ'USTMENTS TO FIT STYLE REGULATIONS latex table generated in R 3.4.3 by xtable 1.8-2 package
% Mon Feb 19 20:41:11 2018
\begin{sidewaystable}[ht]
\centering
\caption{Correlations} 
\begin{tabular}{rllllllllll}
  \hline
 &  & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 \\ 
  \hline
\multicolumn{11}{l}{{\emph{ Repository-month level (N=101,403)}}}\\
  1 & ln(Contributor programming output +1) & 1 &  &  &  &  &  &  &  &  \\ 
    2 & ln(Skill match+1) & 0.22 & 1 &  &  &  &  &  &  &  \\ 
    3 & ln(Career-related reasons +1) & 0.03 & 0.1 & 1 &  &  &  &  &  &  \\ 
    4 & ln(Career-unrelated learning +1) & 0.19 & 0.42 & 0.74 & 1 &  &  &  &  &  \\ 
    5 & Repository age (in months) & 0.41 & 0.33 & 0.38 & 0.55 & 1 &  &  &  &  \\ 
    6 & Repository age (in months), squared & 0.32 & 0.3 & 0.31 & 0.45 & 0.95 & 1 &  &  &  \\ 
    7 & User GitHub tenure (in months) & 0.36 & 0.35 & 0.32 & 0.48 & 0.84 & 0.81 & 1 &  &  \\ 
    8 & ln(Founding experience+1)  & -0.35 & -0.23 & -0.32 & -0.46 & -0.63 & -0.46 & -0.51 & 1 &  \\ 
    9 & Personal enjoyment & 0.07 & 0.06 & 0.14 & 0.15 & 0.17 & 0.13 & 0.14 & -0.16 & 1 \\ 
  
\multicolumn{11}{l}{{\emph{ Repository-month level (N=70,088)}}}\\
  1 & ln(Contributor programming output +1) & 1 &  &  &  &  &  &  &  &  \\ 
    2 & ln(Career-related reasons +1) & 0.23 & 1 &  &  &  &  &  &  &  \\ 
    3 & ln(Skill match+1) & 0.28 & 0.15 & 1 &  &  &  &  &  &  \\ 
    4 & ln(Career-unrelated learning +1) & 0.31 & 0.44 & 0.64 & 1 &  &  &  &  &  \\ 
    5 & Repository age (in months) & 0.54 & 0.28 & 0.39 & 0.47 & 1 &  &  &  &  \\ 
    6 & Repository age (in months), squared & 0.44 & 0.23 & 0.34 & 0.4 & 0.95 & 1 &  &  &  \\ 
    7 & Average user GitHub tenure & 0.5 & 0.23 & 0.4 & 0.44 & 0.87 & 0.84 & 1 &  &  \\ 
    8 & ln(Average founding experience+1) & -0.13 & 0.01 & 0.06 & -0.01 & -0.19 & -0.17 & 0.09 & 1 &  \\ 
    9 & Personal enjoyment & 0.1 & 0.06 & 0.08 & 0.1 & 0.18 & 0.14 & 0.14 & -0.03 & 1 \\ 
   \hline
\multicolumn{11}{l}{}\\
\end{tabular}
\end{sidewaystable}
<<fig=FALSE, echo=FALSE>>==
options(scipen=999)

#data_user_repo_month
data_user_repo_month$year <- as.factor(substring(data_user_repo_month$ActivityCreateYYYYMM, 1,4))

 data_user_repo_month1<- data_user_repo_month%>%
  mutate(repository_age=repository_age/100,
         #repository_age_squared=(repository_age_squared)/100,
         user_GH_tenue_months=user_GH_tenue_months/100,
         lnFounding_experience=lnFounding_experience/100,
         lnSkill_match=lnSkill_match/100,
         lncarreer_related_reasons=lncarreer_related_reasons/100,
         lncarreer_unrelated_learning=lncarreer_unrelated_learning/100,
         personal_enjoyment=personal_enjoyment/100,
         Email=factor(Email),
         RepoNo=factor(RepoNo))%>%
   mutate(repository_age_squared=repository_age*repository_age,
     h1=lnSkill_match*lncarreer_related_reasons, 
          h2=lnSkill_match*personal_enjoyment,
          h3=lnSkill_match*lncarreer_unrelated_learning)

dummies <- as.data.frame(model.matrix(~data_user_repo_month$year))%>%
     set_colnames(c("","d2009","d2010", "d2011", "d2012", "d2013", "d2014", "d2015","d2016"))
data_user_repo_month_1 <- (cbind(data_user_repo_month1, dummies))

########

t1.reg1<- plm(lnContributor_programming_output ~ repository_age +
                                   repository_age_squared + 
                                   user_GH_tenue_months+ lnFounding_experience+ 
               d2009 + d2010 + d2011 + d2012 + d2013 + d2014 + d2015 + d2016,
             data=data_user_repo_month_1, index=c("Email"), model="within")
#summary(t1.reg1)
#r.squared(t1.reg1, model="overall")
#mean(fixef(t1.reg1)) ## "Constant"
t1.reg1 <-coeftest(t1.reg1, vcov=vcovHC(t1.reg1,type="HC0",cluster="group"))#clustered Error terms


t1.reg2<- plm(lnContributor_programming_output ~ repository_age +
                                   repository_age_squared + 
                                   user_GH_tenue_months+ 
                                  lnFounding_experience+ 
                                 lncarreer_related_reasons+
                                    lncarreer_unrelated_learning+
                                    lnSkill_match+
               d2009 + d2010 + d2011 + d2012 + d2013 + d2014 + d2015 + d2016+1,
             data=data_user_repo_month_1, index=c("RepoNo"), model="within")



#summary(t1.reg2)
#r.squared(t1.reg2, model="overall")
#mean(fixef(t1.reg2)) ## "Constant"
t1.reg2 <-coeftest(t1.reg2, vcov=vcovHC(t1.reg2,type="HC0",cluster="group"))


t1.reg3<- plm(lnContributor_programming_output ~ repository_age +
                                   repository_age_squared + 
                                   user_GH_tenue_months+ 
                                  lnFounding_experience+ 
                                 lncarreer_related_reasons+
                                    lncarreer_unrelated_learning+
                                    lnSkill_match+
                                personal_enjoyment+
               d2009 + d2010 + d2011 + d2012 + d2013 + d2014 + d2015 + d2016+1,
             data=data_user_repo_month_1, index=c("Email"), model="within")
  
#summary(t1.reg3)
#r.squared(t1.reg3, model="overall")
#mean(fixef(t1.reg3)) ## "Constant"
t1.reg3 <- coeftest(t1.reg3, vcov=vcovHC(t1.reg3,type="HC0",cluster="group"))

## anderes prozedure? teilweise sind die koeffizienten einfach falsch

t1.reg4 <- felm(lnContributor_programming_output ~ repository_age +
                                   repository_age_squared + 
                                   user_GH_tenue_months+ 
                                  lnFounding_experience+ 
                                 lncarreer_related_reasons+
                                    lncarreer_unrelated_learning+
                                    lnSkill_match+
               d2009 + d2010 + d2011 + d2012 + d2013 + d2014 + d2015 + d2016+
                G(Email)+G(RepoNo), data=data_user_repo_month_1)
#summary(t1.reg4)

t1.reg5<- plm(lnContributor_programming_output ~ repository_age +
                                   repository_age_squared + 
                                   user_GH_tenue_months+ 
                                  lnFounding_experience+ 
                                 lncarreer_related_reasons+
                                    lncarreer_unrelated_learning+
                                    lnSkill_match+
                                personal_enjoyment+
                h1+
               d2009 + d2010 + d2011 + d2012 + d2013 + d2014 + d2015 + d2016+1,
             data=data_user_repo_month_1, index=c("Email"), model="within")
  
#summary(t1.reg5)
#r.squared(t1.reg5, model="overall")

#mean(fixef(t1.reg5)) ## "Constant"
t1.reg5 <-coeftest(t1.reg5, vcov=vcovHC(t1.reg5,type="HC0",cluster="group"))

t1.reg6<- plm(lnContributor_programming_output ~ repository_age +
                                   repository_age_squared + 
                                   user_GH_tenue_months+ 
                                  lnFounding_experience+ 
                                 lncarreer_related_reasons+
                                    lncarreer_unrelated_learning+
                                    lnSkill_match+
                                personal_enjoyment+
                h2+
               d2009 + d2010 + d2011 + d2012 + d2013 + d2014 + d2015 + d2016+1,
             data=data_user_repo_month_1, index=c("Email"), model="within")
  
#summary(t1.reg6)
#r.squared(t1.reg6, model="overall")

#mean(fixef(t1.reg6)) ## "Constant"

t1.reg6<-coeftest(t1.reg6, vcov=vcovHC(t1.reg6,type="HC0",cluster="group"))

t1.reg7<- plm(lnContributor_programming_output ~ repository_age +
                                   repository_age_squared + 
                                   user_GH_tenue_months+ 
                                  lnFounding_experience+ 
                                 lncarreer_related_reasons+
                                    lncarreer_unrelated_learning+
                                    lnSkill_match+
                                personal_enjoyment+
                h3+
               d2009 + d2010 + d2011 + d2012 + d2013 + d2014 + d2015 + d2016+1,
             data=data_user_repo_month_1, index=c("Email"), model="within")
  
#summary(t1.reg7)
#r.squared(t1.reg7, model="overall")
#mean(fixef(t1.reg7)) ## "Constant"
t1.reg7<-coeftest(t1.reg7, vcov=vcovHC(t1.reg7,type="HC0",cluster="group"))

t1.reg8<- plm(lnContributor_programming_output ~ repository_age +
                                   repository_age_squared + 
                                   user_GH_tenue_months+ 
                                  lnFounding_experience+ 
                                 lncarreer_related_reasons+
                                    lncarreer_unrelated_learning+
                                    lnSkill_match+
                                personal_enjoyment+
                h1+h2+h3+
               d2009 + d2010 + d2011 + d2012 + d2013 + d2014 + d2015 + d2016+1,
             data=data_user_repo_month_1, index=c("Email"), model="within")
  
#summary(t1.reg8)
#r.squared(t1.reg8, model="overall")
#mean(fixef(t1.reg8)) ## "Constant"

t1.reg8<- coeftest(t1.reg8, vcov=vcovHC(t1.reg8,type="HC0",cluster="group"))


 t1.reg9 <- censReg(lnContributor_programming_output ~ repository_age + ##tobit
                                  repository_age_squared + 
                                  user_GH_tenue_months+ 
                                  lnFounding_experience+ 
                                  lncarreer_related_reasons+
                                  lncarreer_unrelated_learning+
                                  lnSkill_match+
                                  personal_enjoyment+
                h1+h2+h3+ 
                  d2009 + d2010 + d2011 + d2012 + d2013 + d2014 + d2015 + d2016, right = Inf, left = 0,
             data=data_user_repo_month_1)
#summary(t1.reg9)
# 
# silence<-   vif(t1.reg1) # variance inflation factors 
# silence<- sqrt(vif(t1.reg1)) > 2 # problem?
# silence<-   vif(t1.reg2) # variance inflation factors 
# silence<- sqrt(vif(t1.reg2)) > 2 # problem?
# silence<-   vif(t1.reg3) # variance inflation factors 
# silence<- sqrt(vif(t1.reg3)) > 2 # problem?
# silence<-   vif(t1.reg4) # variance inflation factors 
# silence<- sqrt(vif(t1.reg4)) > 2 # problem?
# silence<-   vif(t1.reg5) # variance inflation factors 
# silence<- sqrt(vif(t1.reg5)) > 2 # problem?
# silence<-   vif(t1.reg6) # variance inflation factors 
# silence<- sqrt(vif(t1.reg6)) > 2 # problem?
# silence<-   vif(t1.reg7) # variance inflation factors 
# silence<- sqrt(vif(t1.reg7)) > 2 # problem?
# silence<-   vif(t1.reg8) # variance inflation factors 
# silence<- sqrt(vif(t1.reg8)) > 2 # problem?
# silence<-   vif(t1.reg9) # variance inflation factors 
# silence<- sqrt(vif(t1.reg9)) > 2 # problem?

@


<<fig=FALSE, echo=FALSE>>==
# stargazer(t1.reg1, t1.reg2, t1.reg3,t1.reg4,t1.reg5, t1.reg6, t1.reg7, t1.reg8, t1.reg9, float = FALSE, results="text",  omit=c( "d2008",
#                   "d2009",
#                   "d2010",
#                   "d2011",
#                   "d2012",
#                   "d2013",
#                   "d2014",
#                   "d2015",
#                   "d2016"),
#           report = ('vc*p'), star.cutoffs = NA, digits = 2, float.env = "sidewaystable",
#            covariate.labels = c("Repository age (in months) (/100)" , 
#                                "Repository age (in months) (/100), squared",
#                                "User GitHub tenure (in months) (/100)",
#                                "ln(Founding experience+1) (/100)",
#                                "ln(Career-related reasons+1) (/100)",
#                                "ln(Career-unrelated learning+1) (/100)",
#                                "ln(Skill match+1) (/100)",
#                                "Personal enjoyment (/100)",
#                                                               "H1: ln(Skill match+1) (/100) x ln(Career-related reasons+1) (/100)",
#                                "H2: ln(Skill match+1) (/100) x Personal enjoyment (/100)",
#                                 "H3: ln(Skill match+1) (/100) x ln(Career-unrelated learning+1) (/100)"),
#                     dep.var.caption="", title = "User-repository monthly output and repository-specific characteristics",
#           dep.var.labels.include = FALSE)
@


% #again in order fit the style regulations some adjustmens have been made with the latex code, if intereted compare to previous latex code
\renewcommand{\arraystretch}{0.6}
\begin{sidewaystable}[ht]
  \caption{User-repository monthly output and repository-specific characteristics} 
% Table created by stargazer v.5.2 by Marek Hlavac, Harvard University. E-mail: hlavac at fas.harvard.edu
% Date and time: Mo, Feb 19, 2018 - 16:07:29
% Requires LaTeX packages: rotating 
\resizebox{\textwidth}{!}{\begin{tabular}{lccccccccc} 

\\[-1.8ex]\hline 

 \\[-1.8ex] & (1) & (2) & (3) & (4) & (5) & (6) & (7) & (8) & (9)\\
  \\[-1.8ex] DV: Contributor programming output  & OLS, & OLS, & OLS, & OLS, & OLS, & OLS, & OLS, & OLS, & Tobit\\
  \\[-1.8ex] (natural log)& User fixed & Repo fixed & User fixed & two-way& User fixed & User fixed & User fixed & User fixed & \\
  \\[-1.8ex] & effects & effects & effects & fixed effects & effects & effects & effects & effects & \\

\hline \\[-1.8ex] 
 Repository age (in months) (/100) & 0.25 & 0.88 & 0.39 & $-$7.80 & 0.40 & 0.39 & 0.39 & 0.40 & 1.50 \\ 
  & (0.00) & (0.00) & (0.00) & (0.00) & (0.00) & (0.00) & (0.00) & (0.00) & (0.00) \\ 
  & & & & & & & & & \\ 
 Repository age (in months) (/100), squared & $-$0.67 & $-$0.58 & $-$0.62 & $-$0.56 & $-$0.67 & $-$0.63 & $-$0.63 & $-$0.66 & $-$1.60 \\ 
  & (0.00) & (0.00)& (0.00) & (0.00) & (0.00) & (0.00) & (0.00) & (0.00) & (0.00) \\ 
  & & & & & & & & & \\ 
 User GitHub tenure (in months) (/100) & 0.75 & 0.14 & 0.63 & 8.70 & 0.64 & 0.62 & 0.63 & 0.63 & 0.32 \\ 
  & (0.00) & (0.00)& (0.00) & (0.00) & (0.00) & (0.00) & (0.00) & (0.00) &(0.00) \\ 
  & & & & & & & & & \\ 
 ln(Founding experience+1) (/100) & $-$1.20 & $-$3.60 & $-$1.10 & $-$2.80 & $-$1.10 & $-$1.10 & $-$1.10 & $-$1.00 & 8.90 \\ 
  & (0.00) & (0.00) & (0.00) &(0.00) &(0.00) & (0.00) & (0.00) &(0.00) & (0.78) \\ 
  & & & & & & & & & \\ 
  
  
 ln(Career-related reasons+1) (/100) &  & $-$3.70 & $-$6.70 & $-$2.20 & $-$8.80 & $-$6.80 & $-$7.00 & $-$9.00 & $-$26.00 \\ 
  &  & (0.03) & (0.00) & (0.00) & (0.00) & (0.00)& (0.00) &(0.00) & (0.00) \\ 
  & & & & & & & & & \\ 
 ln(Career-unrelated learning+1) (/100) &  & $-$0.61 & 0.18 & 0.63 & 1.20 & 0.23 & 0.15 & 1.60 & 1.60 \\ 
  &  & (0.23) & (0.68) & (0.08) & (0.01) & (0.59) & (0.73) &(0.00) & (0.01) \\ 
  & & & & & & & & & \\ 
 ln(Skill match+1) (/100) &  & 1.40 & 2.30 & 1.90 & 0.20 & 0.98 & 0.83 & 1.30 & $-$0.03 \\ 
  &  & (0.00) & (0.00) & (0.00) & (0.76) & (0.12) & (0.43) & (0.21) & (0.98) \\ 
  & & & & & & & & & \\ 
 Personal enjoyment (/100) &  & -- & $-$1.30 & -- & $-$1.30 & $-$2.40 & $-$1.30 & $-$2.20 & $-$8.90 \\ 
  &  &  & (0.06) &  & (0.06) & (0.00) & (0.06) &  (0.00) & (0.00) \\ 
  & & & & & & & & & \\ 
\begin{tabular}{ll}
 H1: ln(Skill match+1) (/100) x\\ ln(Career-related
 reasons+1) (/100)\\
\end{tabular}  &  &  &  &  & 133.00 &  &  & 183.00 & 579.00 \\ 
  &  &  &  &  & (0.00) &  &  & (0.00) & (0.00) \\ 
  & & & & & & & & & \\ 
 H2: ln(Skill match+1) (/100) x\\ Personal enjoyment (/100) &  &  &  &  &  & 149.00 &  & 119.00 & 403.00 \\ 
  &  &  &  &  &  &(0.03) &  & (0.09) & (0.00) \\ 
  & & & & & & & & & \\ 
\begin{tabular}{ll}
 H3: ln(Skill match+1) (/100) x \\ln(Career-unrelated
 learning+1) (/100)\\
\end{tabular}&  &  &  &  &  &  & 62.00 & $-$126.00 & $-$347.00 \\ 
  &  &  &  &  &  &  & (0.13) & (0.00) & (0.00) \\ 
  & & & & & & & & & \\ 
  Constant &0.09  &0.15  & 0.13 &  &0.15  & 0.14 & 0.14 & 0.16 & $-$4.70 \\ 
  & &  &  &  &  &  &  &  & (0.84) \\ 

  Time Dummies (year) &YES  &YES  & YES & YES &YES  &YES  &  YES&  YES& YES \\ 
  & & & & & & & & & \\ 
 \\[-1.8ex] 
Observations &  101,403& 101,403 & 101,403 & 101,403 & 101,403 &101,403  & 101,403 &101,403  & 101,403 \\ 
R-squared (between) & 0.15 & 0.05 & 0.18 &  & 0.18 & 0.18 & 0.18 & 0.18 &\\ 
R-squared (overall) &0.18  & 0.24 & 0.23 & 0.37 &  0.23& 0.23 & 0.23 & 0.23 &  \\ 

\hline 

\multicolumn{9}{l}{\textit{P-values} in parentheses; Error terms clustered by user (Models 1, 3, 5-8) and repository (Model 2) }   \\ \\
\multicolumn{10}{l}{Note that due to the time-invariant nature, the variable \textit{Personal enjoyment} gets dropped from OLS models which account for repository-specific fixed effects } \\
\multicolumn{10}{l}{- Models 2 and 4. }\\
\multicolumn{10}{l}{Note that due to the re-scaling of independent variables (/100), the coefficient estimates for testing H1-H3 correspond to the true coefficients multiplied by 10,000.}

\end{tabular} }


\end{sidewaystable}




<<fig=FALSE, echo=FALSE>>==
##########################################################################################
##vielleicht muss man dem programm sagen, was inwiefern welche variable ist...


data_repo_month$year <- as.factor(substring(data_repo_month$ActivityCreateYYYYMM, 1,4))

data_repo_month1 <- data_repo_month%>%
  mutate(repository_age=repository_age/100,
         user_GH_tenue_months=user_GH_tenue_months/100,
         ln_average_founding_experience=ln_average_founding_experience/100,
         lncarreer_related_reasons=lncarreer_related_reasons/100,
         lncarreer_unrelated_learning=lncarreer_unrelated_learning/100,
         lnSkill_match = lnSkill_match/100, 
         personal_enjoyment=personal_enjoyment/100,
         RepoNo <- as.factor(RepoNo)
  )%>%
 mutate(repository_age_squared=repository_age*repository_age,
        h4a=lnSkill_match* lncarreer_related_reasons, 
        h4b=lnSkill_match*personal_enjoyment,
        h4c=lnSkill_match*lncarreer_unrelated_learning)


dummies <- as.data.frame(model.matrix(~data_repo_month$year))%>%
     set_colnames(c("","d2009","d2010", "d2011", "d2012", "d2013", "d2014", "d2015","d2016"))
data_repo_month_1 <- (cbind(data_repo_month1, dummies))

t2.reg1<- plm(lnContributor_programming_output ~ repository_age +
                                   repository_age_squared + 
                                   user_GH_tenue_months+ ln_average_founding_experience+ 
               d2009 + d2010 + d2011 + d2012 + d2013 + d2014 + d2015 + d2016,
             data=data_repo_month_1, index=c("RepoNo"), model="within")
#summary(t2.reg1)
#mean(fixef(t2.reg1)) ## "Constant"
t2.reg1.0 <-coeftest(t2.reg1, vcov=vcovHC(t2.reg1,type="HC0",cluster="group"))#clustered Error terms

t2.reg2<- plm(lnContributor_programming_output ~ repository_age +
                                   repository_age_squared + 
                                   user_GH_tenue_months+ ln_average_founding_experience+ 
                lncarreer_related_reasons+
                lncarreer_unrelated_learning+
                lnSkill_match+
               d2009 + d2010 + d2011 + d2012 + d2013 + d2014 + d2015 + d2016,
             data=data_repo_month_1, index=c("RepoNo"), model="within")
#summary(t2.reg2)
#mean(fixef(t2.reg2)) ## "Constant"
t2.reg2.0 <-coeftest(t2.reg2, vcov=vcovHC(t2.reg2,type="HC0",cluster="group"))#clustered Error terms

t2.reg3<- plm(lnContributor_programming_output ~ repository_age +
                                   repository_age_squared + 
                                   user_GH_tenue_months+ ln_average_founding_experience+ 
                lncarreer_related_reasons+
                lncarreer_unrelated_learning+
                lnSkill_match+
                h4a+
               d2009 + d2010 + d2011 + d2012 + d2013 + d2014 + d2015 + d2016,
             data=data_repo_month_1, index=c("RepoNo"), model="within")
#summary(t2.reg3)
#mean(fixef(t2.reg3)) ## "Constant"
t2.reg3.0 <-coeftest(t2.reg3, vcov=vcovHC(t2.reg3,type="HC0",cluster="group"))#clustered Error terms

t2.reg4<- plm(lnContributor_programming_output ~ repository_age +
                                   repository_age_squared + 
                                   user_GH_tenue_months+ ln_average_founding_experience+ 
                lncarreer_related_reasons+
                lncarreer_unrelated_learning+
                lnSkill_match+
                h4b+
               d2009 + d2010 + d2011 + d2012 + d2013 + d2014 + d2015 + d2016,
             data=data_repo_month_1, index=c("RepoNo"), model="within")
#summary(t2.reg4)
#mean(fixef(t2.reg4)) ## "Constant"
t2.reg4.0 <-coeftest(t2.reg4, vcov=vcovHC(t2.reg4,type="HC0",cluster="group"))#clustered Error terms

t2.reg5<- plm(lnContributor_programming_output ~ repository_age +
                                   repository_age_squared + 
                                   user_GH_tenue_months+ ln_average_founding_experience+ 
                lncarreer_related_reasons+
                lncarreer_unrelated_learning+
                lnSkill_match+
                h4c+
               d2009 + d2010 + d2011 + d2012 + d2013 + d2014 + d2015 + d2016,
             data=data_repo_month_1, index=c("RepoNo"), model="within")
#summary(t2.reg5)
#mean(fixef(t2.reg5)) ## "Constant"
t2.reg5.0 <-coeftest(t2.reg5, vcov=vcovHC(t2.reg5,type="HC0",cluster="group"))#clustered Error terms

t2.reg6<- plm(lnContributor_programming_output ~ repository_age +
                                   repository_age_squared + 
                                   user_GH_tenue_months+ ln_average_founding_experience+ 
                lncarreer_related_reasons+
                lncarreer_unrelated_learning+
                lnSkill_match+
                h4a+
                h4b+
                h4c+
               d2009 + d2010 + d2011 + d2012 + d2013 + d2014 + d2015 + d2016,
             data=data_repo_month_1, index=c("RepoNo"), model="within")
#summary(t2.reg6)
#mean(fixef(t2.reg6)) ## "Constant"
t2.reg6.0 <- coeftest(t2.reg6, vcov=vcovHC(t2.reg6,type="HC0",cluster="group"))#clustered Error terms

r121<- r.squared(t2.reg1, model="overall")
r122<-r.squared(t2.reg2, model="overall")
r123<-r.squared(t2.reg3, model="overall")
r124<-r.squared(t2.reg4, model="overall")
r125<-r.squared(t2.reg5, model="overall")
r126<-r.squared(t2.reg6, model="overall")

r121<- r.squared(t2.reg1, model="between")
r122<-r.squared(t2.reg2, model="between")
r123<-r.squared(t2.reg3, model="between")
r124<-r.squared(t2.reg4, model="between")
r125<-r.squared(t2.reg5, model="between")
r126<-r.squared(t2.reg6, model="between")

# silence<-   vif(t2.reg1) # variance inflation factors 
# silence<- sqrt(vif(t2.reg1)) > 2 # problem?
# silence<-   vif(t2.reg2) # variance inflation factors 
# silence<- sqrt(vif(t2.reg2)) > 2 # problem?
# silence<-   vif(t2.reg3) # variance inflation factors 
# silence<- sqrt(vif(t2.reg3)) > 2 # problem?
# silence<-   vif(t2.reg4) # variance inflation factors 
# silence<- sqrt(vif(t2.reg4)) > 2 # problem?
# silence<-   vif(t2.reg5) # variance inflation factors 
# silence<- sqrt(vif(t2.reg5)) > 2 # problem?
# silence<-   vif(t2.reg6) # variance inflation factors 
# silence<- sqrt(vif(t2.reg6)) > 2 # problem?



#subsample for to coders
## top.coders<- subset( lncontributer oding output>90%sum(contributer coding output))
## run same regressios as above



# stargazer(t2.reg1.0, t2.reg2.0, t2.reg3.0,t2.reg4.0,t2.reg5.0, t2.reg6.0, float = FALSE,   omit=c( "d2008",
#                   "d2009",
#                   "d2010",
#                   "d2011",
#                   "d2012",
#                   "d2013",
#                   "d2014",
#                   "d2015",
#                   "d2016"),
#           report = ('vc*p'), star.cutoffs = NA, digits = 2, float.env = "sidewaystable",
#            covariate.labels = c("Repository age (in months) (/100)" , 
#                                "Repository age (in months) (/100), squared",
#                                "Average user GitHub tenure (in months) (/100)",
#                                "ln(Average founding experience+1) (/100)",
#                                "ln(Career-related reasons+1) (/100)",
#                                "ln(Career-unrelated learning+1) (/100)",
#                                "ln(Skill match+1) (/100)",
#                                 "H4: ln(Skill match+1) (/100) x ln(Career-related reasons+1) (/100) ",
#                                "H4: ln(Skill match+1) (/100) x Personal enjoyment (/100)",
#                                 "H4: ln(Skill match+1) (/100) x ln(Career-unrelated learning+1) (/100) "),
#                     dep.var.caption="", title = "Repository monthly output and repository-specific characteristics",
#           dep.var.labels.include = FALSE)



@



\begin{table}
    \centering

   \caption{Repository monthly output and repository-specific characteristics}

\resizebox{\textwidth}{!}{\begin{tabular}{lcccccc} 
\\[-1.8ex]
\hline \\[-1.8ex] 
\\[-1.8ex] & (1) & (2) & (3) & (4) & (5) & (6)\\ 
 DV: Contributor programming output  & OLS, & OLS, & OLS, & OLS, & OLS, & OLS,\\
 (natural log)& Repo fixed  & Repo fixed  & Repo fixed  & Repo fixed  & Repo fixed  & Repo fixed \\
 & effects & effects & effects & effects & effects & effects\\
\hline \\[-1.8ex] 
 Repository age (in months) (/100) & 1.10 & 1.10 & 1.10 & 1.10 & 1.10 & 1.10 \\ 
  &(0.00) & (0.00) & (0.00) & (0.00) & (0.00) & (0.00) \\ 
  & & & & & & \\ 
 Repository age (in months) (/100), squared & $-$0.67 & $-$0.66 & $-$0.67 & $-$0.66 & $-$0.66 & $-$0.67 \\ 
  & (0.00) & (0.00)& (0.00) & (0.00) & (0.00) & (0.00) \\ 
  & & & & & & \\ 
 Average user GitHub tenure (in months) (/100) & 0.09 & 0.20 & 0.20 & 0.20 & 0.20 & 0.19 \\ 
  & (0.00) & (0.00) & (0.00)&(0.00) &(0.00) & (0.00) \\ 
  & & & & & & \\ 
 ln(Average founding experience+1) (/100) & 1.80 & $-$1.07 & $-$0.90 & $-$1.01 & $-$1.02 & $-$1.00 \\ 
  &(0.00) & (0.00) & (0.00) & (0.00) & (0.00) & (0.00) \\ 
  & & & & & & \\ 
 ln(Career-related reasons+1) (/100) &  & 72.00 & 66.10 & 72.00 & 72.00 & 70.70 \\ 
  &  & (0.00) & (0.00) &(0.00) & (0.00) & (0.00) \\ 
  & & & & & & \\ 
 ln(Career-unrelated learning+1) (/100) &  & $-$1.50 & $-$1.50 & $-$1.50 & $-$1.40 & $-$1.20 \\ 
  &  & (0.00) & (0.00) & (0.00) & (0.00) & (0.02) \\ 
  & & & & & & \\ 
 ln(Skill match+1) (/100) &  & 1.90 & $-$1.90 & 2.30 & 1.60 & $-$0.43 \\ 
  &  & (0.00) & (0.27) & (0.07) & (0.00) & (0.78) \\ 
  Personal enjoyment (/100) &  & -- & --& -- & -- & -- \\ 
  & & & & & & \\ 
  \begin{tabular}{ll}
 H4: ln(Skill match+1) (/100) x\\ 
 ln(Career-related reasons+1) (/100)\\
\end{tabular}
  
    &  &  & 373.00 &  &  & 422.00 \\ 
  &  &  & (0.01) &  &  &(0.00) \\ 
  & & & & & & \\ 
  \begin{tabular}{ll}
 H4: ln(Skill match+1) (/100) x \\Personal enjoyment (/100)\end{tabular} &  &  &  & $-$69.00 &  & $-$62.00 \\ 
  &  &  &  & (0.77) &  & (0.76) \\ 
  & & & & & & \\ 
 \begin{tabular}{ll}
 H4: ln(Skill match+1) (/100) x \\
 ln(Career-unrelated learning+1) (/100)  \end{tabular}&  &  &  &  & $-$3.00 & $-$72.00 \\ 
  &  &  &  &  & (0.43) & (0.07) \\ 
  & & & & & & \\ 
  Constant &-0.09  &-0.30  & -0.66 &-0.70  &0.73  & 0.60  \\ 
  & &  &  &  &  &   \\ 

  Time Dummies (year) &YES  &YES  & YES & YES &YES  &YES   \\ 
  & &  &  &  &  & \\ 
 \\[-1.8ex] 
Observations &  70,088& 70,088 & 70,088 & 70,088 & 70,088 &70,088\\ 
R-squared (between) &0.09 & 0.56& 0.56 & 0.56 & 0.56 & 0.56\\ 
R-squared (overall) &0.34  & 0.35 & 0.35 & 0.35 &  0.35& 0.35  \\

\hline 

\multicolumn{7}{l}{\textit{P-values} in parentheses; Error terms clustered by repository }   \\ \\

\multicolumn{7}{l}{Note that due to the time-invariant nature, the variable \textit{Personal enjoyment} gets dropped from the OLS models we run as they } \\
\multicolumn{7}{l}{account for repository-specific fixed effects.} \\
\multicolumn{7}{l}{Note that due to the re-scaling of independent variables (/100), the coefficient estimates for testing H4 correspond to the true}\\
\multicolumn{7}{l}{
coefficients multiplied by 10,000.}
\end{tabular} }
\end{table}


<<fig=FALSE, echo=FALSE>>==
#übergang
rm(list=ls())
@




%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
<<fig=FALSE, echo=FALSE>>==
dataset1 <- "https://www.dropbox.com/s/5037dzjjjin7v5y/20170301_dataset.dta?raw=1"
dataset2 <-"https://www.dropbox.com/s/bitqs0diufp90r0/20170303_dataset_Unmatched_reduced.dta?raw=1"

#stil tabelle
large <- function(x){
  paste0('{\\Large{\\bfseries ', x, '}}')
}
italic <- function(x){
  paste0('{\\emph{ ', x, '}}')
}
bold <- function(x){
  paste0('{\\bfseries ', x, '}')
}
red <- function(x){
  paste0('{\\color{red} ', x, '}')
}
@

<<fig=FALSE, echo=FALSE>>==
mydata_unmatched <- read.dta(dataset2)
mydata <- read.dta(dataset1)
#create cumulative vector as in p.19  for GH
language_requirement_vector_GH <-  mydata_unmatched[,c(82:137)]

#create cumulative vector as in p.19  for SO
Cumulative_no_of_answers_SO<-  mydata_unmatched[,c(24:79)]
#multiply
mydata_unmatched$skill_match<- rowSums(language_requirement_vector_GH*Cumulative_no_of_answers_SO)

###############################################################################################################################
User_repository_month_level <- mydata_unmatched %>%
  group_by(UserName, RepoNo, ActivityCreateYYYYMM) %>%  ##USERNAME=USER, REPONO=REPOSITRY,ACTIVITYCREATEYYYYMM=MONTHS
  summarise(contributor_programming_output=log(sum(ActivityType==1)+1), skill_match=mean(log(skill_match+1)))

#table construction
table_1_part1<- User_repository_month_level%>% 
  ungroup()%>%
  melt(id.vars=c("UserName", "RepoNo", "ActivityCreateYYYYMM"))%>% 
  group_by(variable)%>%
  summarise(Mean=mean(value), 
            "Std. dev."=sd(value), 
            Min=min(value),
            Max=max(value))  %>%
  mutate(variable=recode(variable,contributor_programming_output="ln(Contributor programming output+1)", skill_match="ln(Skill match+1)")) %>%
  set_colnames(c("", "Mean", "Std. dev.", "Min", "Max")) %>%
  as.data.frame()

table1_no_ob_part1 <- sprintf("User-repository-month level(N=%d)", nrow(User_repository_month_level))
###############################################################################################################################

#User GitHub tenue (in month)
activity_created<- ymd(mydata_unmatched$ActivityAt) #parse months
user_created <- ymd(mydata_unmatched$UserCreatedat)#parse months
#mydata_unmatched$user_GH_tenue_months <- interval(user_created,activity_created) %/% months(1) #calculate difference in months

mydata_unmatched$user_GH_tenue_months <- interval(user_created,activity_created) %/% days(1) #calculate difference in months
mydata_unmatched$user_GH_tenue_months <- mydata_unmatched$user_GH_tenue_months/30

###############################################################################################################################
#user months level

#get first founding




###############

User_month_level_v001 <- mydata_unmatched %>%
  group_by(UserName, RepoNo) %>%
  summarise(IsRepoFounder=max(IsRepoFounder),
            ActivityCreateYYYYMM = min(ActivityCreateYYYYMM))

User_month_level_v001 <- mydata_unmatched %>%
  group_by(UserName, RepoNo) %>%
  summarise(IsRepoFounder_single=max(IsRepoFounder),
            ActivityCreateYYYYMM = min(ActivityCreateYYYYMM)) %>%
  ungroup()%>%
  group_by(UserName, ActivityCreateYYYYMM, RepoNo) 

zwischenjoin<- left_join(mydata_unmatched, User_month_level_v001) 

User_month_level <- zwischenjoin %>%
  group_by(UserName, ActivityCreateYYYYMM) %>%
  summarise(user_GH_tenue_months= max(user_GH_tenue_months),
            IsRepoFounder=log(sum(IsRepoFounder_single)+1))%>%
  replace_na(list(IsRepoFounder = 0))

############


#%>%
#mutate(IsRepoFounder=log(lag(IsRepoFounder, 1, 0)+1)) #nimmt immer das von der beobachtung davor, 
#founding experience must be prior to given month(warum ist das eigentlich gelagged wenn mit 21 verglichen) andere datei! 

#table construction
table_1_part2<- User_month_level%>% 
  ungroup()%>%
  melt(id.vars=c("UserName", "ActivityCreateYYYYMM"))%>% 
  group_by(variable)%>% 
  summarise(Mean=mean(value), 
            "Std. dev."=sd(value), 
            Min=min(value),
            Max=max(value))  %>%
  mutate(variable=recode(variable,user_GH_tenue_months="User GitHub tenure (in months)", IsRepoFounder="ln(Founding experience+1)")) %>%
  set_colnames(c("", "Mean", "Std. dev.", "Min", "Max")) %>%
  as.data.frame()

table1_no_ob_part2 <- sprintf("User-repository-month level(N=%d)", nrow(User_month_level))


#gesamttabelle 1
Table1_List <- list(table_1_part1,table_1_part2)
attr(Table1_List, "subheadings") <- c(table1_no_ob_part1,table1_no_ob_part2)
xList <- xtableList(Table1_List)
#print.xtableList(xList, sanitize.subheadings.function = italic,include.rownames=FALSE)

###############################################################################################################################
###repo-month
activity_created<- parse_date_time(mydata_unmatched$ActivityCreateYYYYMM, "ym") #parse months
repo_created <- parse_date_time(mydata_unmatched$RepoCreate, "ym")#parse months
mydata_unmatched$repository_age <- interval(repo_created, activity_created) %/% months(1) #calculate difference in months
mydata_unmatched$repository_age_squared <- (mydata_unmatched$repository_age)^2

repo_created <- ymd(mydata_unmatched$RepoCreatedat) ## nach hinweis
activity_created <- ymd(mydata_unmatched$ActivityAt)
mydata_unmatched$repository_age <- interval(repo_created, activity_created) %/% days()
mydata_unmatched$repository_age <- mydata_unmatched$repository_age/30
mydata_unmatched$repository_age_squared <- (mydata_unmatched$repository_age)^2

library(stringr) #rename variables as they cause a problem in latex
names(mydata_unmatched)[24:79] <- gsub("_", "a", str_sub(variable.names(mydata_unmatched)[24:79], 1, str_length(variable.names(mydata_unmatched)[24:79])-1))
##unrelated learingin

pre_skill_stock<- mydata_unmatched%>%
  group_by(ActivityCreateYYYYMM, UserName)%>%
  select(UserName,UserName, ActivityCreateYYYYMM, Aa1:Aa56) %>%
  distinct(UserName, ActivityCreateYYYYMM, .keep_all = TRUE)%>%
  arrange(UserName, ActivityCreateYYYYMM) 

cols <- variable.names(pre_skill_stock)[3:58]
cols<- sprintf("%03sa",cols)
pre_skill_stock<- setDT(pre_skill_stock)[,(cols):= list(shift(Aa1, n = 1, fill=NA, type="lead"), #eine periode nach hinten verschieben
                                                        shift(Aa2, n = 1, fill=NA, type="lead"),
                                                        shift(Aa3, n = 1, fill=NA, type="lead"),
                                                        shift(Aa4, n = 1, fill=NA, type="lead"),
                                                        shift(Aa5, n = 1, fill=NA, type="lead"),
                                                        shift(Aa6, n = 1, fill=NA, type="lead"),
                                                        shift(Aa7, n = 1, fill=NA, type="lead"),
                                                        shift(Aa8, n = 1, fill=NA, type="lead"),
                                                        shift(Aa9, n = 1, fill=NA, type="lead"),
                                                        shift(Aa10, n = 1, fill=NA, type="lead"),
                                                        shift(Aa11, n = 1, fill=NA, type="lead"),
                                                        shift(Aa12, n = 1, fill=NA, type="lead"),
                                                        shift(Aa13, n = 1, fill=NA, type="lead"),
                                                        shift(Aa14, n = 1, fill=NA, type="lead"),
                                                        shift(Aa15, n = 1, fill=NA, type="lead"),
                                                        shift(Aa16, n = 1, fill=NA, type="lead"),
                                                        shift(Aa17, n = 1, fill=NA, type="lead"),
                                                        shift(Aa18, n = 1, fill=NA, type="lead"),
                                                        shift(Aa19, n = 1, fill=NA, type="lead"),
                                                        shift(Aa20, n = 1, fill=NA, type="lead"),
                                                        shift(Aa21, n = 1, fill=NA, type="lead"),
                                                        shift(Aa22, n = 1, fill=NA, type="lead"),
                                                        shift(Aa23, n = 1, fill=NA, type="lead"),
                                                        shift(Aa24, n = 1, fill=NA, type="lead"),
                                                        shift(Aa25, n = 1, fill=NA, type="lead"),
                                                        shift(Aa26, n = 1, fill=NA, type="lead"),
                                                        shift(Aa27, n = 1, fill=NA, type="lead"),
                                                        shift(Aa28, n = 1, fill=NA, type="lead"),
                                                        shift(Aa29, n = 1, fill=NA, type="lead"),
                                                        shift(Aa30, n = 1, fill=NA, type="lead"),
                                                        shift(Aa31, n = 1, fill=NA, type="lead"),
                                                        shift(Aa32, n = 1, fill=NA, type="lead"),
                                                        shift(Aa33, n = 1, fill=NA, type="lead"),
                                                        shift(Aa34, n = 1, fill=NA, type="lead"),
                                                        shift(Aa35, n = 1, fill=NA, type="lead"),
                                                        shift(Aa36, n = 1, fill=NA, type="lead"),
                                                        shift(Aa37, n = 1, fill=NA, type="lead"),
                                                        shift(Aa38, n = 1, fill=NA, type="lead"),
                                                        shift(Aa39, n = 1, fill=NA, type="lead"),
                                                        shift(Aa40, n = 1, fill=NA, type="lead"),
                                                        shift(Aa41, n = 1, fill=NA, type="lead"),
                                                        shift(Aa42, n = 1, fill=NA, type="lead"),
                                                        shift(Aa43, n = 1, fill=NA, type="lead"),
                                                        shift(Aa44, n = 1, fill=NA, type="lead"),
                                                        shift(Aa45, n = 1, fill=NA, type="lead"),
                                                        shift(Aa46, n = 1, fill=NA, type="lead"),
                                                        shift(Aa47, n = 1, fill=NA, type="lead"),
                                                        shift(Aa48, n = 1, fill=NA, type="lead"),
                                                        shift(Aa49, n = 1, fill=NA, type="lead"),
                                                        shift(Aa50, n = 1, fill=NA, type="lead"),
                                                        shift(Aa51, n = 1, fill=NA, type="lead"),
                                                        shift(Aa52, n = 1, fill=NA, type="lead"),
                                                        shift(Aa53, n = 1, fill=NA, type="lead"),
                                                        shift(Aa54, n = 1, fill=NA, type="lead"),
                                                        shift(Aa55, n = 1, fill=NA, type="lead"),
                                                        shift(Aa56, n = 1, fill=NA, type="lead")
), by=c("UserName")]




pre_skill_stock1<- pre_skill_stock %>%
  mutate(A1=coalesce(as.numeric(Aa1a),as.numeric(Aa1)),
         A2=coalesce(as.numeric(Aa2a),as.numeric(Aa2)),
         A3=coalesce(as.numeric(Aa3a),as.numeric(Aa3)),
         A4=coalesce(as.numeric(Aa4a),as.numeric(Aa4)),
         A5=coalesce(as.numeric(Aa5a),as.numeric(Aa5)),
         A6=coalesce(as.numeric(Aa6a),as.numeric(Aa6)),
         A7=coalesce(as.numeric(Aa7a),as.numeric(Aa7)),
         A8=coalesce(as.numeric(Aa8a),as.numeric(Aa8)),
         A9=coalesce(as.numeric(Aa9a),as.numeric(Aa9)),
         A10=coalesce(as.numeric(Aa10a),as.numeric(Aa10)),
         A11=coalesce(as.numeric(Aa11a),as.numeric(Aa11)),
         A12=coalesce(as.numeric(Aa12a),as.numeric(Aa12)),
         A13=coalesce(as.numeric(Aa13a),as.numeric(Aa13)),
         A14=coalesce(as.numeric(Aa14a),as.numeric(Aa14)),
         A15=coalesce(as.numeric(Aa15a),as.numeric(Aa15)),
         A16=coalesce(as.numeric(Aa16a),as.numeric(Aa16)),
         A17=coalesce(as.numeric(Aa17a),as.numeric(Aa17)),
         A18=coalesce(as.numeric(Aa18a),as.numeric(Aa18)),
         A19=coalesce(as.numeric(Aa19a),as.numeric(Aa19)),
         A20=coalesce(as.numeric(Aa20a),as.numeric(Aa20)),
         A21=coalesce(as.numeric(Aa21a),as.numeric(Aa21)),
         A22=coalesce(as.numeric(Aa22a),as.numeric(Aa22)),
         A23=coalesce(as.numeric(Aa23a),as.numeric(Aa23)),
         A24=coalesce(as.numeric(Aa24a),as.numeric(Aa24)),
         A25=coalesce(as.numeric(Aa25a),as.numeric(Aa25)),
         A26=coalesce(as.numeric(Aa26a),as.numeric(Aa26)),
         A27=coalesce(as.numeric(Aa27a),as.numeric(Aa27)),
         A28=coalesce(as.numeric(Aa28a),as.numeric(Aa28)),
         A29=coalesce(as.numeric(Aa29a),as.numeric(Aa29)),
         A30=coalesce(as.numeric(Aa30a),as.numeric(Aa30)),
         A31=coalesce(as.numeric(Aa31a),as.numeric(Aa31)),
         A32=coalesce(as.numeric(Aa32a),as.numeric(Aa32)),
         A33=coalesce(as.numeric(Aa33a),as.numeric(Aa33)),
         A34=coalesce(as.numeric(Aa34a),as.numeric(Aa34)),
         A35=coalesce(as.numeric(Aa35a),as.numeric(Aa35)),
         A36=coalesce(as.numeric(Aa36a),as.numeric(Aa36)),
         A37=coalesce(as.numeric(Aa37a),as.numeric(Aa37)),
         A38=coalesce(as.numeric(Aa38a),as.numeric(Aa38)),
         A39=coalesce(as.numeric(Aa39a),as.numeric(Aa39)),
         A40=coalesce(as.numeric(Aa40a),as.numeric(Aa40)),
         A41=coalesce(as.numeric(Aa41a),as.numeric(Aa41)),
         A42=coalesce(as.numeric(Aa42a),as.numeric(Aa42)),
         A43=coalesce(as.numeric(Aa43a),as.numeric(Aa43)),
         A44=coalesce(as.numeric(Aa44a),as.numeric(Aa44)),
         A45=coalesce(as.numeric(Aa45a),as.numeric(Aa45)),
         A46=coalesce(as.numeric(Aa46a),as.numeric(Aa46)),
         A47=coalesce(as.numeric(Aa47a),as.numeric(Aa47)),
         A48=coalesce(as.numeric(Aa48a),as.numeric(Aa48)),
         A49=coalesce(as.numeric(Aa49a),as.numeric(Aa49)),
         A50=coalesce(as.numeric(Aa50a),as.numeric(Aa50)),
         A51=coalesce(as.numeric(Aa51a),as.numeric(Aa51)),
         A52=coalesce(as.numeric(Aa52a),as.numeric(Aa52)),
         A53=coalesce(as.numeric(Aa53a),as.numeric(Aa53)),
         A54=coalesce(as.numeric(Aa54a),as.numeric(Aa54)),
         A55=coalesce(as.numeric(Aa55a),as.numeric(Aa55)),
         A56=coalesce(as.numeric(Aa56a),as.numeric(Aa56))
  ) %>% select(UserName, ActivityCreateYYYYMM, A1:A56)


mydata_unmatched_plus_correct_a_s<- left_join(mydata_unmatched, pre_skill_stock1, by=c('UserName', 'ActivityCreateYYYYMM')) #wieder in datensatz zurückmergen
rm(pre_skill_stock)

mydata_unmatched_plus_correct_a_s_means <-    mydata_unmatched_plus_correct_a_s %>% #auf repo level/fül alle user
  group_by(RepoNo, ActivityCreateYYYYMM) %>%
  summarise(A1_mean = mean(A1), 
            A2_mean = mean(A2), 
            A3_mean = mean(A3), 
            A4_mean = mean(A4), 
            A5_mean = mean(A5), 
            A6_mean = mean(A6), 
            A7_mean = mean(A7), 
            A8_mean = mean(A8), 
            A9_mean = mean(A9), 
            A10_mean = mean(A10), 
            A11_mean = mean(A11), 
            A12_mean = mean(A12), 
            A13_mean = mean(A13), 
            A14_mean = mean(A14), 
            A15_mean = mean(A15), 
            A16_mean = mean(A16), 
            A17_mean = mean(A17), 
            A18_mean = mean(A18), 
            A19_mean = mean(A19), 
            A20_mean = mean(A20), 
            A21_mean = mean(A21), 
            A22_mean = mean(A22), 
            A23_mean = mean(A23), 
            A24_mean = mean(A24), 
            A25_mean = mean(A25), 
            A26_mean = mean(A26), 
            A27_mean = mean(A27), 
            A28_mean = mean(A28), 
            A29_mean = mean(A29), 
            A30_mean = mean(A30), 
            A31_mean = mean(A31), 
            A32_mean = mean(A32), 
            A33_mean = mean(A33), 
            A34_mean = mean(A34), 
            A35_mean = mean(A35), 
            A36_mean = mean(A36), 
            A37_mean = mean(A37), 
            A38_mean = mean(A38), 
            A39_mean = mean(A39), 
            A40_mean = mean(A40), 
            A41_mean = mean(A41), 
            A42_mean = mean(A42), 
            A43_mean = mean(A43), 
            A44_mean = mean(A44), 
            A45_mean = mean(A45), 
            A46_mean = mean(A46), 
            A47_mean = mean(A47), 
            A48_mean = mean(A48), 
            A49_mean = mean(A49), 
            A50_mean = mean(A50), 
            A51_mean = mean(A51), 
            A52_mean = mean(A52), 
            A53_mean = mean(A53), 
            A54_mean = mean(A54), 
            A55_mean = mean(A55), 
            A56_mean = mean(A56)
  )

mydata_unmatched_plus_correct_TrueFalse<- mydata_unmatched_plus_correct_a_s_means %>%
  mutate(A1_present = A1_mean>0, #ist der skill vorhanden
         A2_present = A2_mean>0,
         A3_present = A3_mean>0,
         A4_present = A4_mean>0,
         A5_present = A5_mean>0,
         A6_present = A6_mean>0,
         A7_present = A7_mean>0,
         A8_present = A8_mean>0,
         A9_present = A9_mean>0,
         A10_present = A10_mean>0,
         A11_present = A11_mean>0,
         A12_present = A12_mean>0,
         A13_present = A13_mean>0,
         A14_present = A14_mean>0,
         A15_present = A15_mean>0,
         A16_present = A16_mean>0,
         A17_present = A17_mean>0,
         A18_present = A18_mean>0,
         A19_present = A19_mean>0,
         A20_present = A20_mean>0,
         A21_present = A21_mean>0,
         A22_present = A22_mean>0,
         A23_present = A23_mean>0,
         A24_present = A24_mean>0,
         A25_present = A25_mean>0,
         A26_present = A26_mean>0,
         A27_present = A27_mean>0,
         A28_present = A28_mean>0,
         A29_present = A29_mean>0,
         A30_present = A30_mean>0,
         A31_present = A31_mean>0,
         A32_present = A32_mean>0,
         A33_present = A33_mean>0,
         A34_present = A34_mean>0,
         A35_present = A35_mean>0,
         A36_present = A36_mean>0,
         A37_present = A37_mean>0,
         A38_present = A38_mean>0,
         A39_present = A39_mean>0,
         A40_present = A40_mean>0,
         A41_present = A41_mean>0,
         A42_present = A42_mean>0,
         A43_present = A43_mean>0,
         A44_present = A44_mean>0,
         A45_present = A45_mean>0,
         A46_present = A46_mean>0,
         A47_present = A47_mean>0,
         A48_present = A48_mean>0,
         A49_present = A49_mean>0,
         A50_present = A50_mean>0,
         A51_present = A51_mean>0,
         A52_present = A52_mean>0,
         A53_present = A53_mean>0,
         A54_present = A54_mean>0,
         A55_present = A55_mean>0,
         A56_present = A56_mean>0)

rm(mydata_unmatched_plus_correct_a_s_means)


colsX<-variable.names(mydata_unmatched_plus_correct_TrueFalse)[59:114]
mydata_unmatched_plus_number_of_skills<- mydata_unmatched_plus_correct_TrueFalse%>% #zusammenzählen
  ungroup%>%
  mutate (number_of_skills =rowSums(.[colsX]))

rm(mydata_unmatched_plus_correct_TrueFalse)

mydata_unmatched_plus_number_of_skills1<- mydata_unmatched_plus_number_of_skills %>%
  group_by(RepoNo, ActivityCreateYYYYMM) %>%
  summarise(number_of_skills=mean(number_of_skills))%>%
  select(RepoNo, ActivityCreateYYYYMM, number_of_skills)

mydata_unmatched_plus_number_of_skills <- left_join(mydata_unmatched, mydata_unmatched_plus_number_of_skills1, by=c('RepoNo', 'ActivityCreateYYYYMM'))


#repo months level

#controls
#
activity_created<- parse_date_time(mydata_unmatched$ActivityCreateYYYYMM, "ym") #parse months
repo_created <- parse_date_time(mydata_unmatched$RepoCreate, "ym")#parse months
mydata_unmatched$repository_age <- interval(repo_created, activity_created) %/% months(1) #calculate difference in months
mydata_unmatched$repository_age_squared <- (mydata_unmatched$repository_age)^2

repo_created <- ymd(mydata_unmatched$RepoCreatedat) ## nach hinweis
activity_created <- ymd(mydata_unmatched$ActivityAt)
mydata_unmatched$repository_age <- interval(repo_created, activity_created) %/% days()
mydata_unmatched$repository_age <- mydata_unmatched$repository_age/30
mydata_unmatched$repository_age_squared <- (mydata_unmatched$repository_age)^2

User_month_level_v001 <- zwischenjoin %>%
  group_by(UserName, ActivityCreateYYYYMM, RepoNo) %>%
  summarise(IsRepoFounder=max(IsRepoFounder),
            user_GH_tenue_months=max(user_GH_tenue_months))

#avg founding exp
User_month_level_v002 <- User_month_level_v001 %>%
  group_by(UserName, ActivityCreateYYYYMM) %>%
  summarise(user_GH_tenue_months= max(user_GH_tenue_months),
            founding_experience_month=sum(IsRepoFounder)) %>%
  mutate(founding_experience_month=lag(founding_experience_month, 1, 0)) %>%
  mutate(cumulative_founding_experience=cumsum(founding_experience_month))

mydata_unmatched_plus_founding <- left_join(mydata_unmatched_plus_number_of_skills, User_month_level_v002, by=c('UserName', 'ActivityCreateYYYYMM'))

repository_month_level_founder <- mydata_unmatched_plus_founding %>%
  group_by(RepoNo, ActivityCreateYYYYMM) %>%
  summarise(avg_cumulative_founding_experience=mean(cumulative_founding_experience))



#number of participating customers per per month/repo --> carreer related learning

repository_month_level <- mydata_unmatched_plus_founding %>%
  group_by(RepoNo, ActivityCreateYYYYMM) %>%
  summarise(contributor_programming_output=log(sum(ActivityType==1)+1), 
            carreer_related_reasons = log(n_distinct(UserName)+1), 
            skill_match=log(mean(skill_match)+1), 
            number_of_skills=log(mean(number_of_skills)+1), 
            repository_age=mean(repository_age),
            repository_age_squared=mean(repository_age_squared),
            avg_user_gitHub_tenure=mean(user_GH_tenue_months.x),
            avg_cumulative_founding_experience=log(mean(cumulative_founding_experience)+1))




#table construction XXXXXXXXXXXXXXXXX
table_1_part3<- repository_month_level%>% 
  ungroup()%>%
  melt(id.vars=c("RepoNo", "ActivityCreateYYYYMM"))%>% 
  group_by(variable)%>% 
  summarise(Mean=mean(value), 
            "Std. dev."=sd(value), 
            Min=min(value),
            Max=max(value))  %>%
  mutate(variable=recode(variable,contributor_programming_output="ln(Contributor programming output +1)", 
                         carreer_related_reasons="ln(Career-related reasons +1)", 
                         skill_match="ln(Skill match+1)", 
                         number_of_skills="ln(Career-unrelated learning +1) ", 
                         repository_age="Repository age (in months)", 
                         repository_age_squared="Repository age (in months), squared", 
                         avg_user_gitHub_tenure="Average user GitHub tenure", 
                         avg_cumulative_founding_experience="ln(Average founding experience+1)")) %>%
  set_colnames(c("", "Mean", "Std. dev.", "Min", "Max")) %>%
  as.data.frame()

#table construction XXXXXXXXXXXXXXXXX

table1_no_ob_part3 <- sprintf("Repository-month level (N=%d)", nrow(repository_month_level))


@

  <<fig=FALSE, echo=FALSE>>==
#repository level

mydata_unmatched <- mutate(mydata_unmatched, commercial_interest=(ifelse(UserGhWebSiteHomePage== 1 | 
                                                       UserGhWebSiteHomePage==3 | 
                                                       UserGhWebSiteHomePage==8 |
                                                       UserGhWebSiteHomePage== 9, 1,0)))



repository_level <- mydata_unmatched %>%
  group_by(RepoNo) %>%
  summarise(personal_enjoyment=(1-mean(commercial_interest)))

repository_level$personal_enjoyment <- replace_na(repository_level$personal_enjoyment, 1) #frangwürdige annahme alle na's==1

#table construction XXXXXXXXXXXXXXXXX
table1_no_ob_part4 <- sprintf("Repository level (N=%d)", nrow(repository_level))

table_1_part4<- repository_level%>% 
  ungroup()%>%
  melt(id.vars=c("RepoNo"))%>% 
  group_by(variable)%>% 
  summarise(Mean=mean(value, na.rm = T), 
            Zwischenstufe=sd(value, na.rm = T), 
            Min=min(value, na.rm = T),
            Max=max(value, na.rm = T))  %>%
  mutate(variable=recode(variable,personal_enjoyment="Personal enjoyment")) %>%
  mutate(Zwischenstufe=replace(Zwischenstufe,Zwischenstufe!=2, NA))%>% ##nas ersetzen??
  set_colnames(c("", "Mean", "Std. dev.", "Min", "Max")) %>%
  as.data.frame()

options(digits = 2)
@
  
  <<fig=FALSE, echo=FALSE>>==
  #gesamttabelle 1
  Table1_List <- list(table_1_part1,table_1_part2, table_1_part3, table_1_part4)
attr(Table1_List, "subheadings") <- c(table1_no_ob_part1,table1_no_ob_part2, table1_no_ob_part3, table1_no_ob_part4)
xList <- xtableList(Table1_List, caption = 'Descriptive statistics', digits = 2)
#print.xtableList(xList, sanitize.subheadings.function = italic,include.rownames=FALSE, caption.placement = "top")
@


<<fig=FALSE, echo=FALSE>>==
  #tabelle2
  #join the data
mydata_unmatched_plus_urm <- left_join(mydata_unmatched, User_repository_month_level, by=c('UserName','RepoNo', 'ActivityCreateYYYYMM'))
mydata_unmatched_plus_urm_um <- left_join(mydata_unmatched_plus_urm, User_month_level, by=c('UserName', 'ActivityCreateYYYYMM'))
mydata_unmatched_plus_urm_um_rm <- left_join(mydata_unmatched_plus_urm_um, repository_month_level, by=c('RepoNo', 'ActivityCreateYYYYMM'))
mydata_unmatched_plus_urm_um_rm_r <- left_join(mydata_unmatched_plus_urm_um_rm, repository_level, by=c('RepoNo'))
rm(mydata_unmatched_plus_urm,mydata_unmatched_plus_urm_um,mydata_unmatched_plus_urm_um_rm)

mydata_unmatched_plus_urm_um_rm_r$personal_enjoyment <-replace_na(mydata_unmatched_plus_urm_um_rm_r$personal_enjoyment, 1) #frangwürdige annahme alle na's==1

@

<<fig=FALSE, echo=FALSE>>==

data_user_repo_month <-mydata_unmatched_plus_urm_um_rm_r%>%
  select(UserName, RepoNo, ActivityCreateYYYYMM, 
         contributor_programming_output.x,
         skill_match.y,
         carreer_related_reasons,
         number_of_skills,
         user_GH_tenue_months.y,
         repository_age.y,
         repository_age_squared.y,
         IsRepoFounder.y, 
         contributor_programming_output.y,
         personal_enjoyment)%>%
  group_by(UserName, RepoNo, ActivityCreateYYYYMM)%>%
  summarise(lnContributor_programming_output=mean(contributor_programming_output.x),
            lnSkill_match=mean(skill_match.y),
            lncarreer_related_reasons=mean(carreer_related_reasons),
            lncarreer_unrelated_learning=mean(number_of_skills),
            repository_age=mean(repository_age.y),
            repository_age_squared=mean(repository_age_squared.y),
            user_GH_tenue_months=mean(user_GH_tenue_months.y),
            lnFounding_experience=mean(IsRepoFounder.y),
            personal_enjoyment=mean(personal_enjoyment, na.rm = T)
  )%>%
  ungroup()

data_repo_month <- mydata_unmatched_plus_urm_um_rm_r%>%
  select(RepoNo, ActivityCreateYYYYMM, 
         contributor_programming_output.x,
         carreer_related_reasons,
         skill_match.y,
         number_of_skills,
         repository_age.y,
         repository_age_squared.y,
         avg_user_gitHub_tenure,
         avg_cumulative_founding_experience,
         personal_enjoyment)%>%
  group_by(RepoNo, ActivityCreateYYYYMM)%>%
  summarise(lnContributor_programming_output=mean(contributor_programming_output.x),
            lncarreer_related_reasons=mean(carreer_related_reasons),
            lnSkill_match=mean(skill_match.y),
            lncarreer_unrelated_learning=mean(number_of_skills),
            repository_age=mean(repository_age.y),
            repository_age_squared=mean(repository_age_squared.y),
            user_GH_tenue_months=mean(avg_user_gitHub_tenure),
            ln_average_founding_experience=mean(avg_cumulative_founding_experience),
            personal_enjoyment=mean(personal_enjoyment, na.rm = T)
  )%>%
  ungroup()

@


<<fig=FALSE, echo=FALSE>>==
data_user_repo_month$year <- as.factor(substring(data_user_repo_month$ActivityCreateYYYYMM, 1,4))
data_user_repo_month1<- data_user_repo_month%>%
  mutate(repository_age=repository_age/100,
         #repository_age_squared=(repository_age_squared)/100,
         user_GH_tenue_months=user_GH_tenue_months/100,
         lnFounding_experience=lnFounding_experience/100,
         lnSkill_match=lnSkill_match/100,
         lncarreer_related_reasons=lncarreer_related_reasons/100,
         lncarreer_unrelated_learning=lncarreer_unrelated_learning/100,
         personal_enjoyment=personal_enjoyment/100,
         UserName=as.character(UserName),
         RepoNo=factor(RepoNo))%>%
  mutate(repository_age_squared=repository_age*repository_age,
         h1=lnSkill_match*lncarreer_related_reasons, 
         h2=lnSkill_match*personal_enjoyment,
         h3=lnSkill_match*lncarreer_unrelated_learning)

dummies <- as.data.frame(model.matrix(~data_user_repo_month$year))%>%
  set_colnames(c("", "d2008","d2009","d2010", "d2011", "d2012", "d2013", "d2014", "d2015","d2016"))
data_user_repo_month_1 <- (cbind(data_user_repo_month1, dummies))

 all_matched_users <- mydata%>%
  select(UserName)%>%
   unique()%>%
   mutate(matched=1,UserName=as.character(UserName) )
  
 matched_unmatched_data<- left_join(data_user_repo_month_1, all_matched_users)
 
 matched_unmatched_data<- matched_unmatched_data %>%
   replace_na(list(user_GH_tenue_months=0 , matched=0))
 
 modelA1 <- glm(matched ~lncarreer_related_reasons+
                personal_enjoyment+
                lncarreer_unrelated_learning+
                repository_age+
                repository_age_squared+
                user_GH_tenue_months+
                lnFounding_experience+
                d2008+
                d2009+
                d2010+
                d2011+
                d2012+
                d2013+
                d2014+
                d2015+
                d2016
                ,family=binomial(link='logit'),data=matched_unmatched_data)
#summary(modelA1) 

p.klammer<- c("\\textit{P-values} in parentheses")
# stargazer(modelA1, type = "latex", report = ('vc*p'), star.cutoffs = NA, digits = 2, covariate.labels = c("ln(Career-related reasons+1) (/100)",
#                                                                                                           "Personal enjoyment (/100)",
#                                                                                                           "ln(Career-unrelated learning+1) (/100) ",
#                                                                                                           "Repository age (in months) (/100)",
#                                                                                                           "Repository age (in months) (/100), squared",
#                                                                                                           "User GitHub tenure (in months) (/100)",
#                                                                                                           "ln(Founding experience+1) (/100)"),
#                                                                                               omit=c( "d2008",
#                                                                                               "d2009",
#                                                                                               "d2010",
#                                                                                               "d2011",
#                                                                                               "d2012",
#                                                                                               "d2013",
#                                                                                               "d2014",
#                                                                                               "d2015",
#                                                                                               "d2016"),
#                                                                                     omit.labels = c("Time Dummies (year)",
#                                                                                                     "Time Dummies (year)",
#                                                                                                     "Time Dummies (year)",
#                                                                                                     "Time Dummies (year)",
#                                                                                                     "Time Dummies (year)",
#                                                                                                     "Time Dummies (year)",
#                                                                                                     "Time Dummies (year)",
#                                                                                                     "Time Dummies (year)",
#                                                                                                     "Time Dummies (year)"
#                                                                                                                       ),
#           omit.yes.no = c("YES", "No"),
#           notes=p.klammer,
#           notes.align="l",
#           omit.stat = c("AIC", "ll"),
#           notes.append = FALSE,
#           title = "Selection regression at the user-repository-month level, DV: user is matched with Stack
# Overflow (yes/no)",
#           model.numbers          = T,
#           dep.var.labels   = "Logit model",
#           dep.var.caption  = "(1)"
#           )

####################################################################################
@

\renewcommand\appendix{\par 
    \setcounter{section}{0}% 
    \setcounter{subsection}{0}% 
    \renewcommand\thesection{\Alph{section}}% 
    \renewcommand\thetable{\Alph{section}\arabic{table}}} 
\setcounter{table}{0}
% Table created by stargazer v.5.2 by Marek Hlavac, Harvard University. E-mail: hlavac at fas.harvard.edu
% Date and time: Mo, Feb 19, 2018 - 20:48:45
\begin{table}[!htbp] 

\begin{flushleft}
\textbf {ONLINE SUPPLEMENT}
\end{flushleft}

\centering 
  \caption{Selection regression at the user-repository-month level, DV: user is matched with Stack 
Overflow (yes/no)} 
  \label{} 
\begin{tabular}{lc} 
\\[-1.8ex]\hline 
\\[-1.8ex] 
 & \multicolumn{1}{c}{(1)} \\ 

\\[-1.8ex]Variables & Logit model \\ 
\hline \\[-1.8ex] 
  ln(Career-related reasons+1) (/100) & $-$71.00 \\ 
  & (0.00) \\ 
  & \\ 
 Personal enjoyment (/100) & 3.60 \\ 
  & (0.00) \\ 
  & \\ 
 ln(Career-unrelated learning+1) (/100)  & 122.00 \\ 
  & (0.00) \\ 
  & \\ 
 Repository age (in months) (/100) & $-$0.75 \\ 
  & (0.00) \\ 
  & \\ 
 Repository age (in months) (/100), squared & 0.46 \\ 
  & (0.00) \\ 
  & \\ 
 User GitHub tenure (in months) (/100) & 4.40 \\ 
  & (0.00) \\ 
  & \\ 
 ln(Founding experience+1) (/100) & 11.00 \\ 
  & (0.00) \\ 
  & \\ 
 Constant & 0.93 \\ 
  & (0.05) \\ 
  & \\  
Time Dummies (year) & YES \\ 

\\
Observations & 515,831 \\ 
\hline \\[-1.8ex] 
 \multicolumn{1}{r}{\textit{P-values} in parentheses} \\ 
\end{tabular} 
\end{table} 
<<fig=FALSE, echo=FALSE>>==
data_repo_month$year <- as.factor(substring(data_repo_month$ActivityCreateYYYYMM, 1,4))

data_repo_month1 <- data_repo_month%>%
  mutate(repository_age=repository_age/100,
         user_GH_tenue_months=user_GH_tenue_months/100,
         ln_average_founding_experience=ln_average_founding_experience/100,
         lncarreer_related_reasons=lncarreer_related_reasons/100,
         lncarreer_unrelated_learning=lncarreer_unrelated_learning/100,
         lnSkill_match = lnSkill_match/100, 
         personal_enjoyment=personal_enjoyment/100          )%>%
  mutate(repository_age_squared=repository_age*repository_age,
         h4a=lnSkill_match* lncarreer_related_reasons, 
         h4b=lnSkill_match*personal_enjoyment,
         h4c=lnSkill_match*lncarreer_unrelated_learning)


dummies <- as.data.frame(model.matrix(~data_repo_month$year))%>%
  set_colnames(c("","d2008","d2009","d2010", "d2011", "d2012", "d2013", "d2014", "d2015","d2016"))
data_repo_month_1 <- (cbind(data_repo_month1, dummies))

all_matched_repos <- mydata%>%
  select(RepoNo)%>%
  unique()%>%
  mutate(matched=1,RepoNo=as.integer(RepoNo) )

matched_unmatched_data_rm<- left_join(data_repo_month_1, all_matched_repos)

matched_unmatched_data_rm<- matched_unmatched_data_rm %>%
  replace_na(list(user_GH_tenue_months=0 , matched=0))

modelA2 <- glm(matched ~lncarreer_related_reasons+
               personal_enjoyment+
               lncarreer_unrelated_learning+
               repository_age+
               repository_age_squared+
               user_GH_tenue_months+
                 ln_average_founding_experience+
                 d2008+
               d2009+
               d2010+
               d2011+
               d2012+
               d2013+
               d2014+
               d2015+
               d2016
             ,family=binomial(link='logit'),data=matched_unmatched_data_rm)
#summary(modelA2)
# stargazer(modelA2, type = "latex", report = ('vc*p'), star.cutoffs = NA, digits = 2, covariate.labels = c("ln(Career-related reasons+1) (/100)", 
#                                                                                                           "Personal enjoyment (/100)", 
#                                                                                                           "ln(Career-unrelated learning+1) (/100) ",
#                                                                                                           "Repository age (in months) (/100)", 
#                                                                                                           "Repository age (in months) (/100), squared", 
#                                                                                                           "Average user GitHub tenure (/100) ",
#                                                                                                           "ln(Average founding experience+1) (/100)"),
#           omit=c( "d2008",
#                   "d2009",
#                   "d2010",
#                   "d2011",
#                   "d2012",
#                   "d2013",
#                   "d2014",
#                   "d2015",
#                   "d2016"), 
#           omit.labels = c("Time Dummies (year)",
#                           "Time Dummies (year)",
#                           "Time Dummies (year)",
#                           "Time Dummies (year)",
#                           "Time Dummies (year)",
#                           "Time Dummies (year)",
#                           "Time Dummies (year)",
#                           "Time Dummies (year)",
#                           "Time Dummies (year)"
#           ), 
#           omit.yes.no = c("YES", "No"),
#           notes=p.klammer, 
#           notes.align="l",
#           omit.stat = c("AIC", "ll"),
#           notes.append = FALSE,
#           title = " Selection regression at the repository-month level, DV: user is matched with Stack 
# Overflow (yes/no)",
#           model.numbers          = T,
#           dep.var.labels   = "Logit model",
#           dep.var.caption  = "(1)"
# )

@
% Table created by stargazer v.5.2 by Marek Hlavac, Harvard University. E-mail: hlavac at fas.harvard.edu
% Date and time: Mo, Feb 19, 2018 - 20:55:48
\begin{table}[!htbp] \centering 
  \caption{ Selection regression at the repository-month level, DV: user is matched with Stack 
Overflow (yes/no)} 
  \label{} 
\begin{tabular}{@{\extracolsep{5pt}}lc} 
\\[-1.8ex]\hline 
\\[-1.8ex] 
 & \multicolumn{1}{c}{(1)} \\ 
\cline{2-2} 
\\[-1.8ex] & Logit model \\ 
\hline \\[-1.8ex] 
ln(Career-related reasons+1) (/100) & 151.00 \\ 
  & (0.00) \\ 
  & \\ 
 Personal enjoyment (/100) & $-$17.00 \\ 
  & 
  (0.00) \\ 
  & \\ 
 ln(Career-unrelated learning+1) (/100)  & 258.00 \\ 
  & (0.00) \\ 
  & \\ 
 Repository age (in months) (/100) & 12.00 \\ 
  & (0.00) \\ 
  & \\ 
 Repository age (in months) (/100), squared & $-$7.30 \\ 
  & (0.00) \\ 
  & \\ 
 Average user GitHub tenure (/100)  & 0.14 \\ 
  & (0.00) \\ 
  & \\ 
 ln(Founding experience+1) (/100) & 24.00 \\ 
  & (0.00) \\ 
  & \\ 
 Constant & 4.30 \\ 
  & (0.00) \\ 
  & \\ 

Time Dummies (year) & YES \\ 
Observations & 265,585 \\ 

\hline \\[-1.8ex] 
\multicolumn{1}{r}{\textit{P-values} in parentheses} \\ 
\end{tabular} 
\end{table} 


<<fig=FALSE, echo=FALSE>>==

#heckman

heck1 = heckit( matched ~
                  repository_age+
                  repository_age_squared+
                  user_GH_tenue_months+
                  lnFounding_experience+
                  lncarreer_related_reasons+
                  lncarreer_unrelated_learning+
                  personal_enjoyment+
                  d2008+
                  d2009+
                  d2010+
                  d2011+
                  d2012+
                  d2013+
                  d2014+
                  d2015+
                  d2016,
                lnContributor_programming_output~ 
                  repository_age+
                  repository_age_squared+
                  user_GH_tenue_months+
                  lnFounding_experience+
                  lncarreer_related_reasons+
                  lncarreer_unrelated_learning+
                  personal_enjoyment+
                  lnSkill_match+
                  h1+
                  h2+
                  h3+
                  d2008+
                  d2009+
                  d2010+
                  d2011+
                  d2012+
                  d2013+
                  d2014+
                  d2015+
                  d2016, data=matched_unmatched_data )
##Inverse Mills Ratio = Lambda

#getting booth (https://stackoverflow.com/questions/40974843/how-to-report-both-selection-and-outcome-equation-of-selection-models-with-starg)
heck1ss <- heck1
heck1ss$param$index$betaO <- heck1$param$index$betaS
heck1ss$param$index$betaS <- heck1$param$index$betaO
# stargazer(heck1, type="latex", heck1ss, report = ('vc*p'), star.cutoffs = NA, digits = 2,
#           selection.equation=TRUE,
#           omit=c( "d2008",
#                           "d2009",
#                           "d2010",
#                           "d2011",
#                           "d2012",
#                           "d2013",
#                           "d2014",
#                           "d2015",
#                           "d2016"),
#           covariate.labels = c("Repository age (in months) (/100)" ,
#                                "Repository age (in months) (/100), squared",
#                                "User GitHub tenure (in months) (/100)",
#                                "ln(Founding experience+1) (/100)",
#                                "ln(Career-related reasons+1) (/100)",
#                                "ln(Career-unrelated learning+1) (/100)",
#                                "Personal enjoyment (/100)",
#                                "ln(Skill match+1) (/100)",
#                                "H1: ln(Skill match+1) (/100) x ln(Career-related reasons+1) (/100)",
#                                "H2: ln(Skill match+1) (/100) x Personal enjoyment (/100)",
#                               "H3: ln(Skill match+1) (/100) x ln(Career-unrelated learning+1) (/100)"),
#           notes.label=p.klammer,
#           notes.align="l",
#           notes.append = F,
#           title = "Heckman sample selection model at the user-repository-month level ",
#           model.numbers          = F,
#           model.names=F,
#           dep.var.caption="",
#           dep.var.labels.include = FALSE,
#           column.labels   = c("(1)First-stage User is matched with Stack Overflow (yes/no)",
#                                "(2) Second-stage Contributor programming output (natural log)"),
#           note="Note that due to the re-scaling of independent variables (/100), the coefficient estimates for testing H1-H3 correspond to the true coefficients multiplied by 10,000."
# 
#           )
@



% Table created by stargazer v.5.2 by Marek Hlavac, Harvard University. E-mail: hlavac at fas.harvard.edu
% Date and time: Mo, Feb 19, 2018 - 22:19:34
\begin{table}[!htbp] \centering 
  \caption{Heckman sample selection model at the user-repository-month level } 
  \label{} 
\begin{tabular}{@{\extracolsep{5pt}}lcc} 
\\[-1.8ex]
\hline \\[-1.8ex] 
 & (1)   & (2)    \\
 
  & First-stage&Second-stage \\
 
 & User is matched with&Contributor programming \\
 
 Regression dependent variable&Stack Overflow (yes/no) & output (natural log)\\
 \hline \\ Repository age (in months) (/100) & $-$0.41 & 0.50 \\ 
  &(0.00) & (0.00) \\ 
  & & \\ 
 Repository age (in months) (/100), squared & 0.27 & $-$0.64 \\ 
  & (0.00) & (0.00) \\ 
  & & \\ 
 User GitHub tenure (in months) (/100) & 2.50 & 0.12 \\ 
  & (0.00) & (0.03) \\ 
  & & \\ 
 ln(Founding experience+1) (/100) & 6.20 & $-$0.01 \\ 
  & (0.00) & (0.98) \\ 
  & & \\ 
 ln(Career-related reasons+1) (/100) & $-$39.00 & $-$4.90 \\ 
  & (0.00) & (0.00) \\ 
  & & \\ 
 ln(Career-unrelated learning+1) (/100) & 68.00 & $-$2.50 \\ 
  & (0.00) & (0.07) \\ 
  & & \\ 
 Personal enjoyment (/100) & 1.40 & $-$3.20 \\ 
  & (0.04) & (0.00) \\ 
  & & \\ 
 ln(Skill match+1) (/100) &  & 1.10 \\ 
  &  & (0.00) \\ 
  & & \\ 
    \begin{tabular}{ll}
  
 H1: ln(Skill match+1) (/100) x \\ln(Career-related reasons+1) (/100)
\end{tabular}
 &  & 123.00 \\ 
  &  & (0.00) \\ 
  & & \\ 
      \begin{tabular}{ll}
 H2: ln(Skill match+1) (/100) x \\Personal enjoyment (/100)
\end{tabular}
 &  & 44.00 \\ 
  &  & (0.14) \\ 
  & & \\ 
      \begin{tabular}{ll}
 H3: ln(Skill match+1) (/100) x \\ln(Career-unrelated learning+1) (/100)
\end{tabular}
 &  & $-$72.00 \\ 
  &  & (0.00) \\ 
  & & \\ 
  Lamba &  & $-$0.01   \\ 
& & (0.03)\\
 Constant & 0.51 & 0.20 \\ 
  & (0.08) & (0.13) \\ 
  & & \\ 
  Time Dummies (year) & YES&YES \\ 
  & & \\ 
 \\[-1.8ex] 
Observations & 515,831 & 515,831 \\ 


\hline \\[-1.8ex] 
\textit{P-values} in parentheses &  \\ 
\end{tabular} 
Note that due to the re-scaling of independent variables (/100), the coefficient estimates for testing H1-H3 correspond to the true coefficients multiplied by 10,000.

\end{table}


<<fig=FALSE, echo=FALSE>>==

###############
heck2 = heckit( matched ~
                  repository_age+
                  repository_age_squared+
                  user_GH_tenue_months+
                  ln_average_founding_experience+
                  lncarreer_related_reasons+
                  lncarreer_unrelated_learning+
                  personal_enjoyment+
                  d2008+
                  d2009+
                  d2010+
                  d2011+
                  d2012+
                  d2013+
                  d2014+
                  d2015+
                  d2016,
                lnContributor_programming_output~ 
                  repository_age+
                  repository_age_squared+
                  user_GH_tenue_months+
                  ln_average_founding_experience+
                  lncarreer_related_reasons+
                  lncarreer_unrelated_learning+
                  personal_enjoyment+
                  lnSkill_match+
                  h4a+
                  h4b+
                  h4c+
                  d2008+
                  d2009+
                  d2010+
                  d2011+
                  d2012+
                  d2013+
                  d2014+
                  d2015+
                  d2016, data=matched_unmatched_data_rm )
heck2ss <- heck2
heck2ss$param$index$betaO <- heck2$param$index$betaS
heck2ss$param$index$betaS <- heck2$param$index$betaO
 # stargazer(heck2,  heck2ss, type="latex",report = ('vc*p'), star.cutoffs = NA, digits = 2,
 #           selection.equation=TRUE,
 #           omit=c( "d2008",
 #                   "d2009",
 #                   "d2010",
 #                   "d2011",
 #                   "d2012",
 #                   "d2013",
 #                   "d2014",
 #                   "d2015",
 #                   "d2016"),
 #           covariate.labels = c("Repository age (in months) (/100)" ,
 #                                "Repository age (in months) (/100), squared",
 #                                "Average user GitHub tenure (/100) ",
 #                                "ln(Average founding experience+1) (/100)",
 #                                "ln(Career-related reasons+1) (/100)",
 #                                "ln(Career-unrelated learning+1) (/100)",
 #                                "Personal enjoyment (/100)",
 #                                "ln(Skill match+1) (/100)",
 #                                "H4: ln(Skill match+1) (/100) x ln(Career-related reasons+1) (/100)",
 #                                "H4: ln(Skill match+1) (/100) x Personal enjoyment (/100)",
 #                                "H4: ln(Skill match+1) (/100) x ln(Career-unrelated learning+1) (/100)"),
 #           notes.label=p.klammer,
 #           notes.align="l",
 #           notes.append = F,
 #           title = "Heckman sample selection model at the repository-month level ",
 #           model.numbers          = F,
 #           model.names=F,
 #           dep.var.caption="",
 #           dep.var.labels.include = FALSE,
 #           column.labels   = c("(1)First-stage User is matched with Stack Overflow (yes/no)",
 #                               "(2) Second-stage Contributor programming output (natural log)"),
 #           note=c("Note that due to the re-scaling of independent variables (/100), the coefficient estimates for testing H1-H3" ,
 #                  "correspond to the true coefficients multiplied by 10,000.")
 # 
 # )

 @


% Table created by stargazer v.5.2 by Marek Hlavac, Harvard University. E-mail: hlavac at fas.harvard.edu
% Date and time: Mo, Feb 19, 2018 - 22:18:32
\begin{table}[!htbp] \centering 
  \caption{Heckman sample selection model at the repository-month level } 
  \label{} 
\begin{tabular}{@{\extracolsep{5pt}}lcc} 
\\[-1.8ex]
\hline \\[-1.8ex] 
 & (1)   & (2)    \\
 
  & First-stage&Second-stage \\
 
 & User is matched with&Contributor programming \\
 
 Regression dependent variable&Stack Overflow (yes/no) & output (natural log)\\
 \hline \\
 Repository age (in months) (/100) & 6.80 & 0.19 \\ 
  & (0.00) & (0.00) \\ 
  & & \\ 
 Repository age (in months) (/100), squared & $-$4.30 & $-$0.74 \\ 
  & (0.00) & (0.00) \\ 
  & & \\ 
 Average user GitHub tenure (/100)  & 0.05 & 0.24 \\ 
  & (0.06) & (0.00) \\ 
  & & \\ 
 ln(Average founding experience+1) (/100) & 14.00 & $-$1.40 \\ 
  & (0.00) & (0.00) \\ 
  & & \\ 
 ln(Career-related reasons+1) (/100) & 57.00 & 9.20 \\ 
  & (0.00) & (0.00) \\ 
  & & \\ 
 ln(Career-unrelated learning+1) (/100) & 116.00 & $-$4.00 \\ 
  & (0.00) & (0.00) \\ 
  & & \\ 
 Personal enjoyment (/100) & $-$10.00 & $-$0.25 \\ 
  & (0.00) & (0.47) \\ 
  & & \\ 
 ln(Skill match+1) (/100) &  & $-$6.60 \\ 
  &  & (0.00) \\ 
  & & \\ 
  
  \begin{tabular}{ll}
 H4: ln(Skill match+1) (/100) x \\ln(Career-related reasons+1) (/100)
\end{tabular}
  
 &  & 1,169.00 \\ 
  &  & (0.00) \\ 
  & & \\ 
    \begin{tabular}{ll}
 H4: ln(Skill match+1) (/100) x \\Personal enjoyment (/100)
\end{tabular}
 &  & $-$102.00 \\ 
  &  & (0.06) \\ 
  & & \\ 
    \begin{tabular}{ll}
 H4: ln(Skill match+1) (/100) x \\ln(Career-unrelated learning+1)
\end{tabular}
 (/100) &  & 7.70 \\ 
  &  & (0.73) \\ 
  & & \\ 
  Lambda &  & $-$0.06   \\ 
  & & (0.20)\\
 Constant & 2.40 & 0.05 \\ 
  & (0.00) & (0.61) \\ 
  
  & & \\ 
Time Dummies (year) & YES&YES \\ 
  & & \\ 
Observations & 265,585 & 265,585 \\ 


\hline \\[-1.8ex] 
\textit{P-values} in parentheses & \\ 
\end{tabular} 

Note that due to the re-scaling of independent variables (/100), the coefficient estimates for testing H4  correspond to the true coefficients multiplied by 10,000.


\end{table} 


\end{document}




