# tests for summary stats functions
library(tsna)
require(sna)
require(testthat)
# ---- tests for tSnaStats ----
data(nd_test_nets)
data(moodyContactSim)
test_that('tSnaStats output as expected',{
# vertex level measure
output<-tSnaStats(moodyContactSim,'degree')
expect_true(is.ts(output))
expect_equal(ncol(output),network.size(moodyContactSim))
expect_equal(nrow(output),756)
# graph level measure
output<-tSnaStats(moodyContactSim,'gden')
expect_equal(ncol(output),1)
expect_equal(nrow(output),756)
# change sampling interval
output<-tSnaStats(moodyContactSim,'gden',time.interval=100)
expect_equal(ncol(output),1)
expect_equal(nrow(output),8)
# check start and end values
expect_equal(attributes(tSnaStats(moodyContactSim,'gden',start=600,time.interval=50))$tsp,c(600.00, 750.00, 0.02))
expect_equal(attributes(tSnaStats(moodyContactSim,'gden',end=600,time.interval=200))$tsp,c(40.000, 440.000, 0.005))
expect_error(tSnaStats(nd_test_nets[[1]],'degree'),regexp = "must be a object of class 'networkDynamic'")
# error for non supported function
expect_error(tSnaStats(moodyContactSim,'foo'),regexp = 'not one of the sna package descriptive statistics currently supported')
# test passing in function args (this would give error if FUN not passed in)
tSnaStats(moodyContactSim,'centralization',FUN='degree',time.interval = 100)
# test aggregate dur
dyads<-network.dyadcount(moodyContactSim)
expect_equal(as.numeric(tSnaStats(moodyContactSim,'gden',start=0,end=400,time.interval = 100,aggregate.dur=100)),c(1/dyads,0,2/dyads,0,2/dyads))
# this one should miss all the edges
expect_equal(as.numeric(tSnaStats(moodyContactSim,'gden',start=0,end=400,time.interval = 100,aggregate.dur=0)), c(0,0,0,0,0))
})
supported_sna_funs <-c('components',
'triad.census',
'connectedness',
'dyad.census',
'efficiency',
'gden',
'hierarchy',
'lubness',
'mutuality',
# 'centralization', leaving off centralization because it requirs additional args
'closeness',
'betweenness',
#'bonpow', hidden because has singular value problems
'degree',
'evcent',
'flowbet',
'graphcent',
'infocent',
'loadcent',
'prestige')
# chec
# test_that('all sna stats used by tSnaStats can be called',{
# # CRAN reports that one of the functions is erroring with OpenBLAS
# # I haven't been able to reproduce to isolate the function, so disabling these tests on cran
# # SKIP_ON_CRAN NOT WORKING, NEED TO UNCOMMENT AND RUN MANUALLY
# skip_on_cran()
# for (funName in supported_sna_funs){
# message('testing ',funName)
# tSnaStats(moodyContactSim,funName,start=600,time.interval=50)
# }
#
# })
# code below used to find which edge cases cause errors
# run tests against all the networkDynamic edge case networks
# reports, but does not trigger errors and warnings (because some of them will give errors)
# for(n in 1:length(nd_test_nets)){
# for (funName in supported_sna_funs){
# cat('testing net',n,' (',names(nd_test_nets)[n],') with term ',funName, '\n')
# # run in tryCacth block so can report all the errors at once
# tryCatch(
# {
# tSnaStats(nd_test_nets[[n]],funName)
# },
# warning = function(w){
# message("\t",w)
# },
# error = function(e){
# message("\t",e)
# }
# ) # end try catch
# cat("\n")
# }
# }
# ---- tests for tErgmStats ----
require(ergm)
test_that('tSnaStats output as expected',{
output<-tErgmStats(moodyContactSim,'~edges')
expect_true(is.ts(output))
expect_equal(ncol(output),1)
expect_equal(nrow(output),756)
output<-tErgmStats(moodyContactSim,'~degree(0:3)')
expect_equal(ncol(output),4)
expect_equal(nrow(output),756)
# change sampling interval
output<-tErgmStats(moodyContactSim,'~edges',time.interval=100)
expect_equal(ncol(output),1)
expect_equal(nrow(output),8)
# check start and end values
expect_equal(attributes(tErgmStats(moodyContactSim,'~edges',start=600,time.interval=50))$tsp,c(600.00, 750.00, 0.02))
expect_equal(attributes(tErgmStats(moodyContactSim,'~edges',end=600,time.interval=200))$tsp,c(40.000, 440.000, 0.005))
expect_error(tErgmStats(nd_test_nets[[1]],'edges'),regexp = "must be a object of class 'networkDynamic'")
expect_error(tErgmStats(as.networkDynamic(network.initialize(3,hyper=TRUE)),'edges'),regexp = "not appropriate for hypergraphic networks")
expect_error(tErgmStats(as.networkDynamic(network.initialize(3,multi=TRUE)),'edges'),regexp = "not appropriate for multiplex networks")
# check that it will add '~' in front if ommited
tErgmStats(moodyContactSim,'edges',time.interval=200)
# error for non supported function
expect_error(tErgmStats(moodyContactSim,'foo'),regexp = 'ERGM term .+ not found.')
# test aggregate dur
expect_equal(as.numeric(tErgmStats(moodyContactSim,'edges',time.interval = 100)),c(1,0,2,0,0,0,2,1))
expect_equal(as.numeric(tErgmStats(moodyContactSim,'edges',time.interval = 100,aggregate.dur=100)),c(1,2,2,0,2,4,8,4))
})
# code below used to find which edge cases cause errors
# run tests against all the networkDynamic edge case networks
# reports, but does not trigger errors and warnings (because some of them will give errors)
# does not use a comprehensive set of ergm terms
# testErgmTerms<-c('edges','nsp(1)','balance')
#
# for(n in 1:length(nd_test_nets)){
# for (funName in testErgmTerms){
# cat('testing net',n,' (',names(nd_test_nets)[n],') with term ',funName, '\n')
# # run in tryCacth block so can report all the errors at once
# tryCatch(
# {
# tErgmStats(nd_test_nets[[n]],funName)
# },
# warning = function(w){
# message("\t",w)
# },
# error = function(e){
# message("\t",e)
# }
# ) # end try catch
# cat("\n")
# }
# }
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.