SAOMs in R with RSiena

install.packages("RSiena", dependencies = TRUE)
install.packages("snow", dependencies = TRUE)
install.packages("rlecuyer", dependencies = TRUE)
install.packages("xtable", dependencies = TRUE)
install.packages("car", dependencies = TRUE)

Load libraries

library(RSiena)
library(snow)
library(network) 
library(rlecuyer)
library(xtable)
library(car)

Load class networks

load("data/recognize_t1.rda")
load("data/recognize_t2.rda")
load("data/breakout_t1.rda")
load("data/breakout_t2.rda")
load("data/meaningful_t1.rda")
load("data/meaningful_t2.rda")

Convert the networks to matrices

rec_t1   <-as.matrix(recognize_t1, matrix.type="adjacency")
rec_t2   <-as.matrix(recognize_t2, matrix.type="adjacency")
break_t1 <-as.matrix(breakout_t1,  matrix.type="adjacency")
break_t2 <-as.matrix(breakout_t2,  matrix.type="adjacency")
mean_t1  <-as.matrix(meaningful_t1,matrix.type="adjacency")
mean_t2  <-as.matrix(meaningful_t2,matrix.type="adjacency")


# Make sure there are only 0's, 1's, and 10's
table(rec_t1)
table(rec_t2)
table(break_t1)
table(break_t1)
table(mean_t1)
table(mean_t2)

Load covariates

attributes.mat <- as.matrix(read.csv("data/attributes.csv",header=TRUE))
prefix  <- coCovar(attributes.mat[,1])
program <- coCovar(attributes.mat[,2])

Create a Siena data object

In this case, we are making three.

## Simple Model
# Set dependent variables
recognition <-(sienaNet(array(c(rec_t1, rec_t2),    dim=c(13,13,2)), allowOnly=FALSE))
breakouts   <-(sienaNet(array(c(break_t1, break_t2),dim=c(13,13,2)), allowOnly=FALSE))
meaningful  <-(sienaNet(array(c(mean_t1, mean_t2),  dim=c(13,13,2)), allowOnly=FALSE))

# Define what data are to be used in the analysis
mydata01 <- sienaDataCreate(recognition, prefix, program)
myeff01  <- getEffects(mydata01)

mydata02 <- sienaDataCreate(breakouts, prefix, program)
myeff02 <- getEffects(mydata02)

mydata03 <- sienaDataCreate(meaningful, prefix, program)
myeff03 <- getEffects(mydata03)

Get effects documentation

Next, we ask Siena to evaluate the network for the types of structural covariates we could use in the analysis.

# See what effects are available
effectsDocumentation(myeff01)
effectsDocumentation(myeff02)
effectsDocumentation(myeff03)

Finally, we are ready to start creating the model

These are the variables that we are actually including in the model.

Who Recognizes Who

# Include Effects (Structural)
myeff01 <- includeEffects(myeff01,inPOP,       include=TRUE)
myeff01 <- includeEffects(myeff01,outPop,      include=TRUE)
myeff01 <- includeEffects(myeff01,Jin,         include=TRUE)
myeff01 <- includeEffects(myeff01,recip,       include=FALSE)
myeff01 <- includeEffects(myeff01,cycle3,      include=FALSE)
myeff01 <- includeEffects(myeff01,transTies,   include=FALSE)
myeff01 <- includeEffects(myeff01,gwespRR,     include=FALSE)
myeff01 <- includeEffects(myeff01,denseTriads, include=FALSE)
myeff01 <- includeEffects(myeff01,balance,     include=FALSE)
# Include the exogenous variables
myeff01 <- includeEffects(myeff01,altSqX, interaction1='prefix',  include=TRUE)
myeff01 <- includeEffects(myeff01,altSqX, interaction1='program', include=TRUE)
myeff01 <- includeEffects(myeff01,altX, interaction1='prefix',    include=FALSE)
myeff01 <- includeEffects(myeff01,altX, interaction1='program',   include=FALSE)

# Estimate Model
mymodel01 <- sienaModelCreate(projname='recognition_01')
ans01 <- siena07(mymodel01,data=mydata01,effects=myeff01,batch=FALSE,verbose=FALSE)
ans01
print01Report(mydata01,modelname='recognize_01')

Group Work

# Include Effects (Structural Only)
myeff02 <- includeEffects(myeff02,recip,      include=TRUE)
myeff02 <- includeEffects(myeff02,cycle3,     include=FALSE)
myeff02 <- includeEffects(myeff02,transTies,  include=TRUE)
myeff02 <- includeEffects(myeff02,gwespRR,    include=FALSE)
myeff02 <- includeEffects(myeff02,denseTriads,include=FALSE)
myeff02 <- includeEffects(myeff02,balance,    include=FALSE)
# Include the exogenous variables
myeff02 <- includeEffects(myeff02,altSqX, interaction1='prefix',  include=TRUE)
myeff02 <- includeEffects(myeff02,altSqX, interaction1='program', include=TRUE)
myeff02 <- includeEffects(myeff02,altX, interaction1='prefix',    include=FALSE)
myeff02 <- includeEffects(myeff02,altX, interaction1='program',   include=FALSE)

# Estimate Model
mymodel02 <- sienaModelCreate(projname='recognition_02')
ans02 <- siena07(mymodel02,data=mydata02,effects=myeff02,batch=FALSE,verbose=FALSE)
ans02
print01Report(mydata02,modelname='breakout_02')

Meaningful Relationships

# Include Effects (Structural Only)
myeff03 <- includeEffects(myeff03,recip,       include = TRUE)
myeff03 <- includeEffects(myeff03,cycle3,      include = TRUE)
myeff03 <- includeEffects(myeff03,transTies,   include = TRUE)
myeff03 <- includeEffects(myeff03,gwespRR,     include = FALSE)
myeff03 <- includeEffects(myeff03,denseTriads, include = TRUE)
myeff03 <- includeEffects(myeff03,balance,     include = TRUE)
# Include the exogenous variables
myeff03 <- includeEffects(myeff03,altSqX, interaction1='prefix',  include=TRUE)
myeff03 <- includeEffects(myeff03,altSqX, interaction1='program', include=TRUE)
myeff03 <- includeEffects(myeff03,altX, interaction1='prefix',    include=FALSE)
myeff03 <- includeEffects(myeff03,altX, interaction1='program',   include=FALSE)


# Estimate Model
mymodel03 <- sienaModelCreate(projname='recognition_03')
ans03 <- siena07(mymodel03,data=mydata03,effects=myeff03,batch=FALSE,verbose=FALSE)
ans03
print01Report(mydata03,modelname='recognize_03')