Download R source file
library(RSiena)
library(sna)
library(rgl)
packageVersion("RSiena")
setwd('/Users/davidschaefer/AeroFS/ASU/Teaching/Duke/lab/')
dim(s50a)
head(s50a, 10)
apply(s50a,FUN=table,MARGIN=2,useNA='always')
table(s50a[,1],s50a[,2],useNA='always')
table(s50a[,2],s50a[,3],useNA='always')
( totalChange <- table(s50a[,1],s50a[,3],useNA='always') )
sum(diag(totalChange)) / sum(totalChange)
dim(s50s)
head(s50s, 10)
apply(s50s,FUN=table,MARGIN=2,useNA='always')
( fakeAttr <- rep(c(0, 1), each=25) )
dim(s501)
table(s501,useNA='always')
s50all <- array(c(s501,s502,s503),dim=c(dim(s501),3))
dim(s50all)
apply(s50all, 3, function(x) table(x,useNA='always'))
table(s501,s502,useNA='always')
table(s502,s503,useNA='always')
table(s501,s503,useNA='always')
color5 <- c('gray95','gray70','gray50','gray30','gray5')
color3 <- c('gray95','gray50','gray5')
g.layout <- gplot(apply(s50all, c(1,2), max), usearrows=F)
par(mfrow=c(2,3))
gplot(s501, vertex.col=color5[s50a[,1]], arrowhead.cex=.75, edge.col='gray70', coord=g.layout, main='Drinking t1')
gplot(s502, vertex.col=color5[s50a[,2]], arrowhead.cex=.75, edge.col='gray70', coord=g.layout, main='Drinking t2')
gplot(s503, vertex.col=color5[s50a[,3]], arrowhead.cex=.75, edge.col='gray70', coord=g.layout, main='Drinking t3')
gplot(s501, vertex.col=color3[s50s[,1]], arrowhead.cex=.75, edge.col='gray70', coord=g.layout, main='Smoking t1')
gplot(s502, vertex.col=color3[s50s[,2]], arrowhead.cex=.75, edge.col='gray70', coord=g.layout, main='Smoking t2')
gplot(s503, vertex.col=color3[s50s[,3]], arrowhead.cex=.75, edge.col='gray70', coord=g.layout, main='Smoking t3')
friendship <- sienaDependent(array(c(s501,s502,s503),
dim=c(dim(s501),3)))
class(s50a)
drinking <- sienaDependent(s50a,type="behavior")
smoking <- sienaDependent(s50s,type="behavior")
fakeAttrCC <- coCovar(fakeAttr)
myDataDrink <- sienaDataCreate(friendship,drinking,fakeAttrCC)
myDataDrink
myDataDrinkSmoke <- sienaDataCreate(friendship,drinking,smoking,fakeAttrCC)
myDataDrinkSmoke
myData <- sienaDataCreate(friendship)
myData
myModelDrinkSmoke <- getEffects(myDataDrinkSmoke)
myModelDrinkSmoke
print01Report(myDataDrinkSmoke,modelname='drinkSmoke160520')
effectsDocumentation(myModelDrinkSmoke)
myModelDrinkSmoke <- includeEffects(myModelDrinkSmoke,avSim,
interaction1="friendship",name="drinking")
myModelDrinkSmoke <- includeEffects(myModelDrinkSmoke,isolate,
interaction1="friendship",name="drinking")
myModelDrinkSmoke <- includeEffects(myModelDrinkSmoke,egoX,
interaction1="drinking",name="friendship")
myModelDrinkSmoke <- includeEffects(myModelDrinkSmoke,simX,
interaction1="drinking",name="friendship")
myModelDrinkSmoke <- includeEffects(myModelDrinkSmoke,altX,
interaction1="drinking",name="friendship")
myModelDrinkSmoke <- includeEffects(myModelDrinkSmoke, recip, transTrip,
transRecTrip, cycle3, name="friendship")
myModelDrinkSmoke <- includeEffects(myModelDrinkSmoke, egoX, altX, sameX,
interaction1='fakeAttrCC', name="friendship")
myModelDrinkSmoke <- includeEffects(myModelDrinkSmoke, effFrom,
interaction1='fakeAttrCC', name="drinking")
myModelDrinkSmoke
modelOptions <- sienaAlgorithmCreate(
projname='lab060520', MaxDegree=c(friendship=6),
doubleAveraging=0, diagonalize=.2, seed=786840)
myResults <- siena07(modelOptions, data=myDataDrinkSmoke,
effects= myModelDrinkSmoke, batch=FALSE, verbose=TRUE,
useCluster=TRUE, nbrNodes=3)
myResults
myResults2 <- siena07(modelOptions, data=myDataDrinkSmoke,
effects= myModelDrinkSmoke, batch=FALSE, verbose=TRUE,
useCluster=TRUE, nbrNodes=3,
prevAns=myResults, returnDeps=T)
myResults2
myRes <- myResults2
parameter <- myRes$effects$effectName
estimate <- myRes $theta
st.error <- sqrt(diag(myRes $covtheta))
normal.variate <- estimate/st.error
p.value.2sided <- 2*pnorm(abs(normal.variate),lower.tail=FALSE)
data.frame(parameter,
estimate=round(estimate,3),
st.error=round(st.error,3),
normal.variate=round(normal.variate,2),
p.value=round(p.value.2sided,4)
)
( gof.id <- sienaGOF(myRes, verbose=TRUE, varName="friendship", IndegreeDistribution,
join=T, cumulative=F) )
plot(gof.id)
( gof.od <- sienaGOF(myRes, verbose=TRUE, varName="friendship", OutdegreeDistribution,
join=T, cumulative=F) )
plot(gof.od)
( gof.gd <- sienaGOF(myRes, verbose=TRUE, varName="friendship", GeodesicDistribution,
join=T, cumulative=F) )
plot(gof.gd)
(gof.tc <- sienaGOF(myRes, verbose=TRUE, varName="friendship", TriadCensus, join=T) )
plot(gof.tc, scale=TRUE, center=TRUE)
( gof.ev <- sienaGOF(myRes, verbose=TRUE, varName="friendship", EigenvalueDistribution,
join=T, cumulative=F) )
plot(gof.ev)
( gof.behaviour <- sienaGOF(myRes,BehaviorDistribution,
verbose=TRUE,join=TRUE,varName="drinking") )
plot(gof.behaviour)
( gof.MoranGeary <- sienaGOF(myRes,MoranGeary,
verbose=TRUE,join=FALSE,varName=c("friendship","drinking")) )
plot(gof.MoranGeary,period=1)
plot(gof.MoranGeary,period=2)
( gof.Moran <- sienaGOF(myRes,Moran123,
verbose=TRUE,join=TRUE,varName=c("friendship","drinking")) )
plot(gof.Moran)
( gof.Geary <- sienaGOF(sim.results,Geary123,
verbose=TRUE,join=TRUE,varName=c("friendship","drinking")) )
plot(gof.Geary)
( gof.EgoAlterTable <- sienaGOF(myRes,EgoAlterTable,
verbose=TRUE,join=TRUE,varName=c("friendship","drinking")) )
plot(gof.EgoAlterTable,center=TRUE,scale=TRUE)
tt <- sienaTimeTest(myRes)
summary(tt)
obj_n <- function(vi, vj){
b1*(vi-v_av) + b2*(vj-v_av) + b3*(1 - abs(vi-vj)/ran_v - sim_av)
}
v_av <- 3.113
sim_av <- 0.6744
ran_v <- 4
b1 <- .0557
b2 <- -.0814
b3 <- 1.3071
vv <- c(1, 2, 3, 4, 5)
sel_tab <- outer(vv, vv, obj_n)
sel_tab
round(sel_tab,3)
nx <- 5
ny <- nx
hgt = 0.25 * (sel_tab[-nx,-ny] + sel_tab[-1,-ny] + sel_tab[-nx,-1] + sel_tab[-1,-1])
hgt = (hgt - min(hgt)) / (max(hgt) - min(hgt))
persp(vv, vv, sel_tab, col=heat.colors(32)[floor(31*hgt+1)], theta=20, phi=00, zlim=c(-1.5,1),
xlab='Ego Drinking', ylab='Alter Drinking', zlab='Contribution to Network Function', ticktype = "detailed")
open3d(windowRect=c(50,50,800,800))
persp3d(vv, vv, sel_tab, col=heat.colors(32)[floor(31*hgt+1)], theta=20, phi=00, zlim=c(-1.5,1),
xlab='Ego Drinking', ylab='Alter Drinking', zlab='Contribution to Network Function', ticktype = "detailed")
obj_b <- function(vi, vj){
b1*(vi-v_av) + b2*(vi-v_av)^2 + b3*(1 - abs(vi-vj)/ran_v - sim_av)
}
v_av <- 3.113
sim_av <- 0.6983
b1 <- 0.42
b2 <- -0.0721
b3 <- 3.9603
vv <- c(1, 2, 3, 4, 5)
t(outer(vv, vv, obj_b))
round(t(outer(vv, vv, obj_b)),2)
tab_sel2 <- xtable(round(t(outer(vv, vv, obj_b)),2))
igraphNetworkExtraction <- function(i, data, sims, period, groupName, varName){
require(igraph)
dimsOfDepVar<- attr(data[[groupName]]$depvars[[varName]], "netdims")
missings <- is.na(data[[groupName]]$depvars[[varName]][,,period]) |
is.na(data[[groupName]]$depvars[[varName]][,,period+1])
if (is.null(i)) {
original <- data[[groupName]]$depvars[[varName]][,,period+1]
original[missings] <- 0
returnValue <- graph.adjacency(original)
}
else
{
missings <- graph.adjacency(missings)
returnValue <- graph.difference(
graph.empty(dimsOfDepVar) +
edges(t(sims[[i]][[groupName]][[varName]][[period]][,1:2])),
missings)
}
returnValue
}
GeodesicDistribution <- function (i, data, sims, period, groupName,
varName, levls=c(1:5,Inf), cumulative=TRUE, ...) {
x <- networkExtraction(i, data, sims, period, groupName, varName)
require(sna)
a <- sna::geodist(symmetrize(x))$gdist
if (cumulative)
{
gdi <- sapply(levls, function(i){ sum(a<=i) })
}
else
{
gdi <- sapply(levls, function(i){ sum(a==i) })
}
names(gdi) <- as.character(levls)
gdi
}
TriadCensus <- function(i, data, sims, wave, groupName, varName, levls=1:16){
unloadNamespace("igraph")
require(sna)
require(network)
x <- networkExtraction(i, data, sims, wave, groupName, varName)
if (network.edgecount(x) <= 0){x <- symmetrize(x)}
tc <- sna::triad.census(x)[1,levls]
tc
}
EigenvalueDistribution <- function (i, data, sims, period, groupName, varName,
levls=c(seq(0,1,by=0.125)), cumulative=TRUE){
require(igraph)
x <- igraphNetworkExtraction(i, data, sims, period, groupName, varName)
a <- igraph::evcent(x)$vector
a[is.na(a)] <- Inf
lel <- length(levls)
if (cumulative)
{
cdi <- sapply(2:lel, function(i){sum(a<=levls[i])})
}
else
{
cdi <- sapply(2:lel, function(i){
sum(a<=levls[i]) - sum(a <= levls[i-1])})
}
names(cdi) <- as.character(levls[2:lel])
cdi
}
MoranGeary <- function(i, data, sims, wave, groupName, varName, levls=1:2){
require(sna)
require(network)
x <- as.sociomatrix(networkExtraction(i, data, sims, wave, groupName, varName[1]))
z <- behaviorExtraction(i,data,sims,wave,groupName,varName[2])
n <- length(z)
z.ave <- mean(z,na.rm=TRUE)
numerator <- n*sum(x*outer(z-z.ave,z-z.ave),na.rm=TRUE)
denominator <- sum(x,na.rm=TRUE)*sum((z-z.ave)^2,na.rm=TRUE)
res <- numerator/denominator
numerator <- (n-1)*sum(x*(outer(z,z,FUN='-')^2),na.rm=TRUE)
denominator <- 2*sum(x,na.rm=TRUE)*sum((z-z.ave)^2,na.rm=TRUE)
res[2] <- numerator/denominator
names(res) <- c("Moran","Geary")
return(res)
}
Moran123 <- function(i, data, sims, wave, groupName, varName, levls=1){
require(sna)
require(network)
x <- as.sociomatrix(networkExtraction(i, data, sims, wave, groupName, varName[1]))
z <- behaviorExtraction(i,data,sims,wave,groupName,varName[2])
x[is.na(x)] <- 0
z[is.na(z)] <- mean(z,na.rm=TRUE)
res <- nacf(x,z,lag.max=3,typ="moran")[2:4]
names(res) <- c("d=1","d=2","d=3")
return(res)
}
Geary123 <- function(i, data, sims, wave, groupName, varName, levls=1){
require(sna)
require(network)
x <- as.sociomatrix(networkExtraction(i, data, sims, wave, groupName, varName[1]))
z <- behaviorExtraction(i,data,sims,wave,groupName,varName[2])
x[is.na(x)] <- 0
z[is.na(z)] <- mean(z,na.rm=TRUE)
res <- nacf(x,z,lag.max=5,typ="geary")[2:4]
names(res) <- c("d=1","d=2","d=3")
return(res)
}
EgoAlterTable <- function(i, data, sims, wave, groupName, varName, levls=1){
x <- as.sociomatrix(networkExtraction(i, data, sims, wave, groupName, varName[1]))
z <- behaviorExtraction(i,data,sims,wave,groupName,varName[2])
res <- matrix(0,nr=5,nc=5)
for (ego in 1:5) {
for (alt in 1:5) {
thesum <- sum(x[z==ego,z==alt],na.rm=TRUE)
if (thesum>0) {
res[ego,alt] <- thesum
}
}}
thenames <- paste('e',col(res),'a',row(res),sep='')
res <- c(t(res))
names(res) <- thenames
return(res)
}