# Structure dependence test

### Description

Test whether or not a network estimates can be considered structurally dependent, i.e.
a function of the network structure. By rewiring the graph and calculating
a particular statistic *t*, the test compares the observed mean of *t*
against the empirical distribution of it obtained from rewiring the network.

### Usage

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | ```
n_rewires(graph, p = c(20L, rep(0.1, nslices(graph) - 1)))
struct_test(graph, statistic, R, rewire.args = list(p = n_rewires(graph),
undirected = getOption("diffnet.undirected", FALSE), copy.first = TRUE,
algorithm = "swap"), ...)
## S3 method for class 'diffnet_struct_test'
c(..., recursive = FALSE)
## S3 method for class 'diffnet_struct_test'
print(x, ...)
## S3 method for class 'diffnet_struct_test'
hist(x,
main = "Empirical Distribution of Statistic", xlab = expression(Values ~
of ~ t), breaks = 20, annotated = TRUE, b0 = expression(atop(plain("")
%up% plain("")), t[0]), b = expression(atop(plain("") %up% plain("")),
t[]), ...)
struct_test_asymp(graph, Y, statistic_name = "distance", p = 2, ...)
``` |

### Arguments

`graph` |
A |

`p` |
Either a Numeric scalar or vector of length |

`statistic` |
A function that returns either a scalar or a vector. |

`R` |
Integer scalar. Number of repetitions. |

`rewire.args` |
List. Arguments to be passed to |

`...` |
Further arguments passed to the method (see details). |

`recursive` |
Ignored |

`x` |
A |

`main` |
Character scalar. Title of the histogram. |

`xlab` |
Character scalar. x-axis label. |

`breaks` |
Passed to |

`annotated` |
Logical scalar. When TRUE marks the observed data average and the simulated data average. |

`b0` |
Character scalar. When |

`b` |
Character scalar. When |

`Y` |
Numeric vector of length |

`statistic_name` |
Character scalar. Name of the metric to compute. Currently
this can be either |

### Details

`struct_test`

computes the test by generating the null distribution using
Monte Carlo simulations (rewiring). `struct_test_asymp`

computes the
test using an asymptotic approximation. While available, we do not recommend
using the asymptotic approximation since it has not shown good results when
compared to the MC approximation. Furthermore, the asymptotic version has only
been implemented for `graph`

as static graph.

The output from the `hist`

method is the same as `hist.default`

.

`struct_test`

is a wrapper for the function `boot`

from the
boot package. Instead of resampling data–vertices or edges–in each iteration the function
rewires the original graph using `rewire_graph`

and applies
the function defined by the user in `statistic`

. In particular, the `"swap"`

algorithm
is used in order to preserve the degree sequence of the graph, in other words,
each rewired version of the original graph has the same degree sequence.

In `struct_test`

`...`

are passed to `boot`

, otherwise are passed
to the corresponding method (`hist`

for instance).

From the `print`

method, p-value for the null of the statistic been
equal between graph and its rewired versions is computed as follows

*
p(tau) = 2*min[Pr(t<=tau), Pr(t>=tau)]
*

Where *Pr(.)* is approximated using the
Empirical Distribution Function retrieved from the simulations.

For the case of the asymptotic approximation, under the null we have

*
sqrt(n)*[mean(beta) - E[beta]]/Var[beta] ~ N(0,1)
*

The test is actually on development by Vega Yon and Valente. A copy of the working paper can be distributed upon request to g.vegayon@gmail.com.

The function `n_rewires`

proposes a vector of number of rewirings that
are performed in each iteration.

### Value

A list of class `diffnet_bot`

containing the following:

`graph` |
The graph passed to |

`p.value` |
The resulting p-value of the test (see details). |

`t0` |
The observed value of the statistic. |

`mean_t` |
The average value of the statistic applied to the simulated networks. |

`R` |
Number of simulations. |

`statistic` |
The function |

`boot` |
A |

`rewire.args` |
The list |

### Author(s)

George G. Vega Yon

### References

Vega Yon, George G. and Valente, Thomas W. (On development).

Davidson, R., & MacKinnon, J. G. (2004). Econometric Theory and Methods. New York: Oxford University Press.

### Examples

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | ```
# Creating a random graph
set.seed(881)
diffnet <- rdiffnet(100, 5, seed.graph="small-world")
# Testing structure-dependency of threshold
res <- struct_test(diffnet, function(g) mean(threshold(g), na.rm=TRUE), R=100)
res
hist(res)
# Adding a legend
legend("topright", bty="n",
legend=c(
expression(t[0]:~Baseline),
expression(t:~Rewired~average)
)
)
# Concatenating results
c(res, res)
# Running in parallel fashion
## Not run:
res <- struct_test(diffnet, function(g) mean(threshold(g), na.rm=TRUE), R=100,
ncpus=4, parallel="multicore")
res
hist(res)
## End(Not run)
``` |