Skip to content

Instantly share code, notes, and snippets.

@briatte
Created June 26, 2019 10:07
Show Gist options
  • Save briatte/924c2b53c913d0f8d3aa1cfdb5052efb to your computer and use it in GitHub Desktop.
Save briatte/924c2b53c913d0f8d3aa1cfdb5052efb to your computer and use it in GitHub Desktop.
##
## download all `ergm` sources from v3.0-1 to today
##
library(rvest)
d <- "ergm-sources"
dir.create(d, showWarnings = FALSE)
# current source
u <- "https://cran.r-project.org/web/packages/ergm/index.html"
h <- read_html(u) %>%
html_nodes(xpath = "//a[contains(@href, '.tar.gz')]") %>%
html_attr("href") %>%
basename
u <- "https://cran.r-project.org/src/contrib/"
f <- file.path(d, h)
if (!file.exists(f)) {
download.file(paste0(u, h), f, mode = "wb", quiet = TRUE)
}
# past sources
u <- "https://cran.r-project.org/src/contrib/Archive/ergm/"
h <- read_html(u) %>%
html_nodes(xpath = "//a[contains(@href, '.tar.gz')]") %>%
html_attr("href")
# subset to v3.x (March 2012 and later)
h <- h[ grepl("_3\\.", h) ]
for (i in h) {
f <- file.path(d, i)
if (!file.exists(f)) {
download.file(paste0(u, i), f, mode = "wb", quiet = TRUE)
}
}
##
## check `broom` `tidy` and `glance` against `ergm` model and summary objects
##
require(dplyr)
require(remotes)
require(tibble)
# load `broom`
devtools::load_all('/Users/fr/Desktop/broom')
d <- "ergm-sources"
f <- list.files(d, pattern = "\\.tar\\.gz$")
# sort newest --> oldest
v <- as.integer(gsub("\\D", "", f))
f <- rev(f[ order(v) ])
t <- list() # store results from `tidy`
g <- list() # store results from `glance`
sink("output-2019-06-26.txt")
for (i in f) {
cat("\n[INSTALLING]", i, "\n")
remotes::install_local(file.path(d, i), force = TRUE, quiet = TRUE)
library(ergm)
v <- as.character(packageVersion("ergm"))
cat("[LOADED] ergm", v, "\n")
data(florentine)
gest <- suppressMessages(ergm(flomarriage ~ edges + absdiff("wealth")))
# model$coef exists
stopifnot("coef" %in% names(gest))
gest_s <- summary(gest)
# summary(model)$coefs exists
stopifnot("coefs" %in% names(gest_s))
gest_coefs <- gest_s$coefs
# summary(model)$coefs checks out
stopifnot(class(gest_coefs) == "data.frame" && nrow(gest_coefs) == 2)
cat(
"`summary(gest)$coefs` contains:",
paste(names(gest_coefs), collapse = ", "),
"\n"
)
# model checks out
if (!dplyr::near(stats::AIC(gest), 105.9514, tol = 10^-4)) {
warning("ergm ", v, " returned a different AIC")
}
t <- tidy(gest) %>%
tibble::add_column(ergm_version = v, .before = 1) %>%
bind_rows(t, .)
# no need to test line below, all computations internal to `broom`
# tidy(gest, exponentiate = TRUE, conf.int = TRUE, conf.level = 0.99)
g <- glance(gest, deviance = TRUE, mcmc = TRUE) %>%
tibble::add_column(ergm_version = v, .before = 1) %>%
bind_rows(g, .)
}
sink()
# all `tidy` results identical at 0.0001
select(t, -ergm_version) %>%
mutate_if(is.numeric, round, 4) %>%
dplyr::group_split(term) %>%
lapply(distinct) %>%
lapply(nrow) # should be 1 and 1
# all `glance` results identical at 0.0001
mutate_if(g, is.numeric, round, 4) %>%
select(-ergm_version) %>%
distinct %>%
nrow # should be 1
[INSTALLING] ergm_3.10.4.tar.gz
[LOADED] ergm 3.10.4
`summary(gest)$coefs` contains: Estimate, Std. Error, z value, Pr(>|z|)
[INSTALLING] ergm_3.10.1.tar.gz
[LOADED] ergm 3.10.1
`summary(gest)$coefs` contains: Estimate, Std. Error, z value, Pr(>|z|)
[INSTALLING] ergm_3.9.4.tar.gz
[LOADED] ergm 3.9.4
`summary(gest)$coefs` contains: Estimate, Std. Error, z value, Pr(>|z|)
[INSTALLING] ergm_3.8.0.tar.gz
[LOADED] ergm 3.8.0
`summary(gest)$coefs` contains: Estimate, Std. Error, z value, Pr(>|z|)
[INSTALLING] ergm_3.7.1.tar.gz
[LOADED] ergm 3.7.1
`summary(gest)$coefs` contains: Estimate, Std. Error, z value, Pr(>|z|)
[INSTALLING] ergm_3.7.0.tar.gz
[LOADED] ergm 3.7.0
`summary(gest)$coefs` contains: Estimate, Std. Error, z value, Pr(>|z|)
[INSTALLING] ergm_3.6.1.tar.gz
[LOADED] ergm 3.6.1
`summary(gest)$coefs` contains: Estimate, Std. Error, z value, Pr(>|z|)
[INSTALLING] ergm_3.6.0.tar.gz
[LOADED] ergm 3.6.0
`summary(gest)$coefs` contains: Estimate, Std. Error, z value, Pr(>|z|)
[INSTALLING] ergm_3.5.1.tar.gz
[LOADED] ergm 3.5.1
`summary(gest)$coefs` contains: Estimate, Std. Error, z value, Pr(>|z|)
[INSTALLING] ergm_3.4.0.tar.gz
[LOADED] ergm 3.4.0
`summary(gest)$coefs` contains: Estimate, Std. Error, z value, Pr(>|z|)
[INSTALLING] ergm_3.2.4.tar.gz
[LOADED] ergm 3.2.4
`summary(gest)$coefs` contains: Estimate, Std. Error, z value, Pr(>|z|)
[INSTALLING] ergm_3.2.3.tar.gz
[LOADED] ergm 3.2.3
`summary(gest)$coefs` contains: Estimate, Std. Error, z value, Pr(>|z|)
[INSTALLING] ergm_3.1.3.tar.gz
[LOADED] ergm 3.1.3
`summary(gest)$coefs` contains: Estimate, Std. Error, z value, Pr(>|z|)
[INSTALLING] ergm_3.1.2.tar.gz
[LOADED] ergm 3.1.2
`summary(gest)$coefs` contains: Estimate, Std. Error, z value, Pr(>|z|)
[INSTALLING] ergm_3.1.1.tar.gz
[LOADED] ergm 3.1.1
`summary(gest)$coefs` contains: Estimate, Std. Error, z value, Pr(>|z|)
[INSTALLING] ergm_3.1-0.tar.gz
[LOADED] ergm 3.1.0
`summary(gest)$coefs` contains: Estimate, Std. Error, z value, Pr(>|z|)
[INSTALLING] ergm_3.0-3.tar.gz
[LOADED] ergm 3.0.3
`summary(gest)$coefs` contains: Estimate, Std. Error, z value, Pr(>|z|)
[INSTALLING] ergm_3.0-1.tar.gz
[LOADED] ergm 3.0.1
`summary(gest)$coefs` contains: Estimate, Std. Error, z value, Pr(>|z|)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment