Association graphs can be used to
suggest structural models of multivariate dependence. The function
div_gof() provides divergence-based goodness-of-fit tests
for several such hypotheses, including uniformity, pairwise
independence, conditional independence, and nested model
comparisons.
We use the law firm network data included in the package.
We first edit the node attributes and transform them into dyad variables.
The first rows of the dyad-level data are:
## status gender office years age practice lawschool cowork advice friend
## 1 3 3 0 8 8 1 0 0 3 2
## 2 3 3 3 5 8 3 0 0 0 0
## 3 3 3 3 5 8 2 0 0 1 0
## 4 3 3 0 8 8 1 6 0 1 2
## 5 3 3 0 8 8 0 6 0 1 1
## 6 3 3 1 7 8 1 6 0 1 1
A model of substantive interest is whether friendship and co-working are conditionally independent given advice:
\[ \texttt{friend} \perp \texttt{cowork} \mid \texttt{advice}. \]
This can be tested by specifying var_cond:
## test D chi2 df critical_value
## 1 friend independent of cowork given advice 0.003 11.959 12 21.798
## decision
## 1 cannot reject
If var_cond is omitted, div_gof() tests
ordinary pairwise independence:
\[ \texttt{friend} \perp \texttt{cowork}. \]
## test D chi2 df critical_value decision
## 1 friend independent of cowork 0.041 140.035 3 7.899 reject
The function can also test whether a single variable is uniformly
distributed across its observed categories. This is specified using
var_uniform:
## test D chi2 df critical_value decision
## 1 uniformity: friend 1.119 3853.341 3 7.899 reject
Reduced models can also be compared to the saturated empirical model.
The saturated model is represented by divergence D = 0 and
degrees of freedom df = 0.
m_full <- list(D = 0, df = 0)
m_reduced <- div_gof(
dat = dyad_var,
var1 = "friend",
var2 = "cowork"
)
div_gof(
dat = dyad_var,
model_full = m_full,
model_reduced = list(D = m_reduced$D, df = m_reduced$df)
)## test D chi2 df critical_value decision
## 1 nested model comparison 0.041 141.243 3 7.899 reject
Similarly, we can compare a conditional independence model to the saturated empirical model:
m_reduced <- div_gof(
dat = dyad_var,
var1 = "friend",
var2 = "cowork",
var_cond = "advice"
)
div_gof(
dat = dyad_var,
model_full = m_full,
model_reduced = list(D = m_reduced$D, df = m_reduced$df)
)## test D chi2 df critical_value decision
## 1 nested model comparison 0.003 10.335 12 21.798 cannot reject
Frank, O., & Shafie, T. (2016). Multivariate entropy analysis of network data. Bulletin of Sociological Methodology/Bulletin de Méthodologie Sociologique, 129(1), 45-63. link