knitr::opts_chunk$set(collapse = TRUE, comment = "#>", fig.width = 7, fig.height = 5.5, out.width = "100%", dev = "png", dpi = 72)
library(Nestimate)
trajectories ships with Nestimate: 138 student sequences × 15 weeks,
three states (Active, Average, Disengaged) plus NA for missed
weeks.
data(trajectories) dim(trajectories) head(trajectories[, 1:8]) sort(unique(as.vector(trajectories)), na.last = NA)
sequence_plot() is the single entry point for three views of this data:
| type | What it shows | Uses dendrogram? | Facets? |
|---|---|---|---|
| "heatmap" (default) | dense carpet, rows sorted by a distance/dendrogram | yes | no |
| "index" | carpet without dendrogram, row-gap optional | no | yes |
| "distribution" | stacked area / bar of state proportions over time | no | yes |
Defaults: legend = "right", frame = FALSE.
type = "heatmap" — clustered carpetsequence_plot(trajectories)
sequence_plot(trajectories, sort = "frequency", main = "sort = 'frequency'")
sequence_plot(trajectories, sort = "hamming", main = "sort = 'hamming'")
sequence_plot(trajectories, sort = "start", main = "sort = 'start' (no dendrogram)")
Available sorts: lcs (default), frequency, start, end, plus any
build_clusters() distance — hamming, osa, lv, dl, qgram,
cosine, jaccard, jw.
kCut the dendrogram into k groups and overlay thin horizontal lines at
the cluster boundaries in the ordered rows. Tune with k_color and
k_line_width.
sequence_plot(trajectories, k = 3, main = "k = 3 — white separators")
sequence_plot(trajectories, k = 5, k_color = "black", k_line_width = 1.2, main = "k = 5 — thin black")
sequence_plot(trajectories, legend = "bottom", legend_title = "Engagement", state_colors = c("#2a9d8f", "#e9c46a", "#e76f51"), main = "Custom palette + bottom legend")
tick thinningsequence_plot(trajectories, cell_border = "grey60", tick = 3, main = "Cell grid + every-3rd tick")
frame = TRUE brings back the outer boxsequence_plot(trajectories, frame = TRUE, main = "frame = TRUE")
type = "index" — gap-ready carpet with facetsNo dendrogram. Rows are sorted within each panel by sort. Supports
group (vector or auto from a net_clustering) plus ncol / nrow
facet grids.
sequence_plot(trajectories, type = "index", main = "index — single panel")
sequence_plot(trajectories, type = "index", row_gap = 0.25, main = "index with row_gap = 0.25")
net_clustering (auto 2×2 for k = 3)cl <- build_clusters(as.data.frame(trajectories), k = 3L, dissimilarity = "hamming", method = "ward.D2") sequence_plot(cl, type = "index", main = "index faceted by build_clusters(k = 3)")
sequence_plot(cl, type = "index", ncol = 3, nrow = 1, main = "index — ncol = 3, nrow = 1")
type = "distribution" — state proportions over timeStacked area or bar chart of state frequencies per time column.
sequence_plot(trajectories, type = "distribution", main = "distribution — stacked area")
sequence_plot(trajectories, type = "distribution", geom = "bar", scale = "count", main = "distribution — bars, count scale")
sequence_plot(trajectories, type = "distribution", na = TRUE, main = "na = TRUE")
sequence_plot(trajectories, type = "distribution", na = FALSE, main = "na = FALSE")
sequence_plot(cl, type = "distribution", main = "distribution by cluster (k = 3)")
# Always explore first with the default: sequence_plot(trajectories) # Zoom in on cluster structure: sequence_plot(trajectories, k = 3) sequence_plot(trajectories, sort = "hamming", k = 4) # Compare cluster compositions: cl <- build_clusters(as.data.frame(trajectories), k = 3, dissimilarity = "hamming", method = "ward.D2") sequence_plot(cl, type = "index") sequence_plot(cl, type = "distribution") # Polish for a paper: sequence_plot(trajectories, k = 3, state_colors = c("#2a9d8f", "#e9c46a", "#e76f51"), legend_title = "Engagement", legend = "bottom", cell_border = "grey70", main = "Student engagement trajectories")
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.