---
title: "Appendix B"
author: "Anuschka Peelen"
date: "`r Sys.Date()`"
output: 
  html_document:
     code_folding: "hide"
editor_options: 
  markdown: 
    wrap: 72
---

```{r warning=FALSE, globalsettings, echo=FALSE, results='hide'}
library(knitr)

knitr::opts_chunk$set(echo = TRUE)
opts_chunk$set(tidy.opts=list(width.cutoff=100),tidy=TRUE, warning = FALSE, message = FALSE,comment = "#>", cache=TRUE, class.source=c("test"), class.output=c("test2"))
options(width = 100)
rgl::setupKnitr()



colorize <- function(x, color) {sprintf("<span style='color: %s;'>%s</span>", color, x) }
```

```{r klippy, echo=FALSE, include=TRUE}
klippy::klippy(position = c('top', 'right'))
#klippy::klippy(color = 'darkred')
#klippy::klippy(tooltip_message = 'Click to copy', tooltip_success = 'Done')
```

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```

```{r, echo=FALSE, results='hide'}
#start with clean workspace 
rm(list=ls())
getwd()
```

```{r, echo=FALSE}
library(RSiena)
library(tidyverse)

load("/Users/anuschka/Documents/labjournal/data/data_net_array.RData")
load("/Users/anuschka/Documents/labjournal/data/socdef_net_array.RData")
load("/Users/anuschka/Documents/labjournal/data/socdef_df.RData")
load("/Users/anuschka/Documents/labjournal/data/datadef_df.RData")
load("/Users/anuschka/Documents/labjournal/data/soc_twitterinfo.RData")
```

# RSiena without Twitter dummy for Sociology

```{r, eval=FALSE}
#dependent
snet <- sienaDependent(soc_net_array)

### Step 1: define data
#gender
gender <- as.numeric(socdef_df$gender=="female")
gender <- coCovar(gender)

#Kardashian Index
ki <- as.numeric(socdef_df$ki)
ki <- coCovar(ki)

#Ethnicity
dutch <- as.numeric(socdef_df$dutch)
dutch <- coCovar(dutch)

#Twitter dummy as control variable
twitter_dum <- (socdef_df$twitter_dum)
twitter_dum <- coCovar(twitter_dum)

#Twitter followercount
#followers <- as.numeric(soc_twitterinfo$twfollowercounts)
#followers <- coCovar(followers)



#year first pub
# soc_staff_cit %>% group_by(gs_id) %>%
#   mutate(pub_first = min(year)) %>% 
#   select(c("gs_id", "pub_first")) %>%
#   distinct(gs_id, pub_first, .keep_all = TRUE) -> firstpub_df
# 
# socdef_df <- left_join(socdef_df, firstpub_df)
# 
# #if no publication yet, set pub_first op 2023
# socdef_df %>% mutate(pub_first = replace_na(pub_first, 2023)) -> socdef_df

pub_first <-  coCovar(socdef_df$pub_first)

mydata <- sienaDataCreate(snet, gender, ki, dutch, pub_first, twitter_dum)

### Step 2: create effects structure
myeffs <- getEffects(mydata)
effectsDocumentation(myeffs)
### Step 3: get initial description
print01Report(mydata, modelname = "/Users/anuschka/Documents/labjournal/results/soc_report")
```

```{r,eval=FALSE}
myeffs1b <- getEffects(mydata)
myeffs1b <- includeEffects(myeffs1b, degPlus)
myeffs1b <- includeEffects(myeffs1b, transTriads)
myeffs1b <- includeEffects(myeffs1b, absDiffX, interaction1 = "ki")
myeffs1b <- includeEffects(myeffs1b, sameX, interaction1 = "dutch")
myeffs1b <- includeEffects(myeffs1b, absDiffX, interaction1 = "pub_first")
#myeffs1 <- includeEffects(myeffs1, sameX, interaction1 = "twitter_dum")
myeffs1b <- includeEffects(myeffs1b, sameX, interaction1 = "gender")
myAlgorithm <- sienaAlgorithmCreate(projname = "soc_report")
(ans1b <- siena07(myAlgorithm, data = mydata, effects = myeffs1b))
```

```{r, eval=FALSE}
#Save the last model since it has the lowest maximum convergence ratio. 
save(ans1b, file="/Users/anuschka/Documents/labjournal/results/soc_model_app")
```

```{r, echo=FALSE}
load("/Users/anuschka/Documents/labjournal/results/soc_model_app")
summary(ans1b)
```


```{r, eval=FALSE}
myeffs2b <- getEffects(mydata)
myeffs2b <- includeEffects(myeffs2b, degPlus) 
myeffs2b <- includeEffects(myeffs2b, transTriads)
myeffs2b <- includeEffects(myeffs2b, altX, interaction1 = "ki")
myeffs2b <- includeEffects(myeffs2b, sameX, interaction1 = "dutch")
myeffs2b <- includeEffects(myeffs2b, absDiffX, interaction1 = "pub_first")
#myeffs2 <- includeEffects(myeffs2, sameX, interaction1 = "twitter_dum")
myeffs2b <- includeEffects(myeffs2b, sameX, interaction1 = "gender")
(ans2b <- siena07(myAlgorithm, data = mydata, effects = myeffs2b, prevAns = ans1b))
```

```{r, eval=FALSE}
#Save the last model since it has the lowest maximum convergence ratio. 
save(ans2b, file="/Users/anuschka/Documents/labjournal/results/soc_model_app2")
```

```{r, echo=FALSE}
load("/Users/anuschka/Documents/labjournal/results/soc_model_app2")
summary(ans2b)
```

# RSiena without Twitter dummy for Data Science

```{r}
rm(list=ls())
```

```{r, echo=FALSE}
load("/Users/anuschka/Documents/labjournal/data/data_net_array.RData")
load("/Users/anuschka/Documents/labjournal/data/datadef_df.RData")
```

```{r, eval=FALSE}
#dependent
dnet <- sienaDependent(dnet_array)

