Chapter 3 ERGM (statnet
Package)
3.1 Introduction
3.1.1 Outline
Here we only focus on the R package statnet
to fit ERGM.
summary
network statisticsergm
model fitting and interpretation:simulate
network simulations based on specified model.gof
,mcmc.diagnostics
: Goodness of fit and MCMC diagnostics
3.1.2 statnet
The analytic framework is based on Exponential family Random Graph Models (ergm).
statnet provides a comprehensive framework for ergm-based network modeling, including tools for:
- model estimation
- model-based network simulation
- network visualization
- model evaluation
Powered by Markov chain Monte Carlo (MCMC) algorithm.
3.1.3 References
- Official website (handbook): http://statnet.org/
- Tutorial: https://statnet.org/trac/raw-attachment/wiki/Sunbelt2016/ergm_tutorial.html
- Explore the official websites to find more info
3.2 Preparation
#install.packages("statnet")
library(statnet)
## Installed ReposVer Built
## network "<IP_ADDRESS>" "1.15" "3.5.0"
## networkDynamic "0.9.0" "0.10.0" "3.5.0"
library(dplyr)
3.3 summary
the network statistics
3.3.1 Dataset
florentine: Florentine Family Marriage and Business Ties Data
data(package="ergm") #see all available dataset in the package
data(florentine) # load flomarriage and flobusiness data
flomarriage # see the details of the network
## Network attributes:
## vertices = 16
## directed = FALSE
## hyper = FALSE
## loops = FALSE
## multiple = FALSE
## bipartite = FALSE
## total edges= 20
## missing edges= 0
## non-missing edges= 20
##
## Vertex attribute names:
## priorates totalties vertex.names wealth
##
## No edge attributes
class(flomarriage)
## [1] "network"
summary(flomarriage)
## Network attributes:
## vertices = 16
## directed = FALSE
## hyper = FALSE
## loops = FALSE
## multiple = FALSE
## bipartite = FALSE
## total edges = 20
## missing edges = 0
## non-missing edges = 20
## density = 0.1666667
##
## Vertex attributes:
##
## priorates:
## numeric valued attribute
## attribute summary:
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.00 0.00 21.50 25.94 44.75 74.00
##
## totalties:
## numeric valued attribute
## attribute summary:
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1.00 4.75 9.00 13.88 15.00 54.00
## vertex.names:
## character valued attribute
## 16 valid vertex names
##
## wealth:
## numeric valued attribute
## attribute summary:
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 3.00 17.50 39.00 42.56 48.25 146.00
##
## No edge attributes
##
## Network edgelist matrix:
## [,1] [,2]
## [1,] 1 9
## [2,] 2 6
## [3,] 2 7
## [4,] 2 9
## [5,] 3 5
## [6,] 3 9
## [7,] 4 7
## [8,] 4 11
## [9,] 4 15
## [10,] 5 11
## [11,] 5 15
## [12,] 7 8
## [13,] 7 16
## [14,] 9 13
## [15,] 9 14
## [16,] 9 16
## [17,] 10 14
## [18,] 11 15
## [19,] 13 15
## [20,] 13 16
set.seed(1)
plot(flomarriage)
3.3.2 summary
summary(network-object~ergm-terms)
: provide the statistics of network
summary(flomarriage~edges+triangle+kstar(1:3)+degree(0:5))
## edges triangle kstar1 kstar2 kstar3 degree0 degree1 degree2
## 20 3 40 47 34 1 4 2
## degree3 degree4 degree5
## 6 2 0
3.3.3 directed networks
data(samplk)
samplk3
## Network attributes:
## vertices = 18
## directed = TRUE
## hyper = FALSE
## loops = FALSE
## multiple = FALSE
## bipartite = FALSE
## total edges= 56
## missing edges= 0
## non-missing edges= 56
##
## Vertex attribute names:
## cloisterville group vertex.names
##
## No edge attributes
set.seed(1)
plot(samplk3)
idegree
and odegree
.
summary(samplk3~idegree(1:3)+odegree(c(2,4))) #indegree and outdegree
## idegree1 idegree2 idegree3 odegree2 odegree4
## 1 7 2 0 2
3.4 ergm
fit ergm model
3.4.1 ERGM
The general form: \(P(g=G)=\frac{exp(\theta'T(G))}{c(\theta)}\)
log-odds of a single edge between node \(i\) and \(j\): \(logit(Y)=\theta'T(G)\)
Similar as regression:
glm(y~x)
– ergm(graph~terms)
where terms
are \(T(\cdot)\)
3.4.2 ergm
function.
- Input: formula [netowrk object (adjacency matrix)] ~ [ergm-terms]
#Input
?ergm
class(flomarriage)
## [1] "network"
ergm(flomarriage~edges)%>%summary()
## Starting maximum pseudolikelihood estimation (MPLE):
## Evaluating the predictor and response matrix.
## Maximizing the pseudolikelihood.
## Finished MPLE.
## Stopping at the initial estimate.
## Evaluating log-likelihood at the estimate.
##
## ==========================
## Summary of model fit
## ==========================
##
## Formula: flomarriage ~ edges
##
## Iterations: 5 out of 20
##
## Monte Carlo MLE Results:
## Estimate Std. Error MCMC % z value Pr(>|z|)
## edges -1.6094 0.2449 0 -6.571 <1e-04 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Null Deviance: 166.4 on 120 degrees of freedom
## Residual Deviance: 108.1 on 119 degrees of freedom
##
## AIC: 110.1 BIC: 112.9 (Smaller is better.)
mat=as.sociomatrix(flomarriage)
ergm(mat~edges)%>%summary()
## Starting maximum pseudolikelihood estimation (MPLE):
## Evaluating the predictor and response matrix.
## Maximizing the pseudolikelihood.
## Finished MPLE.
## Stopping at the initial estimate.
## Evaluating log-likelihood at the estimate.
##
## ==========================
## Summary of model fit
## ==========================
##
## Formula: mat ~ edges
##
## Iterations: 5 out of 20
##
## Monte Carlo MLE Results:
## Estimate Std. Error MCMC % z value Pr(>|z|)
## edges -1.6094 0.1732 0 -9.292 <1e-04 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Null Deviance: 332.7 on 240 degrees of freedom
## Residual Deviance: 216.3 on 239 degrees of freedom
##
## AIC: 218.3 BIC: 221.8 (Smaller is better.)
Output: ergm object
Method on ergm object:
- class
- names
- summary
- coef
- coefficients
- vcov
flomodel.01=ergm(flomarriage~edges)
## Starting maximum pseudolikelihood estimation (MPLE):
## Evaluating the predictor and response matrix.
## Maximizing the pseudolikelihood.
## Finished MPLE.
## Stopping at the initial estimate.
## Evaluating log-likelihood at the estimate.
summary(flomodel.01)
##
## ==========================
## Summary of model fit
## ==========================
##
## Formula: flomarriage ~ edges
##
## Iterations: 5 out of 20
##
## Monte Carlo MLE Results:
## Estimate Std. Error MCMC % z value Pr(>|z|)
## edges -1.6094 0.2449 0 -6.571 <1e-04 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Null Deviance: 166.4 on 120 degrees of freedom
## Residual Deviance: 108.1 on 119 degrees of freedom
##
## AIC: 110.1 BIC: 112.9 (Smaller is better.)
class(flomodel.01)
## [1] "ergm"
names(flomodel.01)
## [1] "coef" "iterations" "MCMCtheta" "gradient"
## [5] "hessian" "covar" "failure" "est.cov"
## [9] "glm" "glm.null" "theta1" "offset"
## [13] "drop" "estimable" "network" "reference"
## [17] "newnetwork" "formula" "constrained" "constraints"
## [21] "target.stats" "etamap" "target.esteq" "estimate"
## [25] "control" "null.lik" "mle.lik"
flomodel.01$coef
## edges
## -1.609438
coef(flomodel.01)
## edges
## -1.609438
coefficients(flomodel.01)
## Warning: You appear to be calling coef.ergm() directly. coef.ergm() is a
## method, and will not be exported in a future version of 'ergm'. Use coef()
## instead, or getS3method() if absolutely necessary.
## edges
## -1.609438
vcov(flomodel.01) #variance-covariance matrix of the main parameters
## edges
## edges 0.05999985
vcov(flomodel.01)%>%sqrt()
## edges
## edges 0.2449487
vcov(ergm(flomarriage~edges+triangle))
## Starting maximum pseudolikelihood estimation (MPLE):
## Evaluating the predictor and response matrix.
## Maximizing the pseudolikelihood.
## Finished MPLE.
## Starting Monte Carlo maximum likelihood estimation (MCMLE):
## Iteration 1 of at most 20:
## Optimizing with step length 1.
## The log-likelihood improved by 0.002922.
## Step length converged once. Increasing MCMC sample size.
## Iteration 2 of at most 20:
## Optimizing with step length 1.
## The log-likelihood improved by 0.0006953.
## Step length converged twice. Stopping.
## Finished MCMLE.
## Evaluating log-likelihood at the estimate. Using 20 bridges: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 .
## This model was fit using MCMC. To examine model diagnostics and check for degeneracy, use the mcmc.diagnostics() function.
## edges triangle
## edges 0.1242829 -0.1573260
## triangle -0.1573260 0.3539089
3.4.3 ergm-terms
See the full list of ergm-terms
help('ergm-terms')
<IP_ADDRESS> Erdos-Renyi model G(n,p) model: include edges
term
Edge included in the graph with prob \(p\): \(Pr(A=a|p)=\prod p^{a_{ij}}(1-p)^{1-a_{ij}}\)
Rewrite Erdos-Renyi model in ERGM form: \(T(G)=\#edges\), \(\theta=log \frac{p}{1-p}\)
<IP_ADDRESS> Interpretation of the parameter
Interpretation (similar when you interpret glm):
edges
: If the number of edges increase 1, the log-odds of any edge existing is -1.6094.\(p<\alpha\): parameter does not equal to 0 significantly,
Null Deviance: The null deviance in the ergm output appears to be based on an Erdos-Renyi random graph with p = 0.5.
Residual Deviance: 2 times difference of loglik (saturated model - our model) (smaller is better)
AIC, BIC: -loglik+penalty(#parameter)
flomodel.01=ergm(flomarriage~edges) #similar as regression lm(y~x)
## Starting maximum pseudolikelihood estimation (MPLE):
## Evaluating the predictor and response matrix.
## Maximizing the pseudolikelihood.
## Finished MPLE.
## Stopping at the initial estimate.
## Evaluating log-likelihood at the estimate.
summary(flomodel.01)
##
## ==========================
## Summary of model fit
## ==========================
##
## Formula: flomarriage ~ edges
##
## Iterations: 5 out of 20
##
## Monte Carlo MLE Results:
## Estimate Std. Error MCMC % z value Pr(>|z|)
## edges -1.6094 0.2449 0 -6.571 <1e-04 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Null Deviance: 166.4 on 120 degrees of freedom
## Residual Deviance: 108.1 on 119 degrees of freedom
##
## AIC: 110.1 BIC: 112.9 (Smaller is better.)
flomodel.01$coef/(1+exp(flomodel.01$coef)) # prob of an edge exists
## edges
## -1.341198
-2*(flomodel.01$mle.lik)+2 #AIC: -2loglik+2k
## 'log Lik.' 110.1347 (df=1)
-2*(flomodel.01$mle.lik)+log(16*15/2) #BIC:-2loglik+klog(n)
## 'log Lik.' 112.9222 (df=1)
pchisq(108.1 , df=119, lower.tail=FALSE) # H0: our model fits well. The smaller the better. Accept H0.
## [1] 0.7535728
<IP_ADDRESS> Include triangle
terms
Include number of triangles as a measure of clustering.
flomodel.02=ergm(flomarriage~edges+triangle)
## Starting maximum pseudolikelihood estimation (MPLE):
## Evaluating the predictor and response matrix.
## Maximizing the pseudolikelihood.
## Finished MPLE.
## Starting Monte Carlo maximum likelihood estimation (MCMLE):
## Iteration 1 of at most 20:
## Optimizing with step length 1.
## The log-likelihood improved by 0.00888.
## Step length converged once. Increasing MCMC sample size.
## Iteration 2 of at most 20:
## Optimizing with step length 1.
## The log-likelihood improved by 0.000148.
## Step length converged twice. Stopping.
## Finished MCMLE.
## Evaluating log-likelihood at the estimate. Using 20 bridges: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 .
## This model was fit using MCMC. To examine model diagnostics and check for degeneracy, use the mcmc.diagnostics() function.
summary(flomodel.02)
##
## ==========================
## Summary of model fit
## ==========================
##
## Formula: flomarriage ~ edges + triangle
##
## Iterations: 2 out of 20
##
## Monte Carlo MLE Results:
## Estimate Std. Error MCMC % z value Pr(>|z|)
## edges -1.6737 0.3578 0 -4.677 <1e-04 ***
## triangle 0.1490 0.6029 0 0.247 0.805
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Null Deviance: 166.4 on 120 degrees of freedom
## Residual Deviance: 108.1 on 118 degrees of freedom
##
## AIC: 112.1 BIC: 117.6 (Smaller is better.)
Coefficients: -1.6744\(\times\)#of edges+0.1497\(\times\)#of triangles
triangle
is not significantAIC, BIC: larger than that of ER model
<IP_ADDRESS> Include nodal covariates: nodecov
Using nodecov
to include continuous nodal covariates
flomarriage
## Network attributes:
## vertices = 16
## directed = FALSE
## hyper = FALSE
## loops = FALSE
## multiple = FALSE
## bipartite = FALSE
## total edges= 20
## missing edges= 0
## non-missing edges= 20
##
## Vertex attribute names:
## priorates totalties vertex.names wealth
##
## No edge attributes
wealth=flomarriage %v% 'wealth' # %v% get the vertex attributes
set.seed(1)
plot(flomarriage, vertex.cex=wealth/25, main="Florentine marriage by wealth", cex.main=0.8)
flomodel.03=ergm(flomarriage~edges+nodecov('wealth'))
## Starting maximum pseudolikelihood estimation (MPLE):
## Evaluating the predictor and response matrix.
## Maximizing the pseudolikelihood.
## Finished MPLE.
## Stopping at the initial estimate.
## Evaluating log-likelihood at the estimate.
summary(flomodel.03)
##
## ==========================
## Summary of model fit
## ==========================
##
## Formula: flomarriage ~ edges + nodecov("wealth")
##
## Iterations: 4 out of 20
##
## Monte Carlo MLE Results:
## Estimate Std. Error MCMC % z value Pr(>|z|)
## edges -2.594929 0.536056 0 -4.841 <1e-04 ***
## nodecov.wealth 0.010546 0.004674 0 2.256 0.0241 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Null Deviance: 166.4 on 120 degrees of freedom
## Residual Deviance: 103.1 on 118 degrees of freedom
##
## AIC: 107.1 BIC: 112.7 (Smaller is better.)
Interpretation: -2.594929 # of edges + 0.010546 wealth of node i + 0.010546 wealth of node j
<IP_ADDRESS> Include transformation of continuous nodal covariates
flomodel.04=ergm(flomarriage~edges+absdiff("wealth"))
## Starting maximum pseudolikelihood estimation (MPLE):
## Evaluating the predictor and response matrix.
## Maximizing the pseudolikelihood.
## Finished MPLE.
## Stopping at the initial estimate.
## Evaluating log-likelihood at the estimate.
summary(flomodel.04)
##
## ==========================
## Summary of model fit
## ==========================
##
## Formula: flomarriage ~ edges + absdiff("wealth")
##
## Iterations: 4 out of 20
##
## Monte Carlo MLE Results:
## Estimate Std. Error MCMC % z value Pr(>|z|)
## edges -2.302042 0.401906 0 -5.728 <1e-04 ***
## absdiff.wealth 0.015519 0.006157 0 2.521 0.0117 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Null Deviance: 166.4 on 120 degrees of freedom
## Residual Deviance: 102.0 on 118 degrees of freedom
##
## AIC: 106 BIC: 111.5 (Smaller is better.)
<IP_ADDRESS> Include transformation of continuous nodal covariates
flomodel.05=ergm(flomarriage~edges+nodecov('wealth')+nodecov('wealth',transform=function(x) x^2))
## Starting maximum pseudolikelihood estimation (MPLE):
## Evaluating the predictor and response matrix.
## Maximizing the pseudolikelihood.
## Finished MPLE.
## Stopping at the initial estimate.
## Evaluating log-likelihood at the estimate.
summary(flomodel.05)
##
## ==========================
## Summary of model fit
## ==========================
##
## Formula: flomarriage ~ edges + nodecov("wealth") + nodecov("wealth", transform = function(x) x^2)
##
## Iterations: 4 out of 20
##
## Monte Carlo MLE Results:
## Estimate Std. Error MCMC % z value Pr(>|z|)
## edges -2.904e+00 9.313e-01 0 -3.119 0.00182 **
## nodecov.wealth 1.730e-02 1.695e-02 0 1.021 0.30737
## nodecov.wealth.1 -4.459e-05 1.073e-04 0 -0.416 0.67768
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Null Deviance: 166.4 on 120 degrees of freedom
## Residual Deviance: 102.9 on 117 degrees of freedom
##
## AIC: 108.9 BIC: 117.3 (Smaller is better.)
<IP_ADDRESS> Include other possible ergm-terms
flomodel.06=ergm(flomarriage~kstar(1:2) + absdiff("wealth"))
## Starting maximum pseudolikelihood estimation (MPLE):
## Evaluating the predictor and response matrix.
## Maximizing the pseudolikelihood.
## Finished MPLE.
## Starting Monte Carlo maximum likelihood estimation (MCMLE):
## Iteration 1 of at most 20:
## Optimizing with step length 1.
## The log-likelihood improved by 0.01795.
## Step length converged once. Increasing MCMC sample size.
## Iteration 2 of at most 20:
## Optimizing with step length 1.
## The log-likelihood improved by 0.001918.
## Step length converged twice. Stopping.
## Finished MCMLE.
## Evaluating log-likelihood at the estimate. Using 20 bridges: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 .
## This model was fit using MCMC. To examine model diagnostics and check for degeneracy, use the mcmc.diagnostics() function.
summary(flomodel.06)
##
## ==========================
## Summary of model fit
## ==========================
##
## Formula: flomarriage ~ kstar(1:2) + absdiff("wealth")
##
## Iterations: 2 out of 20
##
## Monte Carlo MLE Results:
## Estimate Std. Error MCMC % z value Pr(>|z|)
## kstar1 -0.857799 0.455348 0 -1.884 0.0596 .
## kstar2 -0.162150 0.224192 0 -0.723 0.4695
## absdiff.wealth 0.019244 0.008719 0 2.207 0.0273 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Null Deviance: 166.4 on 120 degrees of freedom
## Residual Deviance: 101.3 on 117 degrees of freedom
##
## AIC: 107.3 BIC: 115.7 (Smaller is better.)
summary(ergm(flomarriage~kstar(c(1,3)) + absdiff("wealth")))
## Starting maximum pseudolikelihood estimation (MPLE):
## Evaluating the predictor and response matrix.
## Maximizing the pseudolikelihood.
## Finished MPLE.
## Starting Monte Carlo maximum likelihood estimation (MCMLE):
## Iteration 1 of at most 20:
## Optimizing with step length 1.
## The log-likelihood improved by 0.01691.
## Step length converged once. Increasing MCMC sample size.
## Iteration 2 of at most 20:
## Optimizing with step length 1.
## The log-likelihood improved by 0.001825.
## Step length converged twice. Stopping.
## Finished MCMLE.
## Evaluating log-likelihood at the estimate. Using 20 bridges: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 .
## This model was fit using MCMC. To examine model diagnostics and check for degeneracy, use the mcmc.diagnostics() function.
##
## ==========================
## Summary of model fit
## ==========================
##
## Formula: flomarriage ~ kstar(c(1, 3)) + absdiff("wealth")
##
## Iterations: 2 out of 20
##
## Monte Carlo MLE Results:
## Estimate Std. Error MCMC % z value Pr(>|z|)
## kstar1 -1.054277 0.261968 0 -4.024 <1e-04 ***
## kstar3 -0.086239 0.111865 0 -0.771 0.4408
## absdiff.wealth 0.020937 0.009522 0 2.199 0.0279 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Null Deviance: 166.4 on 120 degrees of freedom
## Residual Deviance: 101.0 on 117 degrees of freedom
##
## AIC: 107 BIC: 115.4 (Smaller is better.)
<IP_ADDRESS> Include categorical nodal covariates: nodefactor
data("faux.mesa.high")
mesa=faux.mesa.high
mesa # grade, race, sex are discrete vertex attribute
## Network attributes:
## vertices = 205
## directed = FALSE
## hyper = FALSE
## loops = FALSE
## multiple = FALSE
## bipartite = FALSE
## total edges= 203
## missing edges= 0
## non-missing edges= 203
##
## Vertex attribute names:
## Grade Race Sex
##
## No edge attributes
plot(mesa, vertex.col='Grade')
legend('bottomleft',fill=7:12,legend=paste('Grade',7:12),cex=0.75)
<IP_ADDRESS> Include discrete nodal covariates: nodefactor
fauxmodel.01=ergm(mesa ~edges + nodecov('Grade'))
## Starting maximum pseudolikelihood estimation (MPLE):
## Evaluating the predictor and response matrix.
## Maximizing the pseudolikelihood.
## Finished MPLE.
## Stopping at the initial estimate.
## Evaluating log-likelihood at the estimate.
summary(fauxmodel.01)
##
## ==========================
## Summary of model fit
## ==========================
##
## Formula: mesa ~ edges + nodecov("Grade")
##
## Iterations: 7 out of 20
##
## Monte Carlo MLE Results:
## Estimate Std. Error MCMC % z value Pr(>|z|)
## edges -3.64578 0.56757 0 -6.424 <1e-04 ***
## nodecov.Grade -0.05650 0.03274 0 -1.726 0.0844 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Null Deviance: 28987 on 20910 degrees of freedom
## Residual Deviance: 2283 on 20908 degrees of freedom
##
## AIC: 2287 BIC: 2303 (Smaller is better.)
fauxmodel.02=ergm(mesa ~edges + nodefactor('Grade'))
## Starting maximum pseudolikelihood estimation (MPLE):
## Evaluating the predictor and response matrix.
## Maximizing the pseudolikelihood.
## Finished MPLE.
## Stopping at the initial estimate.
## Evaluating log-likelihood at the estimate.
summary(fauxmodel.02)
##
## ==========================
## Summary of model fit
## ==========================
##
## Formula: mesa ~ edges + nodefactor("Grade")
##
## Iterations: 6 out of 20
##
## Monte Carlo MLE Results:
## Estimate Std. Error MCMC % z value Pr(>|z|)
## edges -4.17784 0.14696 0 -28.428 < 1e-04 ***
## nodefactor.Grade.8 -0.27924 0.14209 0 -1.965 0.04938 *
## nodefactor.Grade.9 -0.47364 0.14912 0 -3.176 0.00149 **
## nodefactor.Grade.10 -0.54653 0.18641 0 -2.932 0.00337 **
## nodefactor.Grade.11 -0.19281 0.16550 0 -1.165 0.24401
## nodefactor.Grade.12 -0.05704 0.20739 0 -0.275 0.78330
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Null Deviance: 28987 on 20910 degrees of freedom
## Residual Deviance: 2269 on 20904 degrees of freedom
##
## AIC: 2281 BIC: 2329 (Smaller is better.)
<IP_ADDRESS> Include other terms: eg. homophily
help('ergm-terms') # check all the possible ergm terms
<IP_ADDRESS> Include other terms: eg. homophily
nodematch
: Uniform homophily and differential homophily
uniform homophily(diff=FALSE), adds one network statistic to the model, which counts the number of edges (i,j) for which attrname(i)==attrname(j).
differential homophily(diff=TRUE), p(#of unique values of the attrname attribute) network statistics are added to the model.
The kth such statistic counts the number of edges (i,j) for which attrname(i) == attrname(j) == value(k), where value(k) is the kth smallest unique value of the attrname attribute.
When multiple attribute names are given, the statistic counts only ties for which all of the attributes match.
?nodematch
fauxmodel.03 <- ergm(mesa ~edges + nodematch('Grade',diff=F) )
## Starting maximum pseudolikelihood estimation (MPLE):
## Evaluating the predictor and response matrix.
## Maximizing the pseudolikelihood.
## Finished MPLE.
## Stopping at the initial estimate.
## Evaluating log-likelihood at the estimate.
summary(fauxmodel.03)
##
## ==========================
## Summary of model fit
## ==========================
##
## Formula: mesa ~ edges + nodematch("Grade", diff = F)
##
## Iterations: 8 out of 20
##
## Monte Carlo MLE Results:
## Estimate Std. Error MCMC % z value Pr(>|z|)
## edges -6.0340 0.1583 0 -38.12 <1e-04 ***
## nodematch.Grade 2.8310 0.1773 0 15.96 <1e-04 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Null Deviance: 28987 on 20910 degrees of freedom
## Residual Deviance: 1940 on 20908 degrees of freedom
##
## AIC: 1944 BIC: 1959 (Smaller is better.)
mixingmatrix(mesa, "Race") # reason for Inf
## Note: Marginal totals can be misleading
## for undirected mixing matrices.
## Black Hisp NatAm Other White
## Black 0 8 13 0 5
## Hisp 8 53 41 1 22
## NatAm 13 41 46 0 10
## Other 0 1 0 0 0
## White 5 22 10 0 4
fauxmodel.04 <- ergm(mesa ~edges + nodematch('Grade',diff=T) )
## Starting maximum pseudolikelihood estimation (MPLE):
## Evaluating the predictor and response matrix.
## Maximizing the pseudolikelihood.
## Finished MPLE.
## Stopping at the initial estimate.
## Evaluating log-likelihood at the estimate.
summary(fauxmodel.04)
##
## ==========================
## Summary of model fit
## ==========================
##
## Formula: mesa ~ edges + nodematch("Grade", diff = T)
##
## Iterations: 8 out of 20
##
## Monte Carlo MLE Results:
## Estimate Std. Error MCMC % z value Pr(>|z|)
## edges -6.0340 0.1583 0 -38.117 <1e-04 ***
## nodematch.Grade.7 2.8471 0.1973 0 14.427 <1e-04 ***
## nodematch.Grade.8 2.9145 0.2381 0 12.240 <1e-04 ***
## nodematch.Grade.9 2.4385 0.2641 0 9.234 <1e-04 ***
## nodematch.Grade.10 2.5579 0.3736 0 6.846 <1e-04 ***
## nodematch.Grade.11 3.3104 0.2962 0 11.176 <1e-04 ***
## nodematch.Grade.12 3.7315 0.4565 0 8.174 <1e-04 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Null Deviance: 28987 on 20910 degrees of freedom
## Residual Deviance: 1928 on 20903 degrees of freedom
##
## AIC: 1942 BIC: 1998 (Smaller is better.)
fauxmodel.04 <- ergm(mesa ~edges + nodematch('Grade',diff=T,keep=c(2,4)) )
## Starting maximum pseudolikelihood estimation (MPLE):
## Evaluating the predictor and response matrix.
## Maximizing the pseudolikelihood.
## Finished MPLE.
## Stopping at the initial estimate.
## Evaluating log-likelihood at the estimate.
summary(fauxmodel.04)
##
## ==========================
## Summary of model fit
## ==========================
##
## Formula: mesa ~ edges + nodematch("Grade", diff = T, keep = c(2, 4))
##
## Iterations: 7 out of 20
##
## Monte Carlo MLE Results:
## Estimate Std. Error MCMC % z value Pr(>|z|)
## edges -4.80539 0.07913 0 -60.727 < 1e-04 ***
## nodematch.Grade.8 1.68584 0.19469 0 8.659 < 1e-04 ***
## nodematch.Grade.10 1.32930 0.34758 0 3.824 0.000131 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Null Deviance: 28987 on 20910 degrees of freedom
## Residual Deviance: 2225 on 20907 degrees of freedom
##
## AIC: 2231 BIC: 2255 (Smaller is better.)
fauxmodel.05 <- ergm(mesa ~edges + nodematch('Grade',diff=T)+ nodematch('Race',diff=T) )
## Observed statistic(s) nodematch.Race.Black and nodematch.Race.Other are at their smallest attainable values. Their coefficients will be fixed at -Inf.
## Starting maximum pseudolikelihood estimation (MPLE):
## Evaluating the predictor and response matrix.
## Maximizing the pseudolikelihood.
## Finished MPLE.
## Stopping at the initial estimate.
## Evaluating log-likelihood at the estimate.
summary(fauxmodel.05)
##
## ==========================
## Summary of model fit
## ==========================
##
## Formula: mesa ~ edges + nodematch("Grade", diff = T) + nodematch("Race",
## diff = T)
##
## Iterations: 8 out of 20
##
## Monte Carlo MLE Results:
## Estimate Std. Error MCMC % z value Pr(>|z|)
## edges -6.2328 0.1742 0 -35.785 <1e-04 ***
## nodematch.Grade.7 2.8740 0.1981 0 14.509 <1e-04 ***
## nodematch.Grade.8 2.8788 0.2391 0 12.038 <1e-04 ***
## nodematch.Grade.9 2.4642 0.2647 0 9.310 <1e-04 ***
## nodematch.Grade.10 2.5692 0.3770 0 6.815 <1e-04 ***
## nodematch.Grade.11 3.2921 0.2978 0 11.057 <1e-04 ***
## nodematch.Grade.12 3.8376 0.4592 0 8.357 <1e-04 ***
## nodematch.Race.Black -Inf 0.0000 0 -Inf <1e-04 ***
## nodematch.Race.Hisp 0.0679 0.1737 0 0.391 0.6959
## nodematch.Race.NatAm 0.9817 0.1842 0 5.329 <1e-04 ***
## nodematch.Race.Other -Inf 0.0000 0 -Inf <1e-04 ***
## nodematch.Race.White 1.2685 0.5371 0 2.362 0.0182 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Null Deviance: 28987 on 20910 degrees of freedom
## Residual Deviance: 1928 on 20898 degrees of freedom
##
## AIC: 1952 BIC: 2047 (Smaller is better.)
##
## Warning: The following terms have infinite coefficient estimates:
## nodematch.Race.Black nodematch.Race.Other
mixingmatrix(mesa,"Race")
## Note: Marginal totals can be misleading
## for undirected mixing matrices.
## Black Hisp NatAm Other White
## Black 0 8 13 0 5
## Hisp 8 53 41 1 22
## NatAm 13 41 46 0 10
## Other 0 1 0 0 0
## White 5 22 10 0 4
<IP_ADDRESS> directed network
samplk3
## Network attributes:
## vertices = 18
## directed = TRUE
## hyper = FALSE
## loops = FALSE
## multiple = FALSE
## bipartite = FALSE
## total edges= 56
## missing edges= 0
## non-missing edges= 56
##
## Vertex attribute names:
## cloisterville group vertex.names
##
## No edge attributes
set.seed(1)
plot(samplk3)
<IP_ADDRESS> Include mutual
sampmodel.01 <- ergm(samplk3~edges+mutual)
## Starting maximum pseudolikelihood estimation (MPLE):
## Evaluating the predictor and response matrix.
## Maximizing the pseudolikelihood.
## Finished MPLE.
## Starting Monte Carlo maximum likelihood estimation (MCMLE):
## Iteration 1 of at most 20:
## Optimizing with step length 1.
## The log-likelihood improved by 0.0002847.
## Step length converged once. Increasing MCMC sample size.
## Iteration 2 of at most 20:
## Optimizing with step length 1.
## The log-likelihood improved by 0.001122.
## Step length converged twice. Stopping.
## Finished MCMLE.
## Evaluating log-likelihood at the estimate. Using 20 bridges: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 .
## This model was fit using MCMC. To examine model diagnostics and check for degeneracy, use the mcmc.diagnostics() function.
summary(sampmodel.01)
##
## ==========================
## Summary of model fit
## ==========================
##
## Formula: samplk3 ~ edges + mutual
##
## Iterations: 2 out of 20
##
## Monte Carlo MLE Results:
## Estimate Std. Error MCMC % z value Pr(>|z|)
## edges -2.1505 0.2152 0 -9.993 <1e-04 ***
## mutual 2.2849 0.4684 0 4.878 <1e-04 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Null Deviance: 424.2 on 306 degrees of freedom
## Residual Deviance: 268.0 on 304 degrees of freedom
##
## AIC: 272 BIC: 279.5 (Smaller is better.)
Strong mutual effect.
<IP_ADDRESS> Include sender
, receiver
, mutual
p1 model
sampmodel.02 <- ergm(samplk3~ edges + sender + receiver + mutual)
## Observed statistic(s) receiver10 are at their smallest attainable values. Their coefficients will be fixed at -Inf.
## Starting maximum pseudolikelihood estimation (MPLE):
## Evaluating the predictor and response matrix.
## Maximizing the pseudolikelihood.
## Finished MPLE.
## Starting Monte Carlo maximum likelihood estimation (MCMLE):
## Iteration 1 of at most 20:
## Optimizing with step length 1.
## The log-likelihood improved by 1.081.
## Step length converged once. Increasing MCMC sample size.
## Iteration 2 of at most 20:
## Optimizing with step length 1.
## The log-likelihood improved by 0.08992.
## Step length converged twice. Stopping.
## Finished MCMLE.
## Evaluating log-likelihood at the estimate. Using 20 bridges: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 .
## This model was fit using MCMC. To examine model diagnostics and check for degeneracy, use the mcmc.diagnostics() function.
summary(sampmodel.02)
##
## ==========================
## Summary of model fit
## ==========================
##
## Formula: samplk3 ~ edges + sender + receiver + mutual
##
## Iterations: 2 out of 20
##
## Monte Carlo MLE Results:
## Estimate Std. Error MCMC % z value Pr(>|z|)
## edges -2.315741 0.796090 0 -2.909 0.00363 **
## sender2 -0.438628 1.092996 0 -0.401 0.68819
## sender3 0.776450 1.093259 0 0.710 0.47757
## sender4 -0.008577 1.115291 0 -0.008 0.99386
## sender5 -0.452058 1.134888 0 -0.398 0.69039
## sender6 0.502989 1.095639 0 0.459 0.64617
## sender7 -0.252892 1.103350 0 -0.229 0.81871
## sender8 0.529555 1.111692 0 0.476 0.63382
## sender9 0.005037 1.122952 0 0.004 0.99642
## sender10 1.457053 1.055864 0 1.380 0.16760
## sender11 0.534553 1.100976 0 0.486 0.62730
## sender12 -0.446945 1.125660 0 -0.397 0.69133
## sender13 0.530122 1.107423 0 0.479 0.63215
## sender14 0.529945 1.117297 0 0.474 0.63528
## sender15 0.508301 1.123175 0 0.453 0.65087
## sender16 0.793735 1.081730 0 0.734 0.46309
## sender17 0.526922 1.107444 0 0.476 0.63422
## sender18 0.235750 1.103263 0 0.214 0.83079
## receiver2 0.772420 0.896048 0 0.862 0.38867
## receiver3 -0.739738 0.996962 0 -0.742 0.45809
## receiver4 0.017002 0.951789 0 0.018 0.98575
## receiver5 0.766819 0.911852 0 0.841 0.40038
## receiver6 -1.087262 1.114647 0 -0.975 0.32935
## receiver7 0.412868 0.901948 0 0.458 0.64713
## receiver8 -1.111177 1.098415 0 -1.012 0.31172
## receiver9 -0.001184 0.951954 0 -0.001 0.99901
## receiver10 -Inf 0.000000 0 -Inf < 1e-04 ***
## receiver11 -1.089252 1.082136 0 -1.007 0.31414
## receiver12 0.755936 0.907398 0 0.833 0.40480
## receiver13 -1.107780 1.098538 0 -1.008 0.31326
## receiver14 -1.092423 1.110361 0 -0.984 0.32519
## receiver15 -1.111820 1.099080 0 -1.012 0.31173
## receiver16 -2.004070 1.347086 0 -1.488 0.13683
## receiver17 -1.096807 1.109898 0 -0.988 0.32305
## receiver18 -0.480288 1.012901 0 -0.474 0.63538
## mutual 3.153694 0.636817 0 4.952 < 1e-04 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Null Deviance: 424.2 on 306 degrees of freedom
## Residual Deviance: NaN on 270 degrees of freedom
##
## AIC: NaN BIC: NaN (Smaller is better.)
##
## Warning: The following terms have infinite coefficient estimates:
## receiver10
sna::degree(samplk3,cmode = "indegree")
## [1] 4 6 3 4 6 2 5 2 4 0 2 6 2 2 2 1 2 3
<IP_ADDRESS> Other ergm-terms
Details of other ergm-terms
see https://www.jstatsoft.org/article/view/v024i04.
3.4.4 Missing edges
Make sure to set missing edges as NA
: probability of an edge in the observed sample.
missnet=flomarriage
missnet[1,2]=missnet[2,4]=missnet[5,6]=NA # originally are 0
summary(ergm(missnet~edges))
## Starting maximum pseudolikelihood estimation (MPLE):
## Evaluating the predictor and response matrix.
## Maximizing the pseudolikelihood.
## Finished MPLE.
## Stopping at the initial estimate.
## Evaluating log-likelihood at the estimate.
##
## ==========================
## Summary of model fit
## ==========================
##
## Formula: missnet ~ edges
##
## Iterations: 5 out of 20
##
## Monte Carlo MLE Results:
## Estimate Std. Error MCMC % z value Pr(>|z|)
## edges -1.5790 0.2456 0 -6.43 <1e-04 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Null Deviance: 162.2 on 117 degrees of freedom
## Residual Deviance: 107.0 on 116 degrees of freedom
##
## AIC: 109 BIC: 111.8 (Smaller is better.)
summary(ergm(flomarriage~edges))
## Starting maximum pseudolikelihood estimation (MPLE):
## Evaluating the predictor and response matrix.
## Maximizing the pseudolikelihood.
## Finished MPLE.
## Stopping at the initial estimate.
## Evaluating log-likelihood at the estimate.
##
## ==========================
## Summary of model fit
## ==========================
##
## Formula: flomarriage ~ edges
##
## Iterations: 5 out of 20
##
## Monte Carlo MLE Results:
## Estimate Std. Error MCMC % z value Pr(>|z|)
## edges -1.6094 0.2449 0 -6.571 <1e-04 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Null Deviance: 166.4 on 120 degrees of freedom
## Residual Deviance: 108.1 on 119 degrees of freedom
##
## AIC: 110.1 BIC: 112.9 (Smaller is better.)
#Set NA
1/(1+exp(-(-1.5790)))
## [1] 0.1709372
20/(choose(16,2)-3)
## [1] 0.1709402
#Set 0
1/(1+exp(-(-1.6094)))
## [1] 0.1666719
20/(choose(16,2))
## [1] 0.1666667
3.5 simulate
netowrks from an ergm model fit
The ergm model defines a probability distibution across all networks of this size(#nodes fixed).
Use simulate(ergm-model,nsim=n)
to get a list of networks
Use summary
and functions that can be used to a list
summary(flomodel.04)
##
## ==========================
## Summary of model fit
## ==========================
##
## Formula: flomarriage ~ edges + absdiff("wealth")
##
## Iterations: 4 out of 20
##
## Monte Carlo MLE Results:
## Estimate Std. Error MCMC % z value Pr(>|z|)
## edges -2.302042 0.401906 0 -5.728 <1e-04 ***
## absdiff.wealth 0.015519 0.006157 0 2.521 0.0117 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Null Deviance: 166.4 on 120 degrees of freedom
## Residual Deviance: 102.0 on 118 degrees of freedom
##
## AIC: 106 BIC: 111.5 (Smaller is better.)
flomodel.04.sim <- simulate(flomodel.04, nsim=10,seed = 1)
## Warning: You appear to be calling simulate.formula() directly.
## simulate.formula() is a method, and will not be exported in a future
## version of 'ergm'. Use simulate() instead, or getS3method() if absolutely
## necessary.
class(flomodel.04.sim)
## [1] "network.list"
summary(flomodel.04.sim)
## Number of Networks: 10
## Model: flomarriage ~ edges + absdiff("wealth")
## Reference: ~Bernoulli
## Constraints: ~.
## Parameters:
## edges absdiff.wealth
## -2.3020421 0.0155192
##
## Stored network statistics:
## edges absdiff.wealth
## [1,] 20 1070
## [2,] 22 1170
## [3,] 19 734
## [4,] 18 1123
## [5,] 18 1215
## [6,] 15 697
## [7,] 20 1165
## [8,] 31 1577
## [9,] 19 1138
## [10,] 22 1136
## Number of Networks: 10
## Model: flomarriage ~ edges + absdiff("wealth")
## Reference: ~Bernoulli
## Constraints: ~.
## Parameters:
## edges absdiff.wealth
## -2.3020421 0.0155192
length(flomodel.04.sim)
## [1] 10
flomodel.04.sim[[4]]
## Network attributes:
## vertices = 16
## directed = FALSE
## hyper = FALSE
## loops = FALSE
## multiple = FALSE
## bipartite = FALSE
## total edges= 18
## missing edges= 0
## non-missing edges= 18
##
## Vertex attribute names:
## priorates totalties vertex.names wealth
##
## No edge attributes
plot(flomodel.04.sim[[4]], label= flomodel.04.sim[[4]] %v% "vertex.names")
flomarriage
## Network attributes:
## vertices = 16
## directed = FALSE
## hyper = FALSE
## loops = FALSE
## multiple = FALSE
## bipartite = FALSE
## total edges= 20
## missing edges= 0
## non-missing edges= 20
##
## Vertex attribute names:
## priorates totalties vertex.names wealth
##
## No edge attributes
formula: Specify your own model
basis
: initial network for MCcontrol
: settings of MCMC
basenet <- network(16,density=0.1,directed=FALSE)
g.sim <- simulate(flomarriage ~ edges + kstar(2), nsim=1000, coef=c(-1.8,0.03),
basis=basenet, control=control.simulate(MCMC.burnin=1000, MCMC.interval=10))
# MCMC.interval: Number of proposals between sampled statistics.
length(g.sim)
## [1] 1000
?simulate.ergm
3.6 Check the goodness of fit
- AIC,BIC; Deviance;
- Goodness of fit:
gof
- MCMC diagnostics:
mcmc.diagnostics
3.6.1 gof
gof(model~model+degree+esp+distance)
Only four possible arguments for ergm-term:
model
: all the terms included in the modeldegree
: degree (node level)esp
: edgwise share partners (edge level)distance
: geodesic distances (dyad level)
Draw samples from the specified model, calculate the MC p-value based on the distribution generated by the samples.
flo.04.gof.model=gof(flomodel.04~model+degree+esp+distance)
flo.04.gof.model
##
## Goodness-of-fit for model statistics
##
## obs min mean max MC p-value
## edges 20 12 20.22 30 1.00
## absdiff.wealth 1146 565 1142.44 1841 0.96
##
## Goodness-of-fit for degree
##
## obs min mean max MC p-value
## 0 1 0 1.24 5 1.00
## 1 4 0 3.15 8 0.74
## 2 2 0 4.51 9 0.24
## 3 6 0 3.32 7 0.18
## 4 2 0 2.01 6 1.00
## 5 0 0 0.91 4 0.72
## 6 1 0 0.50 3 0.82
## 7 0 0 0.22 2 1.00
## 8 0 0 0.10 1 1.00
## 9 0 0 0.02 1 1.00
## 10 0 0 0.02 1 1.00
##
## Goodness-of-fit for edgewise shared partner
##
## obs min mean max MC p-value
## esp0 12 5 12.39 23 1.00
## esp1 7 0 5.99 14 0.94
## esp2 1 0 1.60 12 1.00
## esp3 0 0 0.19 4 1.00
## esp4 0 0 0.05 1 1.00
##
## Goodness-of-fit for minimum geodesic distance
##
## obs min mean max MC p-value
## 1 20 12 20.22 30 1.00
## 2 35 15 35.01 58 1.00
## 3 32 4 26.70 41 0.58
## 4 15 0 11.11 24 0.60
## 5 3 0 3.35 14 1.00
## 6 0 0 0.89 11 1.00
## 7 0 0 0.21 6 1.00
## 8 0 0 0.06 3 1.00
## 9 0 0 0.02 2 1.00
## Inf 15 0 22.43 73 1.00
names(flo.04.gof.model)
## [1] "network.size" "GOF" "pval.model" "summary.model"
## [5] "pobs.model" "psim.model" "bds.model" "obs.model"
## [9] "sim.model" "pval.dist" "summary.dist" "pobs.dist"
## [13] "psim.dist" "bds.dist" "obs.dist" "sim.dist"
## [17] "pval.deg" "summary.deg" "pobs.deg" "psim.deg"
## [21] "bds.deg" "obs.deg" "sim.deg" "pval.espart"
## [25] "summary.espart" "pobs.espart" "psim.espart" "bds.espart"
## [29] "obs.espart" "sim.espart"
#95% confidence interval
plot(flo.04.gof.model)
3.6.2 mcmc.diagnostics
Check the MCMC
#install.packages("latticeExtra")
fit <- ergm(flobusiness ~ edges+degree(1))
## Starting maximum pseudolikelihood estimation (MPLE):
## Evaluating the predictor and response matrix.
## Maximizing the pseudolikelihood.
## Finished MPLE.
## Starting Monte Carlo maximum likelihood estimation (MCMLE):
## Iteration 1 of at most 20:
## Optimizing with step length 1.
## The log-likelihood improved by 0.2425.
## Step length converged once. Increasing MCMC sample size.
## Iteration 2 of at most 20:
## Optimizing with step length 1.
## The log-likelihood improved by 0.001113.
## Step length converged twice. Stopping.
## Finished MCMLE.
## Evaluating log-likelihood at the estimate. Using 20 bridges: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 .
## This model was fit using MCMC. To examine model diagnostics and check for degeneracy, use the mcmc.diagnostics() function.
mcmc.diagnostics(fit) #centered
## Sample statistics summary:
##
## Iterations = 16384:4209664
## Thinning interval = 1024
## Number of chains = 1
## Sample size per chain = 4096
##
## 1. Empirical mean and standard deviation for each variable,
## plus standard error of the mean:
##
## Mean SD Naive SE Time-series SE
## edges -0.12183 3.766 0.05884 0.05884
## degree1 0.07349 1.634 0.02553 0.02553
##
## 2. Quantiles for each variable:
##
## 2.5% 25% 50% 75% 97.5%
## edges -7 -3 0 2 7
## degree1 -4 -1 0 1 3
##
##
## Sample statistics cross-correlations:
## edges degree1
## edges 1.0000 -0.4341
## degree1 -0.4341 1.0000
##
## Sample statistics auto-correlation:
## Chain 1
## edges degree1
## Lag 0 1.000000000 1.000000000
## Lag 1024 0.006760343 0.001466041
## Lag 2048 0.008602875 -0.006057681
## Lag 3072 -0.018218817 -0.011568388
## Lag 4096 0.028773889 -0.015764465
## Lag 5120 -0.015302900 -0.004412151
##
## Sample statistics burn-in diagnostic (Geweke):
## Chain 1
##
## Fraction in 1st window = 0.1
## Fraction in 2nd window = 0.5
##
## edges degree1
## 0.9156 -0.5825
##
## Individual P-values (lower = worse):
## edges degree1
## 0.3598522 0.5602179
## Joint P-value (lower = worse): 0.6503828 .
## Warning in formals(fun): argument is not a function
##
## MCMC diagnostics shown here are from the last round of simulation, prior to computation of final parameter estimates. Because the final estimates are refinements of those used for this simulation run, these diagnostics may understate model performance. To directly assess the performance of the final model on in-model statistics, please use the GOF command: gof(ergmFitObject, GOF=~model).
Interpretation on mcmc.diagnostics
:
Good example.
- Mixing well: MCMC sample statistics are varying randomly around the observed values at each step
- Bell-shaped centered at 0. The difference between the observed and simulated values of the sample statistics have a roughly bell-shaped distribution, centered at 0.
- Notice the sawtooth pattern is due to the discrete values. The sawtooth pattern visible on the degree term deviation plot is due to the combination of discrete values and small range in the statistics: the observed number of degree 1 nodes is 3, and only a few discrete values are produced by the simulations.
Bad example:


WITNESS LIST
Government Efficiency & Reform Committee
April 16, 2012 - 10:00 AM
Interim Charge #2 (Alternative Delivery)
On:
Barton, P.E., John (Texas Dept. of Transportation)
Bowman, Gordon (City of Austin)
Callahan, Melanie (Texas Water Development Board)
Cassidy, Brian (Alamo RMA, Central Texas RMA, Cameron County RMA, Grayson County
RMA, North East Texas RMA, Camino Real RMA)
Fowler, Perry (AGC of Texas)
Garza-Bird, Mari (Engineer, CDM Smith)
Herbst, Douglas (SW Region DBIA Water Design Build Council)
Lancaster, David (Texas Society of Architects)
Masters, Kyle (McCarthy Building Companies, Inc.)
McKay, Timothy (Dallas Area Rapid Transit)
Raabe, Steven (San Antonio River Authority)
Stauber, William (City of Austin, Austin Water Utility)
Veach, Coy (Freese & Nichols)
Registering, but not testifying:
On:
Grimes, Cyd (Travis County Texas Public Purchasing Association)
Interim Charge #3 (Interagency Billing)
On:
Apperley, Michael (Texas State Auditor's Office)
Ashley, Phillip (Texas Comptroller of Public Accounts)
Davio, Rebecca (TX DPS)
Hearn, Skylor (TX Dept of Public Safety)
Henderson, Tracy (Health & Human Services Commission - Interagency billing)
Parsley, Cathleen (State Office of Administrative Hearings)
Wilson, Dee (Texas Department of Criminal Justice)
1


Quite bare bones right now, but hey at least there's a cool resume!
(For those visually impaired or not tech-savvy, click the word resume above.)
I'll be listing below any new developments that come as hyperlinks.
Now that above is a more simplistic form of how I would have created hyperlinks to documents before, but this here is now a way with the nav tag.


NeuroAnatomy Toolbox (nat) enables analysis and visualisation of 3D biological image data, especially traced neurons. Reads and writes 3D images in NRRD and 'Amira' AmiraMesh formats and reads surfaces in 'Amira' hxsurf format. Traced neurons can be imported from and written to SWC and 'Amira' LineSet and SkeletonGraph formats. These data can then be visualised in 3D via 'rgl', manipulated including applying calculated registrations, e.g. using the 'CMTK' registration suite, and analysed. There is also a simple representation for neurons that have been subjected to 3D skeletonisation but not formally traced; this allows morphological comparison between neurons including searches and clustering (via the 'nat.nblast' extension package).
| Version: | 1.8.11 |
| Depends: | R (≥ 2.15.1), rgl (≥ 0.98.1) |
| Imports: | nabor, igraph (≥ 0.7.1), methods, filehash, digest, nat.utils (≥ 0.4.2), plyr, yaml |
| Suggests: | Rvcg (≥ 0.17), testthat, httr, XML, knitr, rmarkdown, MASS, alphashape3d |
| Published: | 2017-11-12 |
| Author: | Gregory Jefferis [aut, cre], James Manton [aut] |
| Maintainer: | Gregory Jefferis <jefferis at gmail.com> |
| BugReports: | https://github.com/jefferis/nat/issues |
| License: | GPL-3 |
| URL: | https://github.com/jefferis/nat, http://jefferislab.org |
| NeedsCompilation: | no |
| Citation: | nat citation info |
| Materials: | README NEWS |
| CRAN checks: | nat results |
| Reference manual: | nat.pdf |
| Vignettes: |
Installation Details Introduction to neurons and neuronlists |
| Package source: | nat_1.8.11.tar.gz |
| Windows binaries: | r-devel: nat_1.8.11.zip, r-release: nat_1.8.11.zip, r-oldrel: nat_1.8.11.zip |
| OS X binaries: | r-release: nat_1.8.11.tgz, r-oldrel: nat_1.8.11.tgz |
| Old sources: | nat archive |
| Reverse depends: | nat.nblast, nat.templatebrains |
| Reverse imports: | RIA |
Please use the canonical form https://CRAN.R-project.org/package=nat to link to this page.


{%include "header.html" %}
Confirmed cases Recovered Deaths
Global statistics
One of the ways we become infected, or pass on viruses to others, is through the droplets in coughs and sneezes – for instance through someone who has a virus, coughing onto their hand, then touching a door handle.
Now that COVID-19 is considered to be spreading in the community this could mean the NHS is busier than usual so it’s important to think carefully about the NHS services you use.Services like 999 or Accident and Emergency should only be used for genuine emergencies.
Since COVID-19 began to spread quickly in China, it has been a major global news story and with this level of media and public interest it’s inevitable that myths, misinformation and rumours will be shared online.
 The brain consists of the cerebrum, the brainstem and the cerebellum. It controls most of the activities of the body, processing, integrating, and coordinating the information it receives from the sense organs, and making decisions as to the instructions sent to the rest of the body.
The biggest disease that human brain can have is a tumor.Brain tumours can be either benign or cancerous. Most malignant tumours arise from another part of the body, most commonly from the lung, breast and skin.[176] Cancers of brain tissue can also occur, and originate from any tissue in and around the brain. Meningioma, cancer of the meninges around the brain, is more common than cancers of brain tissue.
Our application, takes as an input an MRI imaged brain, and predicts if the brain has a tumor or not, probabilities, accuracy, and other details about the tumor.
How the AI is working?As I said, he takes as an input the MRI imaged brain, the image is passing to the hidden layers of the neural network, and shows the result of our algorithm.
Coming Soon!


Everton, West Ham and the starlet who got away in hunt for Seamus Coleman's right-back heir
Everton identified a long-term replacement for fan-favourite Coleman but failed to sign him
by Phil KirkbrideEverton were thinking about Seamus Coleman's long-term successor three years ago - yet it remains on the agenda .
Then, as they are now, the Blues are looking to find a player who will, ultimately, take over at right-back from the club captain.
Coleman had Jonjoe Kenny breathing down his neck last season and currently finds his place in the team taken by the on-loan Djibril Sidibe.
But had the January transfer window panned out differently in 2016, then the heir to the throne could already have been found.
Everton had a bid, for an initial £3m, accepted for Leeds United's Sam Byram but after talks with the club, the young defender opted to join West Ham instead.
On Saturday, Byram is expected at Goodison as part of the Norwich City squad he joined in the summer, and here is our explainer from the time as to why Roberto Martinez missed out on the sought-after full-back.
Sam Byram had decided his future - and it was not at Everton.
After having a bid accepted by Leeds United and then holding talks with the young defender, the Blues waited for his answer.
But Roberto Martinez, even then, knew that Everton were far from in pole position to sign the 22-year-old full-back.
West Ham were rivals for Byram’s signature and were hoping to tip the balance in their favour with the promise of immediate first-team football.
It did the trick as it emerged, in January 2016, that Byram had opted to accept the Hammers’ offer despite being keen to work with Martinez.
The issue for the talented defender was that he wasn’t going to go straight into the team at Goodison. He was one for the future and would have to bide his time behind first-choice Seamus Coleman, be patient and prove himself at Premier League level.
Martinez wasn’t willing to make such promises and was always up front and forthright with a player he believed had the potential to do great things.
Byram had made 143 appearances and scored 10 goals for Leeds but he remained, much like Coleman was, rough round the edges and in need to time to adapt and grow at the highest, uncompromising level of Premier League football.
But under the guidance of a manager proven in developing young players and known for expertly pacing their careers, it was hoped Byram would see Everton as the perfect place to be.
But he wanted to play, and he wanted to play now, so he chose West Ham, where there was no Coleman shaped obstacle in his way.
Everton, who did all they could to get the deal done, respected his thinking after making the decision for footballing reasons.
Byram and the Blues, who looked a natural fit, eventually went their separate ways with no hard feelings.


Krispy Kreme releases new Thanksgiving pie-flavored donuts
by WVLT NewsNASHVILLE, Tenn (WVLT)-- Krispy Kreme released a new tasty treat just in time for Thanksgiving.
The iconic donut brand released donut-ized pies exclusively for Thanksgiving.
The flavors include Dutch Apple Pie Donut, which has an apple pie filling and is dipped in caramel icing, topped with streusel and finished with an icing lattice.
The second pie flavor is a Chocolate Kreme Pie Donut filled with chocolate cream, dipped in chocolate icing and topped with a dollop of Kreme and mini chocolate chips.
Krispy Kreme's final seasonal donut is Cherry Pie This donut has a cherry filling center, topped with pie crust crumbles and topped with lattice icing.
Krispy Kreme also has a Pumpkin Spice Cake Donut for the fall season.
The pie flavored donuts are available now through Thanksgiving Day.


March 10 2020
February 25 2020
February 10 2020
February 3 2020
January 13 2020
October 20 2019
September 24 2019
September 16 2019
September 9 2019
September 1 2019


OXY MAXIMUM ACTION SPOT TREATMENT TINTED- benzoyl peroxide cream
The Mentholatum Company
Disclaimer: Most OTC drugs are not reviewed and approved by FDA, however they may be marketed if they comply with applicable regulations and policies. FDA has not evaluated whether this product complies.
Active ingredient
Benzoyl peroxide 10%
Uses
treats and helps prevent acne
Warnings
For external use only
Do not use if you
- •
- have very sensitive skin
- •
- are sensitive to benzoyl peroxide
When using this product
- •
- skin irritation and dryness is more likely to occur if you use another topical acne medication at the same time. If irritation occurs, only use one topical acne medication at a time.
- •
- avoid unnecessary sun exposure and use a sunscreen
- •
- avoid contact with the eyes, lips, and mouth
- •
- avoid contact with hair and dyed fabrics, which may be bleached by this product
- •
- skin irritation may occur, characterized by redness, burning, itching, peeling, or possibly swelling. Irritation may be reduced by using this product less frequently or in a lower concentration.
Stop use and ask a doctor if
irritation becomes severe
If pregnant or breast-feeding
ask a health professional before use.
Keep Out of Reach of Children
If swallowed, get medical help or contact a Poison Control Center right away.
Directions
- •
- clean skin thoroughly before applying this product
- •
- cover entire affected area with a thin layer 1 to 3 times daily
- •
- because excessive drying of the skin may occur, start with 1 application daily, then gradually increase to 2 or 3 times daily if needed or as directed by a doctor
- •
- if bothersome dryness or peeling occurs, reduce application to once a day or every other day
- •
- if going outside, apply sunscreen after using this product. If irritation or sensitivity develops, stop use of both products and ask a doctor.
Other information
- •
- avoid storing at temperatures above 100°F (38°C)
Inactive ingredients
anhydrous citric acid, butylene glycol, carbomer homopolymer, diazolidinyl urea, dimethicone, dimethyl isosorbide, edetate disodium, fragrance, glycerin, iodopropynyl butylcarbamate, iron oxides, lauryl methacrylate/glycol dimethacrylate crosspolymer, PEG-8 methyl ether triethoxysilane, PEG/PPG-4/12 dimethicone, portulaca oleracea extract, propylene glycol, purified water, silica, sodium citrate, sodium hydroxide, talc, titanium dioxide, xanthan gum
Questions?
Toll free 1-877-636-2677
MON-FRI 9 AM-5 PM (EST)
Package/Label Principal Display Panel


The PCMCIA
Smart Card Driver is used for the SCM PCMCIA smart card reader.
This
driver implements Plug and Play and Power Management and is compliant with
64-bit versions of Microsoft® Windows®.
To build
the Pscr.sys driver, select either the checked or free DDK environment,
navigate to the Bulltlp3 directory, and type build. This driver
uses services provided by the smart card driver library (Smclib.sys), which are
explained in detail in the accompanying documentation.
The
PSCR.SYS driver is included in-box in the Windows Operating Systems. Therefore,
when the SCM 488 PCMCIA reader is inserted, the system will automatically
install the in-box driver. However, if you want to customize the source code of
this driver and would like to replace the in-box driver with your driver, you
can follow the instructions below.
To install your driver, you will need to provide the INF file (on a disk), WDF coinstaller from the %BASEDIR%\redist\wdf\ directory and the driver file, which will be copied to your System32\Drivers directory. The INF file makes a reference to the WDF coinstaller.
1. Launch “Device
Manager” by clicking the “Windows” button and type “devmgmt.msc” in the “Search
programs and files” box.
2. Locate the SCM 488
Smartcard reader device from the “Smart cards readers” category.
3. Right click on the
reader device and select “Update Driver Software…”.
4. Select “Browse my
computer for driver software”.
5. Select “Let me pick
from a list of device drivers on my computer”.
6. Click the “Have
Disk…” button and point it to the folder that contains your driver, INF and
coinstaller.
7. Follow the
instructions of the device installation wizard to finish the installation.
Microsoft
offers a test tool (Ifdtest.exe) that allows you to use a smart card reader
directly from the command line. Normally, the smart card resource manager is
connected to a reader. To use Ifdtest.exe, you must stop the smart card
resource manager (Scardsvr.exe) by typing net stop scardsvr
at the command line. Ifdtest.exe is also used for the smart card reader logo
test.
The driver
will not unload as long as you have Ifdtest.exe running and connected to the
driver.
You can
download Ifdtest.exe from http://www.microsoft.com/whdc/whql/default.mspx by following the
links for smart cards. You need to order special test smart cards to have your
smart card reader qualify for the "Designed for Windows" logo. You
can find ordering information at http://www.microsoft.com/whdc/whql/default.mspx.
ISO 7816
Part 3 describes smart cards and smart card protocols in detail. Refer to the
PC99 Handbook for smart card reader requirements.
Files Description
PSCR.HTM The documentation for this sample (this file).
PSCR.RC Resource definition file for driver.
SOURCES The generic file for building the code sample.
MAKEFILE Makefile required to build the driver.
PSCR.INF The INF file for installing the code sample.
PSCRCB.C Source file that contains the callback functions for the smart card library.
PSCRCB.H Function prototypes for the previous file.
PSCRCMD.C Implements the reader commands.
PSCRCMD.H Function prototypes for the previous file.
PSCRLOG.MC Error messages for this driver.
PSCRNT.C The main source file (load, unload, Plug and Play, Power Management).
PSCRNT.H Data definitions and prototypes for the previous file.
PSCRRDWR.C Implements read/write operations.
PSCRRDWR.H Data definitions and constant definitions for this reader.
PSCRVERS.H Driver-specific version information.
Power Management
Power Management is
described in detail in the DDK documentation. There is, however, one situation
that is specific to smart card readers: how to deal with smart card insertions
and removals while the system is in standby or hibernation mode.
Your reader will
not see any card insertion or removal events in these modes, because the bus
might not even have power. You must save the card state before your reader goes
into standby or hibernation mode. After the system returns from these modes,
you need to determine what the state of the card is. You must complete card
tracking calls whenever there was a card in the reader before standby or
hibernation mode or whenever there is a card in the reader after these
modes. This step is necessary because the user could have changed the card
while the system was in a low-power mode.
|
|
© 2004 Microsoft
Corporation


Your Contacts{{resources.name}}Name: {{resources.name}}Email: {{resources.email}}Phone Number: {{resources.phone}}
There was a problem loading the data. Possibly the server is down or perhaps there are network
issues.
Please wait a bit and try again or start the server.


Version 0.9, Mon 31 Mar 2014
See also the Bender Data Model and the Bender Processing Model for reference.
The reference Bender HTML runtime is a Javascript application running
in a Web browser. Its role is to load a component description from an XML
file and render that component and its watch graph in the host document.
The runtime offers additional features, such as custom components,
property bindings, &c. which are implemented on top of the functional
core of Bender described in the processing
model specification, as well as a Javascript API for the
match
and value
properties of
Adapter
s, and manipulating the data
model programmatically through Javascript.
All Bender elements are in the Bender namespace:
http://bender.igel.co.jp/
A Bender component is described by an XML file with a
component
as its root element.
component
elementThe component
element describes a component. It can
occur as the root of an XML document (it is then the top-level
component) or as the descendant of another component.
Also in a lib
element or some other group
container?
The component
element has the following attributes:
name
(optional): the name of the component. It must
be unique within the scope of the component (i.e., within the
component, its parent, and its children) and cannot be the empty
string or the string this
.href
(optional): this attribute points to the
prototype component. The value of href
must be a URI that
identifies a Bender component.on-init
(optional): Javascript source code for a
function getting called when the component is initialized (before it
is rendered or its properties are set.) this
is set to
the component.on-render
(optional): Javascript source code for a
function getting called after every rendering of the component.
this
is set to the component.as
value
of the original declaration.The component
element has the following children, which
can appear in any order:
property
(zero or more): the properties of the
component.component
(zero or more): child
components that are not rendered (not implemented yet.)view
(optional): the view of the component.watch
(zero or more): the watches of the
component.link
(zero or more): links to external resources
(scripts, stylesheets, components.)script
(zero or more): inline scripts.style
(zero or more): inline style.title
(optional): the component title (metadata.)property
elementThe property
element describes a property of the parent
component, and how it is initialized or bound to other properties. It
can occur only as the child of a component
element.
The property
element has the following attributes:
name
: the name of the property. It must be a
non-empty string and must be unique within the component.value
(optional): the bound or initial value of the
property. See how value
is parsed below.as
(optional): describe how the value
string is interepreted. Its value can be one of: boolean
,
dynamic
, dynamic-string
,
number
, or string
. The default value is
dynamic
.match
(optional):select
(optional):delay
(optional):The property
element can only have text content, which
in absence of a value
attribute is the bound or initial
value of the property.
view
elementThe view
element is the container for the view of its
parent component. A component
with no view
child has a default view.
The view
element has the following attributes:
render-name
(optional): render the
name of the parent component as an id or a class. Possible values
are id
, class
, node
. The
default value is none
.stack
(optional): stacking order
of the views, one of top
, bottom
, or
replace
. The default is top
.The view
element has the following children, which
can appear in any order:
content
: placeholder for the view of components that
inherit from this view. There can be at most one content
element for a given view
. This will
be relaxed with a select
attribute.view
(zero or more): views of
descendant components of the parent component of the
view.component
(zero or more): child components.attribute
(zero or more): attributes of the
enclosing element.text
(zero or more): text content.content
elementThe content
element describes a placeholder for the view
of a component inheriting from the parent component, and default content
when that component is rendered.
The view
element has the following children, which
can appear in any order:
view
(zero or more): views of
descendant components of the parent component of the
view.component
(zero or more): child components.attribute
(zero or more): attributes of the
enclosing element.text
(zero or more): text content.Foreign view elements are any element not in the Bender namespace. These elements are rendered are rendered as is, and as such should be in namespaces that the host application supports, such as HTML or SVG.
Foreign view elements have the following attributes:
name
(optional): the name of the element. It must
be unique within the scope of the component (i.e., within the
component, its parent, and its children) and cannot be the empty
string or the string this
.Foreign view elements have the following children, which can appear in any order:
content
: placeholder for the view of components that
inherit from this view. There can be at most one content
element for a given view
. This will
be relaxed with a select
attribute.view
(zero or more): views of
descendant components of the parent component of the
view.component
(zero or more): child components.attribute
(zero or more): attributes of the
enclosing element.text
(zero or more): text content.attribute
elementThe
text
elementThe text
element
watch
elementThe watch
element describes a watch in a component.
It can occur in a component
element. It has no attribute.
It has the following children in any order:
get
(zero or more)set
(zero or more)get
elementset
elementlink
elementThe link
element associates an external resource with
the parent. It can occur as a child of a component
element.
It is modeled after the HTML link
element.
The attributes of the link
element are:
rel
: describe the relationship between the component
and the external resource. Three values are supported:
script
, stylesheet
, and
component
.href
: the URI of the external resource.name
: if the value of the rel
attribute
is component
, then this attribute must be present;
otherwise, it must not be present.The link
element has no content.
Script and stylesheet links allow inclusion of external scripts and stylesheets. A component link brings a static reference to the linked component in the current scope.
script
elementThe script
element is a convenience element to include
Javascript code with its parent component. It is modeled after the HTML
script
element. It can occur as a child of a
component
element. It has no attribute
(although it could have a type
attribute for runtimes or
renderers that support other languages than Javascript, and an
async
attribute that would allow asynchronous exection when
possible. Or any other attribute that is then passed back to the
renderer, such as src
) and text content. It gets
rendered as a script
element in the head
of
the owner document of the target of the first render of the component;
as such, it blocks rendering until completely executed. The
script
children are rendered in document order.
style
elementThe style
element is a convenience element to include
style information with its parent component. It is modeled after the
HTML style
element. It can occur as a child of a
component
element. It has no attribute and only text
content. It gets rendered as a style
element in the
head
of the owner document of the target of the first
render of the component.
lib
elementThe lib
element (the name is not
final) would be used to group several top-level components into a
single file so that related components could be grouped together.
Reference to a component inside a lib could be made by a fragment
reference.
Values for the select
attribute.
Javascript is used in Bender documents in the
match
and value
attributes, and the text
content of value
elements. The enriched syntax introduces
three new symbols, `
(for component properties),
@
(for runtime component IDs), and #
(for
static component IDs.)
Functions are then textually transformed, compiled
to Javascript, then called with this
as the runtime
target, and $in
as the input value. We probably also want
to have another parameter for the previous value of a property. May
rename $in
as well.
The property
element can have
value
and match
attributes like
get
and set
. This can be used to set an
initial literal value, a computed value, or as shorthand syntax for a
watch. Dynamic and text bindings; as
attribute.
Bindings may appear in text elements and attributes as well, as a shorthand for watches. Text bindings only.
Register custom elements by mapping namespace URIs
to actual URIs (which may be local or remote but must point to actual
component or library files.) Then use the namespace URI and a local
name in a Bender document to construct the actual URI of the required
component (the local name part can map to a file or a fragment
locator), then the element is replaced with a component
elements with the constructed href and the same attributes and the
content of the custom element as the view
. Custom
elements cannot add any non-view content. Custom elements do not
introduce a new scope, if we go this way.
<component xmlns="http://bender.igel.co.jp"> <view xmlns:html="http://www.w3.org/1999/xhtml" xmlns:lib="http://..."> <lib:button label="OK" name="ok-button"/> <lib:button name="cancel-button"> <html:span class="cancel"/>Cancel</html:span> </lib:button> </view> </component>
Is the same as:
<component xmlns="http://bender.igel.co.jp"> <view xmlns:html="http://www.w3.org/1999/xhtml"> <component href="http://.../button.xml" label="OK" name="ok-button"/> <component href="http://.../button.xml" name="cancel-button"> <view> <html:span class="cancel"/>Cancel</html:span> </view> </component> </view> </component>


You clicked on: {{ selected }}
Clicking these will navigate:
Position x: before
Position y: above
overlapTrigger: false
Position x: before, overlapTrigger: false
Position y: above, overlapTrigger: false


interface Doctrine\DBAL\Driver\Result
Driver-level result statement execution result.
Construction
Hierarchy
Constants
Properties
Methods
-
fetchNumeric () : array<int,mixed>
false Returns the next row of the result as a numeric array or FALSE if there are no more rows.
Parameters Return array<int,mixed> false Throws Doctrine\DBAL\Driver\ Exception -
fetchAssociative () : array<string,mixed>
false Returns the next row of the result as an associative array or FALSE if there are no more rows.
Parameters Return array<string,mixed> false Throws Doctrine\DBAL\Driver\ Exception -
fetchOne () : mixed
false Returns the first value of the next row of the result or FALSE if there are no more rows.
Parameters Return mixed false Throws Doctrine\DBAL\Driver\ Exception -
fetchAllNumeric () : array
array<int,array<int,mixed>> Returns an array containing all of the result rows represented as numeric arrays.
Parameters Return array array<int,array<int,mixed>> Throws Doctrine\DBAL\Driver\ Exception -
fetchAllAssociative () : array
array<int,array<string,mixed>> Returns an array containing all of the result rows represented as associative arrays.
Parameters Return array array<int,array<string,mixed>> Throws Doctrine\DBAL\Driver\ Exception -
fetchFirstColumn () : array
array<int,mixed> Returns an array containing the values of the first column of the result.
Parameters Return array array<int,mixed> Throws Doctrine\DBAL\Driver\ Exception -
rowCount () : int
Returns the number of rows affected by the DELETE, INSERT, or UPDATE statement that produced the result.
If the statement executed a SELECT query or a similar platform-specific SQL (e.g. DESCRIBE, SHOW, etc.),
some database drivers may return the number of rows returned by that query. However, this behaviour
is not guaranteed for all drivers and should not be relied on in portable applications.Parameters Return int The number of rows.
-
columnCount () : int
Returns the number of columns in the result
Parameters Return int The number of columns in the result. If the columns cannot be counted,
this method must return 0.
-
free () : void
Discards the non-fetched portion of the result, enabling the originating statement to be executed again.
Parameters Return void


The code execution profiling report provides metrics based on data collected from a SIL or PIL execution. Execution times are calculated from data recorded by instrumentation probes added to the SIL or PIL test harness or inside the code generated for each component. See Code Execution Profiling for more information.
Profiling data was stored on the target and uploaded to Simulink only at the end of the SIL/PIL execution. The hierarchy of calls to code sections cannot be identified, so the call structure in this report is flattened.
|
|
|
CPU Utilization: Percentage of CPU time assigned to a task. Computed by dividing task execution time by sample time. Calls: Number of calls to the code section. When 'CodeProfilingSaveOptions' is set to 'MetricsOnly', the value might only be the number of calls that occur before an overflow of the total time counter. Execution Time: Time between start and end of code section. |


public class PntCustView_using
extends View
| Constructor and Description |
|---|
PntCustView_using(Context context,
AttributeSet attr)
Constructor
|
| Modifier and Type | Method and Description |
|---|---|
int |
getLastPaintColor() |
void |
onClickEraseDraw(boolean eraserPencil)
onClick Method to switch onscreen onscreen pencil tool with eraser tool
switches drawable pencil_icon and eraser_icon in custom view area
and the draw_tool image button
sets erasing boolean to true or false
calls invalidate() to activate onDraw() method to update screen
|
void |
onClickRedo()
Method to add drawpaths that are stored in inactive drawpath due to undo
list back to the list of active drawpaths displayed on the canvas
calls invalidate() to redraw view acts as a stack
|
void |
onClickUndo()
Method to remove drawpaths that are stored in active drawpath lists and moves
drawpath to inactive list of drawpaths - acts as stack
calls invalidate() to redraw view
|
protected void |
onDraw(Canvas canvas)
Method redraws canvas each time invalidate() is called - creates
the illusion of animation and movement on screen
|
protected void |
onSizeChanged(int w,
int h,
int oldW,
int oldH)
Methods creates canvas based on screen size an
takes in width and height
|
boolean |
onTouchEvent(MotionEvent event)
onTouchListener for moving drawtool and creating drawpaths
When user holds color button and drags drawTool, drawPaths are created
and stored in and ArrayList with paint objects to display on canvas
responds to down touch, move gesture, and touch up
invalidates as changes occurs - which calls onDraw() to redraw
view with changes
|
void |
setBitmap(Bitmap bitmap,
boolean loaded)
sets canvas with bitmap - toggles boolean values to allow coloring
|
void |
setCanvas()
Method sets canvas with image data passed in by
UserPaint_using class
calls invalidate to draw results on screen
|
void |
setLastPaintColor()
setters and getters for paint color
|
void |
setPaint(int color)
when color is changed, when color button is selected
store current drawpath and paint and create new ones so that
existing path does not change color
|
void |
skew(float x,
float y)
Method skews drawpath and drawpaint points on screen to fit 'point' of drawTool
object
takes in touch coordinates and sets movement coordinates at a shifted value
|
public PntCustView_using(Context context, AttributeSet attr)
context
- attr
- public void setPaint(int color)
color
- public void setLastPaintColor()
public int getLastPaintColor()
public void setCanvas()
protected void onDraw(Canvas canvas)
canvas
- protected void onSizeChanged(int w, int h, int oldW, int oldH)
w
- h
- oldW
- oldH
- public void skew(float x, float y)
x
- y
- public boolean onTouchEvent(MotionEvent event)
public void onClickUndo()
public void onClickEraseDraw(boolean eraserPencil)
eraserPencil
- public void onClickRedo()
public void setBitmap(Bitmap bitmap, boolean loaded)
bitmap
- loaded
-


Qatar Coach looking forward to a perfect start against Iraq in Arabian Gulf Cup
Doha: Qatar coach Felix Sanchez said Monday that facing the Iraqi team in the opening match of the Arabian Gulf Cup on Tuesday will be difficult for the two teams. Sanchez added that he looks forward to a perfect start so the team can take the first step in the journey towards winning the title.
Sanchez said at the press conference held today that the preparations started immediately after the match against Afghanistan in the Asian qualifiers, but before the team was given two days rest to catch their breath and give them more rest.
He added that the Qatari team aspires to achieve a perfect start, especially that the opening game always motivates players and adds confidence to win one match after another.
Sanchez has kept faith in the core squad that won the Asian Cup, with few youngsters joining the experienced stars.
He pointed out that the Asian Cup is different from the Arabian Gulf Cup, which is a new challenge and competition different from others, and all participating teams aspire to achieve positive results and win their matches.
Qatar is hosting the Arabian Gulf Cup for the fourth time and will be gunning for their fourth title, and a grand double to add to their historic AFC Asian Cup title they won in the UAE in February.
Qatars previous triumphs came in 1992, 2004 and 2014, and are undoubtedly the strongest contenders among eight Arab Gulf Cup Football Federation teams to lift the title on December 6. (QNA)
Read also
Read More
Arabian Gulf Cup: Parking, security at stadiums in place
Asked whether parking was available to everyone at the stadium, he said parking area depends on the ticket type and there are seven parking areas.
Read More
UAE football team arrives in Doha for 24th Arabian Gulf Cup
The UAE national football team arrived in the Qatari capital to participate in the 24th edition of the Arabian Gulf Cup, which will be held from November 26 to December 8.
Read More
Selfie sticks, prams among items prohibited during 24th Arabian Gulf Cup
The Organizing Committee of the 24th Arabian Gulf Cup issued a number of instructions for the spectators that will be held in Abdulla bin Khalifa Stadium - Duhail and Khalifa Stadium starting tomorrow.
Read More
Culture Ministry announces activities associated with Arabian Gulf Cup
The Ministry of Culture and Sports has announced the accompanying activities of the 24th Arabian Gulf Cup, which will be held on the sidelines of the tournament in three places: the Qatar National Theatre, Khalifa International Stadium, and Aspire.
Read More
Kuwait contigent arrives in Doha for 24th Arabian Gulf Cup
Kuwait are placed in Group B alongside Oman, Saudi Arabia, and Bahrain while hosts Qatar will play against Iraq, UAE and Yemen in Group B.
Read More
Vodafone Qatar confirmed as official Telecommunications Sponsor of Arabian Gulf Cup
As the 24th Arabian Gulf Cup preparations accelerate, so will fans’ expectation for super-fast connectivity.
Read More
Arabian Gulf Cup: Oman aim to retain title
The Red Warriors are looking to win their second successive and third overall title at the 24th edition of the tournament which will take place from November 26 to December 8 in Doha.
Read More
QFA launches initiative to support team at Arabian Gulf Cup
Al Thawadi said that preparations for Qatar 2022 are coming along very well and we have two stadiums already operational and by the end of the first half of next year, we will have three more stadiums ready and operational. By the end of 2021, all eight of our stadiums will have been inaugurated, tested and be tournament-ready.
Read More
Teams gear up for 24th Arabian Gulf Cup
Iraqi national team players take part in a training session in Doha as they prepare for the 24th Arabian Gulf Cup


Map is a method that takes an enumerable object and block, executes the block for each element in the object, then outputs the result for each object. Examples of enumerable objects that map can be called on are Arrays and Ranges, which are linear lists of objects that map can iterate through. Map can be destructive by calling "map!", meaning it destroys the original object that is run through the block, and replaces it with the object that is outputted when run through the block. Or, if we want to keep the original object intact, we can set the output of the method equal to a new enumerable object.
A simple example: array = [1, 2, 3] new_array = [] array.map { |n| n * n; new_array << n } p new_array This will return #=> [1, 4, 9] to the console.


+++ title = "Uxmal ruins" slug = "uxmal-ruins" date = 2007-02-28T16:00:00+10:00 tags = ["road-trips", "maya", "archaeology"] locations = ["mexico/merida"] draft = false summary = """
For us 5 Uxmal road trippers, the Uxmal ruins themselves were definitely the highlight of the day. Uxmal is probably one of the least visited of Mexico's must-see ruins, and yet (I think) it's also the best. The light-jungle surroundings, the serene environment, and the very impressive pyramids and temples, all combine to make Uxmal a great Maya site to visit.
""" +++For us 5 Uxmal road trippers, the Uxmal ruins themselves were definitely the highlight of the day. Uxmal is probably one of the least visited of Mexico's must-see ruins, and yet (I think) it's also the best. The light-jungle surroundings, the serene environment, and the very impressive pyramids and temples, all combine to make Uxmal a great Maya site to visit.
{{< galleryphoto "2007-02-28-16-00-00--the-pyramid-and-jungle-of-uxmal.jpg" >}}We went to Uxmal in the afternoon. This is typically the busiest time of the day for ruins; and although there were quite a lot of tourists around, I didn't feel that the place was being overrun. Uxmal is also quite big, and some areas had a bit less tourists than others.
Unfortunately, it's not permitted to climb the great pyramid at Uxmal. However, there's a temple at the top of a steep hill, and there are ancient steps carved into the hillside, which anyone can climb.
{{< galleryphoto "2007-02-28-16-01-00--one-of-the-temples-at-uxmal.jpg" >}}In accordance with Matthias's policy of being "super-cheap", we hung around a few tour groups as they were going around, and eavesdropped on what the guides had to say.
We also came back to Uxmal in the evening, after the corrida in Santa Elena, and saw the light show in the main Maya plaza area. This is a very impressive show, with all the ruins lit up in eerie colours, and with dramatic music and booming Spanish narration. Although the show was, at the end of the day, a tacky technique, they did it so well that it didn't really seem that way at all.
{{< galleryphoto "2007-02-28-16-02-00--night-lights-at-uxmal.jpg" >}}


Register
User Name
First Name
Last Name
Email
Folder
Password
Repeat
Migrate from old dev2?
Create Account


Welcome to the world of Pokemon. It is not safe to go alone, please take this questionare and find out your true pokemon starter!
What type do you want your Pokemon Starter to be?:
How do you want your Pokemon Starter to walk?:
Do you want your Pokemon to look:


Bukhara
Bukhara is one of the oldest cities in Central Asia and one of the greatest shopping centers on the Silk Road. Also, Bukhara is a museum city where you can see more than 140 architectural monuments of the Middle Ages. This historic city in inscribed on the UNESCO World Heritage List. Attactions such as the small Samanid mausoleum, which recently celebrated its millenium, Kosh Madras, the Kalon Minaret and the Poi Kalyan architectural complex, were built about 2300 years ago and attract many tourists.
Samanid Mausoleum
Picture by David Stanley [CC BY 2.0], via Wikimedia Commons
The Samanid Mausoleum (aka Ismail Samani Mausoleum) was built during the life of this ruler, one of the most prominent representatives of the dynasty, who ruled Bukhara from 892 to 907. Initially, the mausoleum was intended for the tomb of Ismail's father, Ahmad, but later became a tomb for all members of the royal family. This is oldest Muslim landmark in Bukhara and a real masterpiece of early Islamic architecture.
Minaret Kalyan
Another architectural symbol of Bukhara is the Kalyan Minaret. It was built at the beginning of the XII century and is a tall tower of burnt bricks 47 meters high. Its foundation goes down 10 meters. The main purpose of minaret is to call the Bukhara people to prayer. But its impressive height began to serve many other purposes. For example, it was a lighthouse in the sandy desert sea for lost caravans. A beautiful panorama of the area opened from here, which made it possible to calculate the enemy long before his approaches to the city.


Author: Carl Nagle
Since: FEB 18, 2013
Update: FEB 18, 2013
Copyright (2013) SAS Institute: http://www.sas.com
General Public License (GPL): http://www.opensource.org/licenses/gpl-license.php
Refer to the associated SAFS MultiLogResults API Reference for additional detail.
The purpose of this command-line capable Java API is to allow the post-processing of one or more SAFS XML logs into a single XML Summary.
The idea is that some complex integration and/or systems-level tests are sometimes split into multiple separate SAFS test runs--each producing a separate SAFS test log.
Yet, it is the summation of these separete test runs that makes up the whole of the complex test.
The MultiLogResults tool allows us to convert/transform all these separate logs into one summary log for simpler analysis and reporting.
There are many entry points into the overall process, but the most basic usage is as follows:
It should be noted that processing only attempts to summarize or count the last STATUS_REPORT in each SAFS log. That is because each log may have many status reports, but the last one should contain the summary of all tests for that log. If no status report exists in a particular log, then no status information for that log will be summarized nor added to the running total for all logs.
This new command-line tool is available via the SAFS JAR files built on or after Feb 18, 2013.
There is a 3rd party dependency for a non-default Java JAXP XSLT Processor. Any JAXP XSLT Processor conforming to XSLT 2.0 or higher should work. Unfortunately, the default XALAN JAXP XSLT Processor shipped with some versions of Java only supports XSLT 1.0.
The tools has only been tested with the common SAXON 9.4 implementation using the following JAR files:
These required SAXON JAR files might already be available to you via the SAFS lib directory.
Otherwise, the user can download SaxonHE9-4...J.ZIP
from the SAXON download website to get these JARs.
(Note the "J" in the ZIP filename to signify the "Java JAR" version of SAXON assets.)
The relevant JAR files (SAFS + XSLT Processor) must be in the System CLASSPATH or otherwise be valid in the runtime CLASSPATH at the time of execution.
The default XSL file used for XSLT processing is XSLMultiLogsListSummary.xsl. This file should be provided by SAFS and will normally exist in the /SAFS/samples/Log Transforms directory. By default, this file is expected to be placed in the same directory where the SAFS XML Logs to be processed are located. If you DO NOT place the XSL file in that Logs directory, then you must use the -xsl command-line option to point to the location of the XSL file.
Assuming all setup is correct and no special or advanced usage is intended, the simplest example invocation would be something like:
java org.safs.tools.logs.MultiLogResults -dir "C:\\SAFS\\Project\\Datapool\\Logs"
Of course, you would point to your actual target Logs directory. You can also prepare a Windows BAT file that already contains the desired Java invocation so that you only have to run the BAT file with no additional arguments.
Successful execution should result with the creation of 2 new files in the specified Logs directory:
For more advanced capabilities and processing options consult the MultiLogResults JavaDoc for the full list of available command-line options.


This Tool Exists To Help You Adjust Your Tags To The New Chrome Tag Compliance Parameters.
When updating tags for GTM, it's necessary to hardcode a referrer if you are not using one-off tags.
GTM does not allow you to hardcode the referrer parameter into the tag script.
Input your tag code below, and then add any referrer parameters you require in the following input fields. If multiple parameters, add with the '+' button.
When updating tags for placement in the HTML, it is only necessary to add the correct referrer parameter to the tag script.
Place the tag code in the input field below, and then click submit.


This is legal if the static member is in the same class, but may be confusing.
Example:
class Foo {
static void foo() {}
static int x;
void bar() {
foo();
System.out.println(x);
}
static void baz() { foo(); }
}
After the quick-fix is applied:
class Foo {
static void foo() {}
static int x;
void bar() {
Foo.foo();
System.out.println(Foo.x);
}
static void baz() { Foo.foo(); }
}
Use the inspection settings to toggle the reporting for the following items:
static fields access
void bar() { System.out.println(x); }
calls to static methods
void bar() { foo(); }
static void baz() { foo(); }
You can also configure the inspection to only report static member usage from a non-static context.
In the above example, static void baz() { foo(); }
will not be reported.


Some examples of the personal data that we collect within the Open Targets services, how this data is used, who this data may be disclosed to, and when we may contact you are described below.
The Personal Data we may collect from you could include:
- Name,
- Email address,
- Address,
- Phone numbers,
- Job function and employer details/institutional affiliation,
- Connection Information (e.g.IP address, web cookies, host information, approximate host location, pages visited).
We may use your Personal Data:
- To provide you with information about our services, activities or our online content by offering to subscribe you to newsletters, publications, event announcements, etc.,
- To personalise the way our web content is presented to you,
- To use IP addresses to identify your location for statistical reporting purposes and, if necessary, to block disruptive use,
- To analyse and improve our websites by examining statistical usage information,
- To generate statistical reports as to how our website and services are being used,
- For managing events that you have registered for.
We may disclose your Personal Data:
- To your employer, university, law enforcement or other government bodies, in exceptional circumstances where your activity is disruptive or may be illegal under your local laws.
We may use your Personal Data to contact you:
- When you have asked us to as part of a specific service request (e.g., help desk request, voicemail message),
- To invite your voluntary participation in surveys about our services,
- To handle registration for and attendance at one of our events that you have registered for,
- In relation to any service, activity or online content you have signed up for in order to ensure that we can deliver the services to you (e.g. to notify you of service down time),
- When you have opted in to receive further correspondence for scientific marketing and outreach purposes (e.g. newsletters).


Section I: Data Description
The first section of your project should include a detailed description of your data. You can use the following template for the structure of this section. Think of this part as a log of your steps and of your thinking. This is also a sort of a checklist of issues you need to keep in mind when you start a project. Feel free to add more to it — at the initial stage it is crucial to flag as many potential issues as you can possibly think of.
- What is the source of your data?
- In what form (or format) is it available? Provide an example (a screenshot can be used, if that is more convenient).
- How did you obtain it? (describe the procedure)
- Did/does data require any kind of preprocessing before it becomes usable for research purposes? Specifically, do you need to convert it into a different format? If yes, how are you going to do that?
- If yes, what kind of preprocessing have you done or planning to do?
- What kind of metadata is available for this dataset? Are you planning to modify it in any way? Are any modifications desirable?
- What is the structure of your dataset? If your data is tabular, you can use R functions to generate summaries. However, you should also take a closer look at your data and provide some preliminary evaluations of values in each column—pay attention to their length, formatting, inconsistencies, etc. If you data is not tabular, describe it in appropriate manner. If a unit of your dataset is a text, provide some details on their structure (especially, if structure is relevant for your research questions). Do these texts similar in some way or completely different? Why should they be studied together? Etc.
- Does you data require normalization and/or cleaning? (In most cases, it does) What kind of normalization is necessary? For example, tabular data may require changing of formatting of values; OCR output may require some postcorrection. Most likely, your data is not tidy: is it formatted to contain one observation per row? Is it formatted to contain single values per cell? What kind of procedures are necessary to normalize/tidy your data?
Think of these steps as you plan, especially when it comes to cleaning/normalizing your data. Most likely you will not be able to fix everything in your data—which is totally fine within your final project—but it is important to keep close track of this process and remain honest with yourself.
Homework:
- Finish Section I, and submit in the usual manner.
Submitting homework:
- Homework assignment must be submitted by the beginning of the next class;
- Email your homework to the instructor as attachments.
- In the subject of your email, please, add the following:
070184-LXX-HW-YourLastName-YourMatriculationNumber
, whereLXX
is the numnber of the lesson for which you submit homework;YourLastName
is your last name; andYourMatriculationNumber
is your matriculation number.
- In the subject of your email, please, add the following:


11.23. Release 0.206
General Changes
- Fix execution failure for certain queries containing a join followed by an aggregation
when
dictionary_aggregation
is enabled.
- Fix planning failure when a query contains a
GROUP BY
, but the cardinality of the
grouping columns is one. For example: SELECT c1, sum(c2) FROM t WHERE c1 = 'foo' GROUP BY c1
- Fix high memory pressure on the coordinator during the execution of queries
using bucketed execution.
- Add
ST_Union()
, ST_Geometries()
, ST_PointN()
, ST_InteriorRings()
,
and ST_InteriorRingN()
geospatial functions.
- Add
split_to_multimap()
function.
- Expand the
approx_distinct()
function to support the following types:
INTEGER
, SMALLINT
, TINYINT
, DECIMAL
, REAL
, DATE
,
TIMESTAMP
, TIMESTAMP WITH TIME ZONE
, TIME
, TIME WITH TIME ZONE
, IPADDRESS
.
- Add a resource group ID column to the
system.runtime.queries
table.
- Add support for executing
ORDER BY
without LIMIT
in a distributed manner.
This can be disabled with the distributed-sort
configuration property
or the distributed_sort
session property.
- Add implicit coercion from
VARCHAR(n)
to CHAR(n)
, and remove implicit coercion the other way around.
As a result, comparing a CHAR
with a VARCHAR
will now follow
trailing space insensitive CHAR
comparison semantics.
- Improve query cost estimation by only including non-null rows when computing average row size.
- Improve query cost estimation to better account for overhead when estimating data size.
- Add new semantics that conform to the SQL standard for temporal types.
It affects the
TIMESTAMP
(aka TIMESTAMP WITHOUT TIME ZONE
) type,
TIME
(aka TIME WITHOUT TIME ZONE
) type, and TIME WITH TIME ZONE
type.
The legacy behavior remains default.
At this time, it is not recommended to enable the new semantics.
For any connector that supports temporal types, code changes are required before the connector
can work correctly with the new semantics. No connectors have been updated yet.
In addition, the new semantics are not yet stable as more breaking changes are planned,
particularly around the TIME WITH TIME ZONE
type.
JDBC Driver Changes
- Add
applicationNamePrefix
parameter, which is combined with
the ApplicationName
property to construct the client source name.
Hive Connector Changes
- Reduce ORC reader memory usage by reducing unnecessarily large internal buffers.
- Support reading from tables with
skip.footer.line.count
and skip.header.line.count
when using HDFS authentication with Kerberos.
- Add support for case-insensitive column lookup for Parquet readers.


- {{_("Awarded to:")}}
-
{{ award.user }}
{% if request.user == award.user %}
{{ _("(That's you!)") }}
{% endif %}
- {{_("Awarded by:")}}
- {{ award.creator }}
- {{_("Awarded at:")}}
- {{ award.created }}
{% if award.description %}
- {{_("Explanation:")}}
- {{ award.description }}
{% endif %}


17 September 2001
Disease Outbreak Reported
An outbreak of meningococcal disease in May this year was reported to WHO from the Balombo district in Benguela Province (see earlier report). Neisseria meningitidis serogroup A was laboratory confirmed for this outbreak and a mass vaccination campaign was launched in the affected district. To date, the Benguela Province has reported 94 cases and 14 deaths. Recently other provinces in Angola (Cunene: 44 cases, 7 deaths; Cuando Cubango: 25 cases, 0 deaths) have reported meningococcal disease to WHO. However, the data from the newly affected provinces does not allow the determination of whether any districts in these provinces have exceeded the epidemic threshold.
Angola has reported a total of 193 cases and 24 deaths of meningococcal disease so far this year.


{% extends '_base.html' %} {% set title = 'On the Subject of Wires' %} {% block head %} {% endblock %} {% block content %}
| Conditions | Wire to cut |
|---|---|
| 3 wires | |
|
✄ 2nd |
|
✄ last |
|
✄ last {{ 'blue'|colorize }} |
|
✄ last |
| 4 wires | |
|
✄ last {{ 'red'|colorize }} |
|
✄ 1st |
|
✄ 1st |
|
✄ last |
|
✄ 2nd |
| 5 wires | |
|
✄ 4th |
|
✄ 1st |
|
✄ 2nd |
|
✄ 1st |
| 6 wires | |
|
✄ 3rd |
|
✄ 4th |
|
✄ last |
|
✄ 4th |