knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) library(memnet)
memnet package provides efficient implementations of network science tools to facilitate research into human (semantic) memory. In its current version, the package contains several methods to infer networks from verbal fluency data, various network growth models, diverse (switcher-) random walk processes, and tools to analyze and visualize networks.
The majority of
memnet is written in C++ to deliver maximum performance.
Have questions, found annoying errors, or have need/recommendation for additional functionality? Please don't hesitate to write me at
Verbal fluency is a commonly employed task in cognitive science and neuropsychological diagnosis that requires individuals to retrieve within a limited time window, e.g., 1 minute, as many elements from a natural category as they can. Typically, researchers interpret the sequences that individuals produce in this task as reflecting the underlying semantic network structure. Several methods have been proposed to infer the network structure from verbal fluency including the three methods implement here:
rw_graph. Of these three,
community_graph is the most complex. It adds edges for each pair of produced elements that occur within a window of
l steps and then retains only those that occur more often than
min_cooc and what is expected by chance giving a false positive rate of
rw_graph are both nested within
community_graph. The former retains
min_cooc as a parameter but sets
l = 1 and
crit = 1, implying that only adjacent nodes are considered and that chance expectations are not directly taken into account. The latter sets all parameters to 1 by including edges for every adjacent pair of nodes. The results are illustrated below.
library(memnet) # get data data("animal_fluency") age = as.numeric(names(animal_fluency)) # infer networks for age > 70 net_comunity = community_graph(animal_fluency[age > 70]) net_threshold = threshold_graph(animal_fluency[age > 70]) net_rw = rw_graph(animal_fluency[age > 70]) # show stats network_stats(edg_to_adj(net_comunity)) network_stats(edg_to_adj(net_threshold)) network_stats(edg_to_adj(net_rw)) # plot network_plot(edg_to_adj(net_comunity), nod_cex = 2, lab_cex = 1) network_plot(edg_to_adj(net_threshold), nod_cex = 2, lab_cex = 1) network_plot(edg_to_adj(net_rw), nod_cex = 2, lab_cex = .5, lab_lwd = 1, lab_grid_size = 70) # inspect neighborhood of cat neighborhood_plot(edg_to_adj(net_comunity), k = 3, node = 'cat', nod_cex = 2, lab_cex = 1) neighborhood_plot(edg_to_adj(net_threshold), k = 3, node = 'cat', nod_cex = 2, lab_cex = 1) neighborhood_plot(edg_to_adj(net_rw), k = 3, node = 'cat', nod_cex = 2, lab_cex = 1)
The networks were plotted using the plotting functions currently available in
neighborhood plot, which plot the entire network or the k-
neighborhood of a specific node, respectively.
A key question in research on semantic networks is their developmental trajectory and memory growth models one possible answer.
memnet implements a total of five network growth models:
grow_stgrows networks according to Steyvers and Tenenbaum (2004).
grow_hkgrows networks according to Holme and Kim (2002).
grow_bagrows networks according to Watts and Strogatz (1998).
grow_wsgrows networks according to Barabási and Albert (1999).
grow_latticegrows regular lattice networks.
grow_ba grows networks with scale-free degree distributions using a process
known as preferential attachment, which connects incoming nodes preferably with
nodes that are already highly connected.
grow_hk share this
aspect of preferential attachment, but add to triad formation process that connects
incoming nodes to neighbors of previously connected nodes, in order to account
for the high clustering of naturally occurring (memory) networks.
regular lattices (
grow_lattices) with a random graph in order to simultaneously
create high clustering and low average shortest path lengths, a property
combination known as small-world.
# plot networks of different growth mechanisms network_plot(grow_st(20, 2)) network_plot(grow_hk(20, 2, p = .3)) network_plot(grow_ba(20, 2)) network_plot(grow_ws(20, 4, p = .5)) network_plot(grow_ws(20, 4))
Access from memory is often understood as a switcher-random process operating on an underlying memory network.
memnet contains various functions to implement such switcher-random walk processes that allow simulation of behavioral data.
fluency and its fast, imprecise sibling
ffluency produce sequences of memory responses based on a censored, switcher-random walk that emits responses only for first visits to a node.
search_rw and its repeated version
search_rw_mean use switcher-random walk processes to determine the (average) distance between nodes taken account of the entire network structure rather than only the direct path.
# extract adjlist from community network adjlist = edg_to_adjlist(net_comunity) # simulate fluency sequences f = fluency(adjlist, c(10, 14, 16, 18)) restore_names(f, get_names(net_comunity)) # simulate fluency sequences s = search_rw_mean(adjlist, 1:5, 1:5, nrep = 100) restore_names(s, get_names(net_comunity))
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.