### Step 1: define data
#gender
gender <- as.numeric(datadef_df$gender=="female")
gender <- coCovar(gender)

#Kardashian Index
ki <- as.numeric(datadef_df$ki)
ki <- coCovar(ki)

#Ethnicity
dutch <- as.numeric(datadef_df$dutch)
dutch <- coCovar(dutch)

#Twitter dummy as control variable
twitter_dum <- (datadef_df$twitter_dum)
twitter_dum <- coCovar(twitter_dum)

# #year first pub
# data_staff_cit %>% group_by(gs_id) %>%
#   mutate(pub_first = min(year)) %>% 
#   select(c("gs_id", "pub_first")) %>%
#   distinct(gs_id, pub_first, .keep_all = TRUE) -> firstpub_df1
# 
# datadef_df <- left_join(datadef_df, firstpub_df1)
# 
# #if no publication yet, set pub_first op 2023
# datadef_df %>% mutate(pub_first = replace_na(pub_first, 2023)) -> datadef_df

pub_first <-  coCovar(datadef_df$pub_first)

mydata <- sienaDataCreate(dnet, gender, ki, dutch, pub_first, twitter_dum)

### Step 2: create effects structure
myeff <- getEffects(mydata)
#effectsDocumentation(myeff)
### Step 3: get initial description
#print01Report(mydata, modelname = "/Users/anuschka/Documents/labjournal/results/data_report")

#Estimate the first model
myeffd1c <- getEffects(mydata)
myeffd1c<- includeEffects(myeffd1c, degPlus) 
myeffd1c <- includeEffects(myeffd1c, transTriads)
myeffd1c <- includeEffects(myeffd1c, absDiffX, interaction1 = "ki")
myeffd1c <- includeEffects(myeffd1c, sameX, interaction1 = "dutch")
myeffd1c <- includeEffects(myeffd1c, absDiffX, interaction1 = "pub_first")
#myeffd1 <- includeEffects(myeffd1, sameX, interaction1 = "twitter_dum")
myeffd1c <- includeEffects(myeffd1c, sameX, interaction1 = "gender")
(ansd1c <- siena07(myAlgorithm, data = mydata, effects = myeffd1c))
```


```{r, eval=FALSE}
#Save the last model since it has the lowest maximum convergence ratio. 
save(ansd1c, file="/Users/anuschka/Documents/labjournal/results/data_model_app")
```

```{r, echo=FALSE}
load("/Users/anuschka/Documents/labjournal/results/data_model_app")
summary(ansd1c)
```

```{r,eval=FALSE}
myeffd2d <- getEffects(mydata)
myeffd2d <- includeEffects(myeffd2d, degPlus) 
myeffd2d <- includeEffects(myeffd2d, transTriads)
myeffd2d <- includeEffects(myeffd2d, altX, interaction1 = "ki")
myeffd2d <- includeEffects(myeffd2d, sameX, interaction1 = "dutch")
myeffd2d <- includeEffects(myeffd2d, absDiffX, interaction1 = "pub_first")
#myeffd2d <- includeEffects(myeffd2d, sameX, interaction1 = "twitter_dum")
myeffd2d <- includeEffects(myeffd2d, sameX, interaction1 = "gender")
(ansd2d <- siena07(myAlgorithm, data = mydata, effects = myeffd2d, prevAns = ansd1c))
```

```{r, eval=FALSE}
#Save the last model since it has the lowest maximum convergence ratio. 
save(ansd2d, file="/Users/anuschka/Documents/labjournal/results/data_model_app2")
```

```{r, echo=FALSE}
load("/Users/anuschka/Documents/labjournal/results/data_model_app2")
summary(ansd2d)
```



