Title: | Simulate Dynamic Networks using Exponential Random Graph Models (ERGM) Family |
---|---|
Description: | Functions are provided to fit temporal lag models to dynamic networks. The models are build on top of exponential random graph models (ERGM) framework. There are functions for simulating or forecasting networks for future time points. Abhirup Mallik & Zack W. Almquist (2019) Stable Multiple Time Step Simulation/Prediction From Lagged Dynamic Network Regression Models, Journal of Computational and Graphical Statistics, 28:4, 967-979, <DOI: 10.1080/10618600.2019.1594834>. |
Authors: | Abhirup Mallik [aut, cre], Zack Almquist [aut] |
Maintainer: | Abhirup Mallik <[email protected]> |
License: | GPL-3 |
Version: | 0.3.5 |
Built: | 2025-02-21 05:16:52 UTC |
Source: | https://github.com/cran/dnr |
A data set containing the dynamic network of inter personal interactions among the visitors of a beach in southern California.
beach
beach
A list with 31 elements, each element represent one observation in time. Each element is a network of varying size.
Almquist, Z. W. and C. T. Butts (2014b). Logistic network regression for scalable analysis of networks with joint edge/ vertex dynamics. Sociological Methodology 44 (1), 1-33.
Plot for binary matrices, especially adjacency matrices.
binaryPlot(x, axlabs = TRUE, ...)
binaryPlot(x, axlabs = TRUE, ...)
x |
matrix |
axlabs |
Binary, should the axis labels be shown. |
... |
title, xlabs, ylabs. |
binaryPlot
Calculates the cluster coefficient from a network
clustCoef(x)
clustCoef(x)
x |
adjacency matrix |
Given a network in the form of adjacency matrix, this calculates the cluster coefficient. For a definition of cluster coefficient, please refer to the igraph documentation.
scaler
Abhirup
clustCoef(beach[[1]][, ])
clustCoef(beach[[1]][, ])
Implementation of simulation engine for dynamic networks using smoothing estimates of change statistics.
engineEdge( start_network, inputcoeff, ns, model.terms, model.formula, graph_mode, group, intercept, exvar, maxlag, lagmat, ylag, lambda = NA, method = "bayesglm", alpha.glmnet, paramout = TRUE )
engineEdge( start_network, inputcoeff, ns, model.terms, model.formula, graph_mode, group, intercept, exvar, maxlag, lagmat, ylag, lambda = NA, method = "bayesglm", alpha.glmnet, paramout = TRUE )
start_network |
Initial list of networks |
inputcoeff |
coefficient vector |
ns |
number of time points for simulation |
model.terms |
model terms in formula |
model.formula |
model formula (ergm) |
graph_mode |
'digraph' by default |
group |
group terms |
intercept |
intercept terms |
exvar |
extraneous covariates |
maxlag |
maximum lag |
lagmat |
lag matrix |
ylag |
lag vector for network lag terms |
lambda |
NA |
method |
'bayesglm' by default |
alpha.glmnet |
NA |
paramout |
T/F parameter estimation is returned. |
list: out_network: list of predicted networks coefmat: if paramout is TRUE, matrix of coefficients at all time.
Abhirup
## Not run: input_network=rdNets[1:6]; model.terms=c("triadcensus.003", "triadcensus.012", "triadcensus.102", "triadcensus.021D", "gwesp"); model.formula = net~triadcensus(0:3)+gwesp(decay = 0, fixed=FALSE, cutoff=30)-1; graph_mode='digraph'; group='dnc'; alpha.glmnet=1 directed=TRUE; method <- 'bayesglm' maxlag <- 3 lambda=NA intercept = c("edges") cdim <- length(model.terms) lagmat <- matrix(sample(c(0,1),(maxlag+1)*cdim,replace = TRUE),ncol = cdim) ylag <- rep(1,maxlag) lagmat[1,] <- rep(0,ncol(lagmat)) out <- paramEdge(input_network,model.terms, model.formula, graph_mode="digraph",group,intercept = c("edges"),exvar=NA, maxlag = 3, lagmat = lagmat, ylag = rep(1,maxlag), lambda = NA, method='bayesglm', alpha.glmnet=1) # start_network <- input_network inputcoeff <- out$coef$coef nvertex <- 47 ns <- 10 exvar <- NA tmp <- suppressWarnings(engineEdge(start_network=start_network,inputcoeff=inputcoeff,ns=ns, model.terms=model.terms, model.formula=model.formula, graph_mode=graph_mode,group=group,intercept=intercept, exvar=exvar, maxlag=maxlag, lagmat=lagmat, ylag=ylag, lambda = NA, method='bayesglm', alpha.glmnet=alpha.glmnet)) ## End(Not run)
## Not run: input_network=rdNets[1:6]; model.terms=c("triadcensus.003", "triadcensus.012", "triadcensus.102", "triadcensus.021D", "gwesp"); model.formula = net~triadcensus(0:3)+gwesp(decay = 0, fixed=FALSE, cutoff=30)-1; graph_mode='digraph'; group='dnc'; alpha.glmnet=1 directed=TRUE; method <- 'bayesglm' maxlag <- 3 lambda=NA intercept = c("edges") cdim <- length(model.terms) lagmat <- matrix(sample(c(0,1),(maxlag+1)*cdim,replace = TRUE),ncol = cdim) ylag <- rep(1,maxlag) lagmat[1,] <- rep(0,ncol(lagmat)) out <- paramEdge(input_network,model.terms, model.formula, graph_mode="digraph",group,intercept = c("edges"),exvar=NA, maxlag = 3, lagmat = lagmat, ylag = rep(1,maxlag), lambda = NA, method='bayesglm', alpha.glmnet=1) # start_network <- input_network inputcoeff <- out$coef$coef nvertex <- 47 ns <- 10 exvar <- NA tmp <- suppressWarnings(engineEdge(start_network=start_network,inputcoeff=inputcoeff,ns=ns, model.terms=model.terms, model.formula=model.formula, graph_mode=graph_mode,group=group,intercept=intercept, exvar=exvar, maxlag=maxlag, lagmat=lagmat, ylag=ylag, lambda = NA, method='bayesglm', alpha.glmnet=alpha.glmnet)) ## End(Not run)
Implementation of simulation engine for dynamic networks using smoothing estimates of change statistics.
engineEdgeBayes( start_network, inputcoeff, ns, model.terms, model.formula, graph_mode, group, intercept, exvar, maxlag, lagmat, ylag, lambda = NA, method = "bayesglm", alpha.glmnet, paramout = TRUE, Theta = NA )
engineEdgeBayes( start_network, inputcoeff, ns, model.terms, model.formula, graph_mode, group, intercept, exvar, maxlag, lagmat, ylag, lambda = NA, method = "bayesglm", alpha.glmnet, paramout = TRUE, Theta = NA )
start_network |
Initial list of networks |
inputcoeff |
coefficient vector |
ns |
number of time points for simulation |
model.terms |
model terms in formula |
model.formula |
model formula (ergm) |
graph_mode |
'digraph' by default |
group |
group terms |
intercept |
intercept terms |
exvar |
extraneous covariates |
maxlag |
maximum lag |
lagmat |
lag matrix |
ylag |
lag vector for network lag terms |
lambda |
NA |
method |
'bayesglm' by default |
alpha.glmnet |
NA |
paramout |
T/F parameter estimation is returned. |
Theta |
= prior probability matrix. |
## Not run: startNet <- rdNets[1:50] model.terms=c("triadcensus.003", "triadcensus.012", "triadcensus.102", "triadcensus.021D", "gwesp") model.formula = net~triadcensus(0:3)+gwesp(alpha=0, fixed=FALSE, cutoff=30)-1 graph_mode <- 'digraph' group <- 'dnc' alpha.glmnet <- 1 method <- 'bayesglm' maxlag <- 3 lambda <- NA intercept <- "edges" cdim <- length(model.terms) lagmat <- matrix(sample(c(0,1),(maxlag+1)*cdim,replace = TRUE),ncol = cdim) ylag <- rep(1,maxlag) lagmat[1,] <- rep(0,ncol(lagmat)) out.coef <- paramEdge(input_network = startNet, model.terms = model.terms, model.formula = model.formula, graph_mode='digraph', group=group,intercept = intercept, exvar=NA, maxlag = maxlag, lagmat = lagmat, ylag = ylag, lambda = NA, method='bayesglm', alpha.glmnet=1) inputcoeff <- out.coef$coef$coef.edge nvertex <- 47 ##find vertex here ns <- 1 exvar <- NA for(i in seq_along(startNet)) Theta <- Theta + startNet[[i]][,] Theta <- Theta/length(startNet) Theta <- thresh(Theta) out.bayes <- engineEdgeBayes(start_network=startNet, inputcoeff=inputcoeff, ns=ns, model.terms=model.terms, model.formula=model.formula, graph_mode=graph_mode, group=group,intercept=intercept, exvar=exvar, maxlag=maxlag, lagmat=lagmat, ylag=ylag, lambda = NA, method='bayesglm', alpha.glmnet=alpha.glmnet, Theta = Theta) ## End(Not run)
## Not run: startNet <- rdNets[1:50] model.terms=c("triadcensus.003", "triadcensus.012", "triadcensus.102", "triadcensus.021D", "gwesp") model.formula = net~triadcensus(0:3)+gwesp(alpha=0, fixed=FALSE, cutoff=30)-1 graph_mode <- 'digraph' group <- 'dnc' alpha.glmnet <- 1 method <- 'bayesglm' maxlag <- 3 lambda <- NA intercept <- "edges" cdim <- length(model.terms) lagmat <- matrix(sample(c(0,1),(maxlag+1)*cdim,replace = TRUE),ncol = cdim) ylag <- rep(1,maxlag) lagmat[1,] <- rep(0,ncol(lagmat)) out.coef <- paramEdge(input_network = startNet, model.terms = model.terms, model.formula = model.formula, graph_mode='digraph', group=group,intercept = intercept, exvar=NA, maxlag = maxlag, lagmat = lagmat, ylag = ylag, lambda = NA, method='bayesglm', alpha.glmnet=1) inputcoeff <- out.coef$coef$coef.edge nvertex <- 47 ##find vertex here ns <- 1 exvar <- NA for(i in seq_along(startNet)) Theta <- Theta + startNet[[i]][,] Theta <- Theta/length(startNet) Theta <- thresh(Theta) out.bayes <- engineEdgeBayes(start_network=startNet, inputcoeff=inputcoeff, ns=ns, model.terms=model.terms, model.formula=model.formula, graph_mode=graph_mode, group=group,intercept=intercept, exvar=exvar, maxlag=maxlag, lagmat=lagmat, ylag=ylag, lambda = NA, method='bayesglm', alpha.glmnet=alpha.glmnet, Theta = Theta) ## End(Not run)
Implementation of simulation engine for dynamic networks without using smoothing estimates of change statistics.
engineEdgeNS( start_network, inputcoeff, ns, model.terms, model.formula, graph_mode, group, intercept, exvar, maxlag, lagmat, ylag, lambda = NA, method = "bayesglm", alpha.glmnet, paramout = TRUE )
engineEdgeNS( start_network, inputcoeff, ns, model.terms, model.formula, graph_mode, group, intercept, exvar, maxlag, lagmat, ylag, lambda = NA, method = "bayesglm", alpha.glmnet, paramout = TRUE )
start_network |
Initial list of networks |
inputcoeff |
coefficient vector |
ns |
number of time points for simulation |
model.terms |
model terms in formula |
model.formula |
model formula (ergm) |
graph_mode |
'digraph' by default |
group |
group terms |
intercept |
intercept terms |
exvar |
extraneous covariates |
maxlag |
maximum lag |
lagmat |
lag matrix |
ylag |
lag vector for network lag terms |
lambda |
NA |
method |
'bayesglm' by default |
alpha.glmnet |
NA |
paramout |
T/F parameter estimation is returned. |
list: out_network: list of predicted networks coefmat: if paramout is TRUE, matrix of coefficients at all time.
Abhirup
## Not run: input_network=rdNets[1:6]; model.terms=c("triadcensus.003", "triadcensus.012", "triadcensus.102", "triadcensus.021D", "gwesp"); model.formula = net~triadcensus(0:3)+gwesp(decay=0, fixed=FALSE, cutoff=30)-1; graph_mode='digraph'; group='dnc'; alpha.glmnet=1 directed=TRUE; method <- 'bayesglm' maxlag <- 3 lambda=NA intercept = c("edges") cdim <- length(model.terms) lagmat <- matrix(sample(c(0,1),(maxlag+1)*cdim,replace = TRUE),ncol = cdim) ylag <- rep(1,maxlag) lagmat[1,] <- rep(0,ncol(lagmat)) out <- paramEdge(input_network,model.terms, model.formula, graph_mode="digraph",group,intercept = c("edges"),exvar=NA, maxlag = 3, lagmat = lagmat, ylag = rep(1,maxlag), lambda = NA, method='bayesglm', alpha.glmnet=1) # start_network <- input_network inputcoeff <- out$coef$coef nvertex <- 47 ns <- 10 exvar <- NA tmp <- suppressWarnings(engineEdgeNS(start_network=start_network, inputcoeff=inputcoeff,ns=ns, model.terms=model.terms, model.formula=model.formula, graph_mode=graph_mode,group=group,intercept=intercept, exvar=exvar, maxlag=maxlag, lagmat=lagmat, ylag=ylag, lambda = NA, method='bayesglm', alpha.glmnet=alpha.glmnet)) ## End(Not run)
## Not run: input_network=rdNets[1:6]; model.terms=c("triadcensus.003", "triadcensus.012", "triadcensus.102", "triadcensus.021D", "gwesp"); model.formula = net~triadcensus(0:3)+gwesp(decay=0, fixed=FALSE, cutoff=30)-1; graph_mode='digraph'; group='dnc'; alpha.glmnet=1 directed=TRUE; method <- 'bayesglm' maxlag <- 3 lambda=NA intercept = c("edges") cdim <- length(model.terms) lagmat <- matrix(sample(c(0,1),(maxlag+1)*cdim,replace = TRUE),ncol = cdim) ylag <- rep(1,maxlag) lagmat[1,] <- rep(0,ncol(lagmat)) out <- paramEdge(input_network,model.terms, model.formula, graph_mode="digraph",group,intercept = c("edges"),exvar=NA, maxlag = 3, lagmat = lagmat, ylag = rep(1,maxlag), lambda = NA, method='bayesglm', alpha.glmnet=1) # start_network <- input_network inputcoeff <- out$coef$coef nvertex <- 47 ns <- 10 exvar <- NA tmp <- suppressWarnings(engineEdgeNS(start_network=start_network, inputcoeff=inputcoeff,ns=ns, model.terms=model.terms, model.formula=model.formula, graph_mode=graph_mode,group=group,intercept=intercept, exvar=exvar, maxlag=maxlag, lagmat=lagmat, ylag=ylag, lambda = NA, method='bayesglm', alpha.glmnet=alpha.glmnet)) ## End(Not run)
Simulation engine for dynamic networks with variable number of vertices. Implements exponential family based hierarchical model for vertices and the edges.
engineVertex( InputNetwork, numSim, maxLag, VertexStatsvec = rep(1, nvertexstats), VertexLag = rep(1, maxLag), VertexLagMatrix = matrix(1, maxLag, length(VertexStatsvec)), VertexModelGroup = NA, VertexAttLag = rep(1, maxLag), dayClassObserved = NA, dayClassFuture = NA, EdgeModelTerms, EdgeModelFormula, EdgeGroup = NA, EdgeIntercept = c("edges"), EdgeNetparam = NA, EdgeExvar = NA, EdgeLag = rep(1, maxLag), EdgeLagMatrix = matrix(1, maxLag, length(EdgeModelTerms)), regMethod = "bayesglm", paramout = TRUE )
engineVertex( InputNetwork, numSim, maxLag, VertexStatsvec = rep(1, nvertexstats), VertexLag = rep(1, maxLag), VertexLagMatrix = matrix(1, maxLag, length(VertexStatsvec)), VertexModelGroup = NA, VertexAttLag = rep(1, maxLag), dayClassObserved = NA, dayClassFuture = NA, EdgeModelTerms, EdgeModelFormula, EdgeGroup = NA, EdgeIntercept = c("edges"), EdgeNetparam = NA, EdgeExvar = NA, EdgeLag = rep(1, maxLag), EdgeLagMatrix = matrix(1, maxLag, length(EdgeModelTerms)), regMethod = "bayesglm", paramout = TRUE )
InputNetwork |
List of input networks |
numSim |
number of time points to simulate |
maxLag |
maximum Lag |
VertexStatsvec |
Binary vector for vertex model. |
VertexLag |
vector of lag for vertex |
VertexLagMatrix |
matrix of lags for vertex stats. |
VertexModelGroup |
Group term for vertex model. |
VertexAttLag |
Lag vector for group term for vertex. |
dayClassObserved |
Observed day class. |
dayClassFuture |
Dayclass vector for future, must be of size numsim. |
EdgeModelTerms |
Edge Model terms |
EdgeModelFormula |
Edge model formula |
EdgeGroup |
edge group term |
EdgeIntercept |
edge intercept |
EdgeNetparam |
edge network parameter name |
EdgeExvar |
edge extraneous variable |
EdgeLag |
edge Lag vector |
EdgeLagMatrix |
edge lag matrix |
regMethod |
regression method. "bayesglm" by default |
paramout |
T/F on if regression needs to run. |
List with following elements: SimNetwork: Output Networks EdgeParameterMat: Matrix of edge parameter VertexParameterMat: Matrix of Vertex parameters.
Abhirup
## Not run: nvertexstats <- 9 maxLag = 3 VertexLag = rep(1, maxLag) VertexLagMatrix <- matrix(0, maxLag, nvertexstats) VertexLagMatrix[, c(4, 7)] <- 1 VertexLagMatrix[c(2,3),7] <- 0 getWeekend <- function(z){ weekends <- c("Saturday", "Sunday") if(!network::is.network(z)){ if(is.na(z)) return(NA) } else { zDay <- get.network.attribute(z, attrname = "day") out <- ifelse(zDay %in% weekends, 1, 0) return(out) } } dayClass <- numeric(length(beach)) for(i in seq_along(dayClass)) { dayClass[i] <- getWeekend(beach[[i]]) } dayClass <- na.omit(dayClass) simResult <- suppressWarnings(engineVertex(InputNetwork = beach, numSim = 5, maxLag = 3, VertexStatsvec = rep(1, nvertexstats), VertexModelGroup = "regular", VertexAttLag = rep(1, maxLag), VertexLag = rep(1, maxLag), VertexLagMatrix = VertexLagMatrix, dayClassObserved = dayClass, dayClassFuture = c(1, 0, 0, 0, 0), EdgeModelTerms = NA, EdgeModelFormula = NA, EdgeGroup = NA, EdgeIntercept = c("edges"), EdgeNetparam = c("logSize"), EdgeExvar = NA, EdgeLag = c(0, 1, 0), paramout = TRUE )) ## End(Not run)
## Not run: nvertexstats <- 9 maxLag = 3 VertexLag = rep(1, maxLag) VertexLagMatrix <- matrix(0, maxLag, nvertexstats) VertexLagMatrix[, c(4, 7)] <- 1 VertexLagMatrix[c(2,3),7] <- 0 getWeekend <- function(z){ weekends <- c("Saturday", "Sunday") if(!network::is.network(z)){ if(is.na(z)) return(NA) } else { zDay <- get.network.attribute(z, attrname = "day") out <- ifelse(zDay %in% weekends, 1, 0) return(out) } } dayClass <- numeric(length(beach)) for(i in seq_along(dayClass)) { dayClass[i] <- getWeekend(beach[[i]]) } dayClass <- na.omit(dayClass) simResult <- suppressWarnings(engineVertex(InputNetwork = beach, numSim = 5, maxLag = 3, VertexStatsvec = rep(1, nvertexstats), VertexModelGroup = "regular", VertexAttLag = rep(1, maxLag), VertexLag = rep(1, maxLag), VertexLagMatrix = VertexLagMatrix, dayClassObserved = dayClass, dayClassFuture = c(1, 0, 0, 0, 0), EdgeModelTerms = NA, EdgeModelFormula = NA, EdgeGroup = NA, EdgeIntercept = c("edges"), EdgeNetparam = c("logSize"), EdgeExvar = NA, EdgeLag = c(0, 1, 0), paramout = TRUE )) ## End(Not run)
Simulation engine for dynamic networks with variable number of vertices. Implements exponential family based hierarchical model for vertices and the edges. This does not implement smoothing for estimated predictor matrices.
engineVertexNS( InputNetwork, numSim, maxLag, VertexStatsvec = rep(1, nvertexstats), VertexLag = rep(1, maxLag), VertexLagMatrix = matrix(1, maxLag, length(VertexStatsvec)), VertexModelGroup = NA, VertexAttLag = rep(1, maxLag), dayClassObserved = NA, dayClassFuture = NA, EdgeModelTerms, EdgeModelFormula, EdgeGroup = NA, EdgeIntercept = c("edges"), EdgeNetparam = NA, EdgeExvar = NA, EdgeLag = rep(1, maxLag), EdgeLagMatrix = matrix(1, maxLag, length(EdgeModelTerms)), regMethod = "bayesglm", paramout = TRUE )
engineVertexNS( InputNetwork, numSim, maxLag, VertexStatsvec = rep(1, nvertexstats), VertexLag = rep(1, maxLag), VertexLagMatrix = matrix(1, maxLag, length(VertexStatsvec)), VertexModelGroup = NA, VertexAttLag = rep(1, maxLag), dayClassObserved = NA, dayClassFuture = NA, EdgeModelTerms, EdgeModelFormula, EdgeGroup = NA, EdgeIntercept = c("edges"), EdgeNetparam = NA, EdgeExvar = NA, EdgeLag = rep(1, maxLag), EdgeLagMatrix = matrix(1, maxLag, length(EdgeModelTerms)), regMethod = "bayesglm", paramout = TRUE )
InputNetwork |
List of input networks |
numSim |
number of time points to simulate |
maxLag |
maximum Lag |
VertexStatsvec |
Binary vector for vertex model. |
VertexLag |
vector of lag for vertex |
VertexLagMatrix |
matrix of lags for vertex stats. |
VertexModelGroup |
Group term for vertex model. |
VertexAttLag |
Lag vector for group term for vertex. |
dayClassObserved |
Observed day class. |
dayClassFuture |
Dayclass vector for future, must be of size numsim. |
EdgeModelTerms |
Edge Model terms |
EdgeModelFormula |
Edge model formula |
EdgeGroup |
edge group term |
EdgeIntercept |
edge intercept |
EdgeNetparam |
edge network parameter name |
EdgeExvar |
edge extraneous variable |
EdgeLag |
edge Lag vector |
EdgeLagMatrix |
edge lag matrix |
regMethod |
regression method. "bayesglm" by default |
paramout |
T/F on if regression needs to run. |
List with following elements:
SimNetwork: Output Networks
EdgeParameterMat: Matrix of edge parameter
VertexParameterMat: Matrix of Vertex parameters.
## Not run: nvertexstats <- 9 maxLag <- 3 VertexLag <- rep(1, maxLag) VertexLagMatrix <- matrix(0, maxLag, nvertexstats) VertexLagMatrix[, c(4, 7)] <- 1 VertexLagMatrix[c(2, 3), ] <- 1 simResult <- suppressWarnings(engineVertexNS(InputNetwork = beach, numSim = 5, maxLag = 3, VertexStatsvec = rep(1, nvertexstats), VertexModelGroup = "regular", VertexAttLag = rep(1, maxLag), VertexLag = rep(1, maxLag), VertexLagMatrix = VertexLagMatrix, EdgeModelTerms = NA, EdgeModelFormula = NA, EdgeGroup = NA, EdgeIntercept = c("edges") )) ## End(Not run)
## Not run: nvertexstats <- 9 maxLag <- 3 VertexLag <- rep(1, maxLag) VertexLagMatrix <- matrix(0, maxLag, nvertexstats) VertexLagMatrix[, c(4, 7)] <- 1 VertexLagMatrix[c(2, 3), ] <- 1 simResult <- suppressWarnings(engineVertexNS(InputNetwork = beach, numSim = 5, maxLag = 3, VertexStatsvec = rep(1, nvertexstats), VertexModelGroup = "regular", VertexAttLag = rep(1, maxLag), VertexLag = rep(1, maxLag), VertexLagMatrix = VertexLagMatrix, EdgeModelTerms = NA, EdgeModelFormula = NA, EdgeGroup = NA, EdgeIntercept = c("edges") )) ## End(Not run)
Calculate the expectation of degree distribution of network
expdeg(x)
expdeg(x)
x |
adjacency matrix |
Given a network in adjacency matrix form, this calculates the expected degree statistic using igraph degree distribution function.
scaler
Abhirup
expdeg(beach[[1]][, ])
expdeg(beach[[1]][, ])
Calculate number of triangles of a network
ntriangles(x)
ntriangles(x)
x |
square matrix (adjacency matrix) |
This function calculates the number of triangles in a network given an adjacency matrix. We use igraph for this.
scaler, number of triangles
Abhirup
ntriangles(beach[[1]][, ])
ntriangles(beach[[1]][, ])
Parameter estimation for the static vertex case.
paramEdge( input_network, model.terms, model.formula, graph_mode = "digraph", group, intercept = c("edges"), exvar = NA, maxlag = 3, lagmat = matrix(sample(c(0, 1), (maxlag + 1) * length(model.terms), replace = T), ncol = length(model.terms)), ylag = rep(1, maxlag), lambda = NA, method = "glmnet", alpha.glmnet = 1, paramout = TRUE )
paramEdge( input_network, model.terms, model.formula, graph_mode = "digraph", group, intercept = c("edges"), exvar = NA, maxlag = 3, lagmat = matrix(sample(c(0, 1), (maxlag + 1) * length(model.terms), replace = T), ncol = length(model.terms)), ylag = rep(1, maxlag), lambda = NA, method = "glmnet", alpha.glmnet = 1, paramout = TRUE )
input_network |
Input network. |
model.terms |
model terms, must be ERGM terms expanded. |
model.formula |
ERGM formula for each time point. |
graph_mode |
'digraph' by default for bidirectional. |
group |
grouping covariates for vertices. |
intercept |
intercept terms. |
exvar |
Extraneous variables |
maxlag |
maximum lag. |
lagmat |
Matrix of dimension (maxlag+1)x(length(model.terms)) |
ylag |
lag vectors of length=maxlag. |
lambda |
NA |
method |
Regression method, default is 'bayesglm' |
alpha.glmnet |
if regularization is used. not needed for bayesglm. |
paramout |
TRUE by default. if parameters are needed. |
list with elements: coef: coefficients mplematfull: full matrix of change statistics mplemat: subset of matrix of change statistics
Abhirup
## Not run: input_network=rdNets[1:6] model.terms=c("triadcensus.003", "triadcensus.012", "triadcensus.102", "triadcensus.021D", "gwesp"); model.formula = net~triadcensus(0:3)+gwesp(decay=0, fixed=FALSE, cutoff=30)-1; graph_mode='digraph'; group='dnc'; alpha.glmnet=1 directed=TRUE; method <- 'bayesglm' maxlag <- 3 lambda=NA intercept = c("edges") cdim <- length(model.terms) lagmat <- matrix(sample(c(0,1),(maxlag+1)*cdim,replace = TRUE),ncol = cdim) ylag <- rep(1,maxlag) exvar <- NA out <- paramEdge(input_network,model.terms, model.formula, graph_mode='digraph',group,intercept = c("edges"),exvar=NA, maxlag = 3, lagmat = matrix(sample(c(0,1),(maxlag+1)*cdim, replace = TRUE),ncol = cdim), ylag = rep(1,maxlag), lambda = NA, method='bayesglm', alpha.glmnet=1) ## End(Not run)
## Not run: input_network=rdNets[1:6] model.terms=c("triadcensus.003", "triadcensus.012", "triadcensus.102", "triadcensus.021D", "gwesp"); model.formula = net~triadcensus(0:3)+gwesp(decay=0, fixed=FALSE, cutoff=30)-1; graph_mode='digraph'; group='dnc'; alpha.glmnet=1 directed=TRUE; method <- 'bayesglm' maxlag <- 3 lambda=NA intercept = c("edges") cdim <- length(model.terms) lagmat <- matrix(sample(c(0,1),(maxlag+1)*cdim,replace = TRUE),ncol = cdim) ylag <- rep(1,maxlag) exvar <- NA out <- paramEdge(input_network,model.terms, model.formula, graph_mode='digraph',group,intercept = c("edges"),exvar=NA, maxlag = 3, lagmat = matrix(sample(c(0,1),(maxlag+1)*cdim, replace = TRUE),ncol = cdim), ylag = rep(1,maxlag), lambda = NA, method='bayesglm', alpha.glmnet=1) ## End(Not run)
Parameter estimation fro dynamic vertex case. The interface remaining almost identical to the static vertex one.
paramVertex( InputNetwork, VertexStatsvec = rep(1, nvertexstats), maxLag, VertexLag = rep(1, maxLag), VertexLagMatrix = matrix(1, maxLag, length(VertexStatsvec)), VertexModelGroup = NA, VertexAttLag = rep(1, maxLag), dayClass = NA, EdgeModelTerms, EdgeModelFormula, EdgeGroup, EdgeIntercept = c("edges"), EdgeNetparam = NA, EdgeExvar = NA, EdgeLag = rep(1, maxLag), EdgeLagMatrix = matrix(1, maxLag, length(EdgeModelTerms)), regMethod = "bayesglm", paramout = FALSE )
paramVertex( InputNetwork, VertexStatsvec = rep(1, nvertexstats), maxLag, VertexLag = rep(1, maxLag), VertexLagMatrix = matrix(1, maxLag, length(VertexStatsvec)), VertexModelGroup = NA, VertexAttLag = rep(1, maxLag), dayClass = NA, EdgeModelTerms, EdgeModelFormula, EdgeGroup, EdgeIntercept = c("edges"), EdgeNetparam = NA, EdgeExvar = NA, EdgeLag = rep(1, maxLag), EdgeLagMatrix = matrix(1, maxLag, length(EdgeModelTerms)), regMethod = "bayesglm", paramout = FALSE )
InputNetwork |
list of networks. |
VertexStatsvec |
binary vector of size 8. |
maxLag |
maximum lag, numeric. |
VertexLag |
binary vector of length maxLag. |
VertexLagMatrix |
binary matrix of size maxLag x 8. |
VertexModelGroup |
Grouping term for vertex model. Must be from vertex attribute list. |
VertexAttLag |
Lag vector for vertex group terms. Of length maxLag. |
dayClass |
Any network level present time attribute vector. Here used to indicate week/weekend as 0/1. |
EdgeModelTerms |
Model terms in edge model. |
EdgeModelFormula |
Model formula in edge model. |
EdgeGroup |
Group terms in edge model. |
EdgeIntercept |
Intercept for edge model. |
EdgeNetparam |
Network level parameter for edge model (currently only supported parameter is current network size). |
EdgeExvar |
Extraneous variable for edge model. |
EdgeLag |
binary vector of length maxLag. |
EdgeLagMatrix |
binary matrix of dim maxLag x length(EdgeModelTerms) |
regMethod |
Regression method. default: "bayesglm" |
paramout |
T/F Should the parameter estimates be returned? |
The Vertex model parameter list is as follows (Freeman degree, In degree, Out degree, Eigen Centrality, Between centrality, Info centrality, Closeness centrality, log k cycles, log size). For more details about the definitions of the terms, please refer to the vertexstats.R file, which implements all of these. The definitions are in sna or igraph.
list with following elements:
EdgeCoef: edge coefficients.
Edgemplematfull: MPLE matrix from edges.
Edgemplemat: Subsetted MPLE matrix.
VertexCoef: Coefficients from vertex.
Vstats: Vertex statistics matrix.
EdgePredictor0: Edge predictors with imputations with 0.
EdgePredictor1: Edge predictors with imputations with 1.
EdgePredictorNA: Edge predictors with imputations with NA.
EdgeFit: Edge model.
VertexStatsFull: Vertex statistics matrix, full.
VertexFit: Vertex model.
Abhirup
nvertexstats <- 9 maxLag = 3 VertexLag = rep(1, maxLag) VertexLagMatrix <- matrix(0, maxLag, nvertexstats) VertexLagMatrix[, c(4, 7)] <- 1 VertexLagMatrix[c(2,3),7] <- 0 getWeekend <- function(z){ weekends <- c("Saturday", "Sunday") if(!network::is.network(z)){ if(is.na(z)) return(NA) } else { zDay <- get.network.attribute(z, attrname = "day") out <- ifelse(zDay %in% weekends, 1, 0) return(out) } } dayClass <- numeric(length(beach)) for(i in seq_along(dayClass)) { dayClass[i] <- getWeekend(beach[[i]]) } dayClass <- na.omit(dayClass) out <- paramVertex(InputNetwork = beach, maxLag = 3, VertexStatsvec = rep(1, nvertexstats), VertexModelGroup = "regular", VertexLag = rep(1, maxLag), VertexLagMatrix = VertexLagMatrix, dayClass = dayClass, EdgeModelTerms = NA, EdgeModelFormula = NA, EdgeGroup = NA, EdgeIntercept = c("edges"), EdgeNetparam = c("logSize"), EdgeExvar = NA, EdgeLag = c(1, 1, 0), paramout = TRUE)
nvertexstats <- 9 maxLag = 3 VertexLag = rep(1, maxLag) VertexLagMatrix <- matrix(0, maxLag, nvertexstats) VertexLagMatrix[, c(4, 7)] <- 1 VertexLagMatrix[c(2,3),7] <- 0 getWeekend <- function(z){ weekends <- c("Saturday", "Sunday") if(!network::is.network(z)){ if(is.na(z)) return(NA) } else { zDay <- get.network.attribute(z, attrname = "day") out <- ifelse(zDay %in% weekends, 1, 0) return(out) } } dayClass <- numeric(length(beach)) for(i in seq_along(dayClass)) { dayClass[i] <- getWeekend(beach[[i]]) } dayClass <- na.omit(dayClass) out <- paramVertex(InputNetwork = beach, maxLag = 3, VertexStatsvec = rep(1, nvertexstats), VertexModelGroup = "regular", VertexLag = rep(1, maxLag), VertexLagMatrix = VertexLagMatrix, dayClass = dayClass, EdgeModelTerms = NA, EdgeModelFormula = NA, EdgeGroup = NA, EdgeIntercept = c("edges"), EdgeNetparam = c("logSize"), EdgeExvar = NA, EdgeLag = c(1, 1, 0), paramout = TRUE)
Parameter estimation for Vertex model only for a list of dynamic networks.
paramVertexOnly( InputNetwork, VertexStatsvec = rep(1, nvertexstats), maxLag, VertexLag = rep(1, maxLag), VertexLagMatrix = matrix(1, maxLag, length(VertexStatsvec)), dayClass = NA, regMethod = "bayesglm" )
paramVertexOnly( InputNetwork, VertexStatsvec = rep(1, nvertexstats), maxLag, VertexLag = rep(1, maxLag), VertexLagMatrix = matrix(1, maxLag, length(VertexStatsvec)), dayClass = NA, regMethod = "bayesglm" )
InputNetwork |
Input network list. |
VertexStatsvec |
Binary vector of size 9, indicating vertex model. |
maxLag |
maximum lag. |
VertexLag |
Binary vector of size maxLag, indicating Lag terms in the model. |
VertexLagMatrix |
Binary matrix indicating lagged vertex statistics in the model. |
dayClass |
Any network level present time attribute vector. Here used to indicate week/weekend as 0/1. |
regMethod |
one of "glm", "glmnet", "bayesglm" |
List of 3 elements:
VertexFit: Output from regEngine.
VertexStats: Subsetted vertex stats matrix.
VertexStatsFull: Full matrix of vertex stats.
Abhirup
nvertexstats <- 9 maxLag = 3 VertexLag = rep(1, maxLag) VertexLagMatrix <- matrix(0, maxLag, nvertexstats) VertexLagMatrix[, c(4, 7)] <- 1 VertexLagMatrix[c(2,3),7] <- 0 getWeekend <- function(z){ weekends <- c("Saturday", "Sunday") if(!network::is.network(z)){ if(is.na(z)) return(NA) } else { zDay <- get.network.attribute(z, attrname = "day") out <- ifelse(zDay %in% weekends, 1, 0) return(out) } } ## for(i in 1:31) print(getWeekend(beach[[i]])) ## generate a vector of network level exogenous variable dayClass <- numeric(length(beach)) for(i in seq_along(dayClass)) { dayClass[i] <- getWeekend(beach[[i]]) } out <- paramVertexOnly(InputNetwork = beach, maxLag = 3, VertexStatsvec = rep(1, nvertexstats), VertexLag = rep(1, maxLag), VertexLagMatrix = VertexLagMatrix, dayClass = dayClass)
nvertexstats <- 9 maxLag = 3 VertexLag = rep(1, maxLag) VertexLagMatrix <- matrix(0, maxLag, nvertexstats) VertexLagMatrix[, c(4, 7)] <- 1 VertexLagMatrix[c(2,3),7] <- 0 getWeekend <- function(z){ weekends <- c("Saturday", "Sunday") if(!network::is.network(z)){ if(is.na(z)) return(NA) } else { zDay <- get.network.attribute(z, attrname = "day") out <- ifelse(zDay %in% weekends, 1, 0) return(out) } } ## for(i in 1:31) print(getWeekend(beach[[i]])) ## generate a vector of network level exogenous variable dayClass <- numeric(length(beach)) for(i in seq_along(dayClass)) { dayClass[i] <- getWeekend(beach[[i]]) } out <- paramVertexOnly(InputNetwork = beach, maxLag = 3, VertexStatsvec = rep(1, nvertexstats), VertexLag = rep(1, maxLag), VertexLagMatrix = VertexLagMatrix, dayClass = dayClass)
Parameter estimation for Vertex model only for a list of dynamic networks.
paramVertexOnlyGroup( InputNetwork, VertexStatsvec = rep(1, nvertexstats), maxLag, VertexModelGroup = NA, VertexLag = rep(1, maxLag), VertexAttLag = rep(1, maxLag), VertexLagMatrix = matrix(1, maxLag, length(VertexStatsvec)), regMethod = "bayesglm" )
paramVertexOnlyGroup( InputNetwork, VertexStatsvec = rep(1, nvertexstats), maxLag, VertexModelGroup = NA, VertexLag = rep(1, maxLag), VertexAttLag = rep(1, maxLag), VertexLagMatrix = matrix(1, maxLag, length(VertexStatsvec)), regMethod = "bayesglm" )
InputNetwork |
Input network list. |
VertexStatsvec |
Binary vector of size 9, indicating vertex model. |
maxLag |
maximum lag. |
VertexModelGroup |
Group term for vertex model. |
VertexLag |
Binary vector of size maxLag, indicating Lag terms in the model. |
VertexAttLag |
Vertex group term lag vector. |
VertexLagMatrix |
Binary matrix indicating lagged vertex statistics in the model. |
regMethod |
one of "glm", "glmnet", "bayesglm" |
List of 3 elements:
VertexFit: Output from regEngine.
VertexStats: Subsetted vertex stats matrix.
VertexStatsFull: Full matrix of vertex stats.
Abhirup
nvertexstats <- 9 InputNetwork <- beach maxLag <- 3 VertexStatsvec <- rep(1, nvertexstats) VertexLag <- rep(1, maxLag) regMethod <- "bayesglm" VertexModelGroup <- "regular" VertexLagMatrix <- matrix(0, maxLag, nvertexstats) VertexLagMatrix[, c(4, 7)] <- 1 VertexLagMatrix[c(2,3),7] <- 0 Vout1 <- paramVertexOnlyGroup(InputNetwork = beach, maxLag = maxLag, VertexStatsvec = VertexStatsvec, VertexModelGroup = VertexModelGroup, VertexLag = VertexLag, VertexLagMatrix = VertexLagMatrix) summary(Vout1$VertexFit$fit)
nvertexstats <- 9 InputNetwork <- beach maxLag <- 3 VertexStatsvec <- rep(1, nvertexstats) VertexLag <- rep(1, maxLag) regMethod <- "bayesglm" VertexModelGroup <- "regular" VertexLagMatrix <- matrix(0, maxLag, nvertexstats) VertexLagMatrix[, c(4, 7)] <- 1 VertexLagMatrix[c(2,3),7] <- 0 Vout1 <- paramVertexOnlyGroup(InputNetwork = beach, maxLag = maxLag, VertexStatsvec = VertexStatsvec, VertexModelGroup = VertexModelGroup, VertexLag = VertexLag, VertexLagMatrix = VertexLagMatrix) summary(Vout1$VertexFit$fit)
A data set of temporal inter and intra group blog citation network, with fixed number of vertex.
rdNets
rdNets
A list with 484 elements. Each element is a network of size 47 number of vertices.
Butts, C. T. and B. R. Cross (2009). Change and external events in computer-mediated citation networks, English language weblogs and the 2004 u.s. electoral cycle. The Journal of Social Structure 10 (3), 1-29.
General purpose regression engine for the methods bayesglm, glm and glmnet
regEngine( XYdata, method = "bayesglm", regIntercept = FALSE, lambda = NA, alpha = 1 )
regEngine( XYdata, method = "bayesglm", regIntercept = FALSE, lambda = NA, alpha = 1 )
XYdata |
matrix with X and Y columns. First column is named as y, other columns are X. |
method |
string among ("glm", "glmnet", "bayesglm"). |
regIntercept |
Logical. Should intercept be included in the model? |
lambda |
for method "glmnet". |
alpha |
for "glmnet" |
list with elements: coef, se, lambda, fit (Coefficients, SE, lambda, if used, fit object.)
Abhirup
Calculates the degree of each vertices.
vdegree(x)
vdegree(x)
x |
Adjacency matrix. |
Given a network as adjacency matrix, calculate degree stats for each vertex.
vector of length number of vertices.
Abhirup
vdegree(beach[[1]][, ])
vdegree(beach[[1]][, ])