R: Specifying nodal attributes and their levels

node-attr {ergm} | R Documentation

## Specifying nodal attributes and their levels

### Description

This document describes the ways to specify nodal attributes or functions of nodal attributes and which levels for categorical factors to include. For the helper functions to facilitate this, see `node-attr-api`.

### Details

Term nodal attribute arguments, typically called `attr`, `attrs`, `by`, or `on` are interpreted as follows:

a character string

  Extract the vertex attribute with this name.

a character vector of length > 1

  Extract the vertex attributes and paste them together, separated by dots if the term expects categorical attributes and (typically) combine into a covariate matrix if it expects quantitative attributes.

a function

  The function is called on the LHS network, expected to return a vector or matrix of appropriate dimension. (Shorter vectors and matrix columns will be recycled as needed.)

a formula

  The expression on the RHS of the formula is evaluated in an environment of the vertex attributes of the network, expected to return a vector or matrix of appropriate dimension. (Shorter vectors and matrix columns will be recycled as needed.) Within this expression, the network itself accessible as either `.` or `.nw`. For example, `nodecov(~abs(Grade-mean(Grade))/network.size(.))` would return the absolute difference of each actor's "Grade" attribute from its network-wide mean, divided by the network size.

For categorical attributes, to select which levels are of interest and their ordering, use the argument `levels`. Selection of nodes (from the appropriate vector of nodal indices) is likewise handled as the selection of levels, using the argument `nodes`. These arguments are interpreted as follows:

an expression wrapped in `I()`

  Use the given list of levels as is.

a numeric or logical vector

  Used for indexing of a list of all possible levels (typically, unique values of the attribute) in default older (typically lexicographic), i.e., `sort(unique(attr))[levels]`. In particular, `levels=TRUE` will retain all levels. Negative values exclude. To specify numeric or logical levels literally, wrap in `I()`.

`NULL`

  Retain all possible levels; usually equivalent to passing `TRUE`.

a character vector

  Use as is.

a function

  The function is called on the list of unique values of the attribute, the values of the attribute themselves, and the network itself, depending on its arity. Its return value is interpreted as above.

a formula

  The expression on the RHS of the formula is evaluated in an environment in which the network itself is accessible as `.nw`, the list of unique values of the attribute as `.` or as `.levels`, and the attribute vector itself as `.attr`. Its return value is interpreted as above.

Note that `levels` or `nodes` often has a default that is sensible for the term in question.

### Examples

    data(faux.mesa.high)

    # Activity by grade with a baseline grade excluded:
    summary(faux.mesa.high~nodefactor(~Grade))
    # Retain all levels:
    summary(faux.mesa.high~nodefactor(~Grade, levels=TRUE)) # or levels=NULL

    # Mixing between lower and upper grades:
    summary(faux.mesa.high~mm(~Grade>=10))
    # Mixing between grades 7 and 8 only:
    summary(faux.mesa.high~mm("Grade", levels=I(c(7,8))))
    # or
    summary(faux.mesa.high~mm("Grade", levels=1:2))
    # or using levels2 (see ? mm) to filter the combinations of levels,
    summary(faux.mesa.high~mm("Grade",
            levels2=~sapply(.levels,
                            function(l)
                              l[[1]]%in%c(7,8) && l[[2]]%in%c(7,8))))

[Package ergm version 3.10.4 Index]