knitr::opts_chunk$set( collapse = TRUE, comment = "#>", fig.width = 7, fig.height = 4.5 )
This article demonstrates the restricted contiguous-motif workflow in
gp3sequences. The workflow accepts ordinary long-format data frames and does
not require Gazepoint software, hardware, exports, or gp3tools.
The functions describe recurring state windows and their locations. They do not infer attention, cognition, emotion, intention, psychological state, or causal mechanisms.
The example contains three sequences and one preserved grouping variable.
library(gp3sequences) sequence_data <- data.frame( sequence = c( rep("s1", 5L), rep("s2", 4L), rep("s3", 3L) ), order = c(1:5, 1:4, 1:3), state = c( "A", "B", "A", "B", "C", "A", "B", "C", "B", "B", "A", "B" ), group = c( rep("g1", 5L), rep("g1", 4L), rep("g2", 3L) ), stringsAsFactors = FALSE ) sequence_data
extract_sequence_ngrams() enumerates contiguous state windows only. Minimum
and maximum motif lengths and the overlapping-occurrence policy are explicit.
extracted <- extract_sequence_ngrams( sequence_data, sequence_id_col = "sequence", order_col = "order", state_col = "state", metadata_cols = "group", min_length = 2L, max_length = 3L, overlap = "allow" ) head(extracted$occurrences)
Sequence prevalence uses every validated sequence as its denominator. Filtering is deterministic and retains explicit thresholds and tie handling.
motif_summary <- summarise_sequence_motifs(extracted) motif_filter <- filter_sequence_motifs( motif_summary, min_occurrences = 2L, min_sequences = 2L, min_prevalence = 0.50, motif_lengths = c(2L, 3L), top_n = 10L, rank_by = "sequence_prevalence", ties = "include" ) motif_table <- format_sequence_motifs( motif_filter, prevalence = "percent", digits = 1L ) motif_table$table
Positions may represent the start, centre, or end of each motif occurrence. Absolute positions use one-based state indices. Relative positions range from 0 to 1 across each sequence.
position_summary <- summarise_sequence_motif_positions( extracted, position = "centre", scale = "relative", by = "group" ) position_summary$summary
format_sequence_motif_positions() changes display precision and units without
modifying the underlying analytical object.
position_table <- format_sequence_motif_positions( position_summary, digits = 1L, position_units = "percent", include_rank = TRUE ) position_table$table
plot_sequence_motifs() uses base R graphics. The returned data frame contains
the exact motifs and values used in the plot.
plotted_motifs <- plot_sequence_motifs( motif_summary, metric = "sequence_prevalence", top_n = 8L, motif_lengths = c(2L, 3L), ties = "include", horizontal = TRUE ) plotted_motifs[ c("plot_rank", "motif", "motif_length", "plot_value") ]
The strip display shows individual occurrence positions with deterministic stacking. No random jitter is used.
strip_data <- plot_sequence_motif_positions( extracted, position = "centre", scale = "relative", top_n = 5L, display = "strip" ) head( strip_data[ c( "sequence_id", "motif", "position_value", "plot_rank" ) ] )
The distribution display provides a compact base-R summary for the same structural positions.
plot_sequence_motif_positions( extracted, position = "centre", scale = "relative", top_n = 5L, display = "distribution" )
The reported counts, prevalence values, and positions describe the supplied ordered states under the declared preparation, motif-length, overlap, filtering, and position rules. Any substantive interpretation belongs to the research design and cannot be inferred automatically from motif structure alone.
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.