ggInterval extends ggplot2 for
interval-valued data. The package supports visualizations such as
scatter plots, histograms, index plots, radar plots, line plots, PCA
displays, and correlation heatmaps, while keeping the layered grammar
familiar to ggplot2 users.
This vignette focuses on source-portable examples that can be rebuilt
directly from the package. It uses built-in data, the bundled
data.csv file for the aggregation example, and optional
sections for packages such as HistDAWass and
MAINT.Data.
data(facedata)
data(Environment)
facedata
#> # A tibble: 27 × 6
#> AD BC AH DH
#> * <symblc_n> <symblc_n> <symblc_n> <symblc_n>
#> 1 [155.00 : 157.00] [58.00 : 61.01] [100.45 : 103.28] [105.00 : 107.30]
#> 2 [154.00 : 160.01] [57.00 : 64.00] [101.98 : 105.55] [104.35 : 107.30]
#> 3 [154.01 : 161.00] [57.00 : 63.00] [99.36 : 105.65] [101.04 : 109.04]
#> 4 [168.86 : 172.84] [58.55 : 63.39] [102.83 : 106.53] [122.38 : 124.52]
#> 5 [169.85 : 175.03] [60.21 : 64.38] [102.94 : 108.71] [120.24 : 124.52]
#> 6 [168.76 : 175.15] [61.40 : 63.51] [104.35 : 107.45] [120.93 : 125.18]
#> 7 [155.26 : 160.45] [53.15 : 60.21] [95.88 : 98.49] [91.68 : 94.37]
#> 8 [156.26 : 161.31] [51.09 : 60.07] [95.77 : 99.36] [91.21 : 96.83]
#> 9 [154.47 : 160.31] [55.08 : 59.03] [93.54 : 98.98] [90.43 : 96.43]
#> 10 [164.00 : 168.00] [55.01 : 60.03] [120.28 : 123.04] [117.52 : 121.02]
#> # ℹ 17 more rows
#> # ℹ 2 more variables: EH <symblc_n>, GH <symblc_n>
Environment
#> # A tibble: 14 × 17
#> URBANICITY INCOMELEVEL
#> <symblc_m> <symblc_m>
#> 1 6:0.14 4:0.43 5:0.08 1:0.21... 25:0.91 50:0.02 75:0.07 90:...
#> 2 6:0.08 4:0.49 5:0.08 1:0.15... 25:0.56 50:0.15 75:0.29 90:...
#> 3 6:0.13 4:0.42 5:0.10 1:0.24... 25:0.16 50:0.32 75:0.18 90:...
#> 4 6:0.18 4:0.50 5:0.11 1:0.15... 25:0.12 50:0.18 75:0.07 90:...
#> 5 6:0.12 4:0.38 5:0.08 1:0.30... 25:0.11 50:0.27 75:0.27 90:...
#> 6 6:0.10 4:0.58 5:0.10 1:0.10... 25:0.04 50:0.12 75:0.06 90:...
#> 7 6:0.10 4:0.39 5:0.10 1:0.31... 25:0.14 50:0.20 75:0.61 90:...
#> 8 6:0.19 4:0.47 5:0.09 1:0.14... 25:0.99 50:0.01 75:0.00 90:...
#> 9 6:0.22 4:0.42 5:0.13 1:0.15... 25:0.73 50:0.04 75:0.21 90:...
#> 10 6:0.18 4:0.45 5:0.11 1:0.17... 25:0.22 50:0.41 75:0.30 90:...
#> 11 6:0.18 4:0.43 5:0.09 1:0.17... 25:0.12 50:0.30 75:0.28 90:...
#> 12 6:0.11 4:0.44 5:0.10 1:0.23... 25:0.11 50:0.39 75:0.37 90:...
#> 13 6:0.23 4:0.41 5:0.13 1:0.11... 25:0.05 50:0.30 75:0.10 90:...
#> 14 6:0.14 4:0.41 5:0.08 1:0.26... 25:0.21 50:0.07 75:0.69 90:...
#> # ℹ 15 more variables: EDUCATION <symblc_m>, REGIONDEVELOPME <symblc_m>,
#> # CONTROL <symblc_n>, SATISFY <symblc_n>, INDIVIDUAL <symblc_n>,
#> # WELFARE <symblc_n>, HUMAN <symblc_n>, POLITICS <symblc_n>,
#> # BURDEN <symblc_n>, NOISE <symblc_n>, NATURE <symblc_n>, SEASETC <symblc_n>,
#> # MULTI <symblc_n>, WATERWASTE <symblc_n>, VEHICLE <symblc_n>
Subjects <- substr(rownames(facedata), 1, 3)
Subjects
#> [1] "FRA" "FRA" "FRA" "HUS" "HUS" "HUS" "INC" "INC" "INC" "ISA" "ISA" "ISA"
#> [13] "JPL" "JPL" "JPL" "KHA" "KHA" "KHA" "LOT" "LOT" "LOT" "PHI" "PHI" "PHI"
#> [25] "ROM" "ROM" "ROM"ggInterval_scatterplot(
facedata,
aes(x = AD, y = BC, fill = Subjects),
showLabels = FALSE,
col = "black"
) +
scale_fill_brewer(palette = "Set1") +
labs(fill = "Subjects")breastData <- read.csv("data.csv")
breastData$X <- NULL
breastData <- dplyr::select(breastData, -id)
breastData_kmeans <- classic2sym(breastData, groupby = "kmeans", k = 5)
head(breastData_kmeans$intervalData[, 1:4])
#> # A tibble: 5 × 4
#> diagnosis radius_mean texture_mean perimeter_mean
#> <symblc_m> <symblc_n> <symblc_n> <symblc_n>
#> 1 B:0.98 M:0.02 [6.98 : 13.05] [9.71 : 33.81] [43.79 : 85.09]
#> 2 B:0.04 M:0.96 [13.81 : 19.59] [11.89 : 39.28] [91.56 : 132.40]
#> 3 B:0.00 M:1.00 [20.73 : 28.11] [17.25 : 31.12] [135.70 : 188.50]
#> 4 B:0.00 M:1.00 [15.50 : 24.25] [10.38 : 32.47] [102.90 : 166.20]
#> 5 B:0.68 M:0.32 [11.84 : 16.30] [10.89 : 30.72] [77.93 : 109.80]
breastData_diag <- classic2sym(breastData, groupby = "diagnosis")
head(breastData_diag$intervalData[, 1:4])
#> radius_mean texture_mean perimeter_mean area_mean
#> 1 [6.98 : 17.85] [9.71 : 33.81] [43.79 : 114.60] [143.50 : 992.10]
#> 2 [10.95 : 28.11] [10.38 : 39.28] [71.90 : 188.50] [361.60 : 2,501.00]mean(facedata)
#> # A tibble: 1 × 6
#> AD BC AH DH EH GH
#> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 163. 60.0 113. 113. 59.8 57.7
sd(facedata)
#> # A tibble: 1 × 6
#> AD BC AH DH EH GH
#> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 6.84 4.58 8.98 9.40 4.24 4.78
cov(facedata$AD, facedata$BC, method = "BD")
#> [1] 21.47015
cor(facedata$AD, facedata$BC, method = "BD")
#> [1] 0.6846339
summary(facedata$AD)
#> <symbolic_interval[7]>
#> Min. 1st Qu. Median Mean
#> [149.34 : 155.32] [154.56 : 158.91] [163.00 : 167.07] [162.90 : 162.90]
#> 3rd Qu. Max. Std.
#> [167.13 : 171.19] [169.85 : 175.15] [6.84 : 6.84]
summary(Environment[1:3, ])
#> $symbolic_interval
#> CONTROL SATISFY INDIVIDUAL
#> Min. [-723.25 : -339.65] [-134.15 : 191.17] [-658.77 : -299.04]
#> 1st Qu. [-483.56 : -124.77] [-134.03 : 221.00] [-625.52 : -268.47]
#> Median [-243.86 : 90.10] [-133.91 : 250.83] [-592.28 : -237.90]
#> Mean [-201.35 : -201.35] [68.96 : 68.96] [-398.20 : -398.20]
#> 3rd Qu. [-219.66 : 147.05] [-104.46 : 282.82] [-542.15 : -173.54]
#> Max. [-195.44 : 203.99] [-75.00 : 314.80] [-492.03 : -109.17]
#> Std. [258.04 : 258.04] [109.12 : 109.12] [127.06 : 127.06]
#> WELFARE HUMAN POLITICS
#> Min. [-229.94 : 138.29] [-879.71 : -501.15] [-491.78 : -70.01]
#> 1st Qu. [-184.41 : 161.36] [-726.36 : -312.15] [-346.20 : 66.67]
#> Median [-138.88 : 184.42] [-573.00 : -123.14] [-200.61 : 203.36]
#> Mean [92.63 : 92.63] [-352.28 : -352.28] [-63.41 : -63.41]
#> 3rd Qu. [-26.15 : 349.88] [-367.09 : 0.68] [-145.13 : 235.78]
#> Max. [86.57 : 515.34] [-161.18 : 124.50] [-89.65 : 268.21]
#> Std. [183.83 : 183.83] [295.23 : 295.23] [192.80 : 192.80]
#> BURDEN NOISE NATURE
#> Min. [-619.29 : -254.11] [-403.24 : -29.45] [-190.28 : 83.12]
#> 1st Qu. [-548.22 : -171.34] [-377.24 : -4.36] [-145.13 : 195.19]
#> Median [-477.14 : -88.57] [-351.24 : 20.72] [-99.99 : 307.27]
#> Mean [-282.90 : -282.90] [-152.88 : -152.88] [111.80 : 111.80]
#> 3rd Qu. [-423.03 : 11.05] [-294.80 : 52.49] [-33.02 : 422.00]
#> Max. [-368.92 : 110.66] [-238.37 : 84.26] [33.96 : 536.72]
#> Std. [166.31 : 166.31] [111.68 : 111.68] [181.34 : 181.34]
#> SEASETC MULTI WATERWASTE
#> Min. [-747.46 : -169.30] [-215.07 : 226.66] [-542.37 : -146.89]
#> 1st Qu. [-679.36 : -125.54] [-177.55 : 249.70] [-368.52 : 8.80]
#> Median [-611.26 : -81.79] [-140.04 : 272.75] [-194.66 : 164.49]
#> Mean [-262.66 : -262.66] [66.25 : 66.25] [-80.69 : -80.69]
#> 3rd Qu. [-367.73 : 38.11] [-97.46 : 290.42] [-157.59 : 260.17]
#> Max. [-124.20 : 158.01] [-54.88 : 308.08] [-120.52 : 355.84]
#> Std. [243.16 : 243.16] [121.64 : 121.64] [224.56 : 224.56]
#> VEHICLE
#> Min. [-840.00 : -574.57]
#> 1st Qu. [-754.88 : -405.27]
#> Median [-669.76 : -235.98]
#> Mean [-409.06 : -409.06]
#> 3rd Qu. [-437.21 : -82.68]
#> Max. [-204.67 : 70.63]
#> Std. [280.31 : 280.31]
#>
#> $symbolic_modal
#> URBANICITY INCOMELEVEL EDUCATION REGIONDEVELOPME
#> [1,] 6: 0.12 25: 0.54 1: 0.42 4: 0.51
#> [2,] 4: 0.45 50: 0.17 3: 0.57 3: 0.27
#> [3,] 5: 0.09 75: 0.18 5: 0.01 2: 0.15
#> [4,] 1: 0.20 90: 0.07 6: 0.00 1: 0.08
#> [5,] 3: 0.10 100: 0.04
#> [6,] 2: 0.05
ggInterval_indexplot(facedata, aes(x = AD, fill = Subjects)) +
scale_fill_brewer(palette = "Set1") +
geom_vline(xintercept = mean(facedata$AD), color = "darkgray") +
labs(fill = "Subjects")face.ip <- ggInterval_indexplot(facedata, aes(fill = Subjects), plotAll = TRUE) +
scale_fill_brewer(palette = "Set1") +
labs(x = "", y = "", fill = "Subjects")
face.ip
b <- ggInterval_indexplot(facedata, aes(fill = Subjects),
plotAll = TRUE, row_order = "c") +
scale_fill_brewer(palette = "Set1") +
labs(x = "", y = "", fill = "Subjects")
b
cc <- ggInterval_indexplot(facedata, aes(fill = Subjects),
plotAll = TRUE, row_order = "r") +
scale_fill_brewer(palette = "Set1") +
labs(x = "", y = "", fill = "Subjects")
ccIn the ordered plotAll displays, the outer y-axis labels
are suppressed by default. Here row_order = "c" reorders
observations by interval centers within each variable panel, while
row_order = "r" reorders them by interval ranges within
each variable panel. Set labels = TRUE if you want the row
labels repeated inside each variable panel.
ggInterval_boxplot(facedata, plotAll = TRUE, width_type = "violin-like") +
theme(legend.position = "bottom", axis.text.x = element_blank())
ggInterval_boxplot(facedata, plotAll = TRUE, width_type = "side-by-side") +
theme(legend.position = "bottom", axis.text.x = element_blank())hist.obj.equal$`Table AD`
#> Interval Observed.Frequency Relative.Frequency
#> 1 [149.34:151.92] 1.077477 0.03990656
#> 2 [151.92:154.5] 1.753623 0.06494900
#> 3 [154.5:157.08] 5.525627 0.20465284
#> 4 [157.08:159.66] 2.806570 0.10394703
#> 5 [159.66:162.24] 1.042880 0.03862518
#> 6 [162.24:164.83] 1.703999 0.06311106
#> 7 [164.83:167.41] 3.304380 0.12238443
#> 8 [167.41:169.99] 4.948225 0.18326760
#> 9 [169.99:172.57] 3.738883 0.13847713
#> 10 [172.57:175.15] 1.098337 0.04067915
hist.obj.unequal <- ggInterval_hist(
facedata,
plotAll = TRUE,
method = "unequal-bin"
)
print(hist.obj.unequal)if (!requireNamespace("TTR", quietly = TRUE)) {
stop("Package 'TTR' is required for this example.")
}
data("ttrc", package = "TTR")
stock.data <- subset(
ttrc[, c("Date", "Close", "Low", "High")],
format(Date, "%Y-%m") %in% c("1985-01", "1985-02", "1985-03")
)
stock.data$Month <- factor(
month.abb[as.integer(format(stock.data$Date, "%m"))],
levels = month.abb[1:3]
)
stock.data$Day <- as.integer(format(stock.data$Date, "%d"))
stock.data.LH <- classic2sym(
stock.data,
groupby = "customize",
minData = stock.data$Low,
maxData = stock.data$High
)
ggInterval_lineplot(stock.data.LH, aes(y = V1, x = Day), barWidth = 0.6) +
geom_point(aes(y = Close), shape = 21, fill = "#D95F02",
color = "black", size = 1.6, stroke = 0.2) +
coord_cartesian(xlim = c(1, 31), expand = FALSE) +
facet_wrap(~Month, ncol = 1, scales = "free_y") +
scale_x_continuous(breaks = c(1, 8, 15, 22, 29)) +
labs(title = "Interval-valued Line Plot",
x = "Day of month", y = "Price") +
ggthemes::theme_economist() +
theme(strip.text = element_text(face = "bold"))mm.plot <- function(x) {
plot.var <<- names(facedata)[x]
ggInterval_MMplot(facedata, aes(facedata[[plot.var]], size = 2)) +
coord_fixed(ratio = 1) +
theme(legend.position = "none")
}
mm.plot.list <- lapply(seq_along(facedata), mm.plot)
gridExtra::marrangeGrob(mm.plot.list, nrow = 2, ncol = 3, top = "")ggInterval_scatterplot(
facedata,
aes(x = BC, y = AD, fill = Subjects),
showLabels = TRUE,
labelSize = 2.6,
labelPosition = "topright",
labelNudgeX = -0.2,
labelNudgeY = 0.15,
checkOverlap = FALSE,
color = "black"
) +
scale_fill_brewer(palette = "Set1") +
scale_x_continuous(expand = expansion(mult = c(0.08, 0.12))) +
scale_y_continuous(expand = expansion(mult = c(0.06, 0.10))) +
labs(fill = "Subjects")face.2dh.equal <- ggInterval_2Dhist(
facedata,
aes(x = BC, y = AD, col = "white"),
method = "equal-bin",
xBins = 10,
yBins = 10,
display = "p",
palette = "Blues",
direction = 1,
cell_labels = TRUE
)$plot
face.2dh.equal +
coord_fixed(ratio = 1)face.2dh.unequal <- ggInterval_2Dhist(
facedata,
aes(x = BC, y = AD, col = "white"),
method = "unequal-bin",
display = "p",
palette = "Blues",
direction = 1,
tau = 0.5
)$plot
face.2dh.unequal +
coord_fixed(ratio = 1)ggInterval_2DhistMatrix(
facedata,
aes(col = "white"),
method = "equal-bin",
xBins = 10,
yBins = 10,
display = "p",
removeZero = TRUE,
palette = "Blues",
direction = 1,
cell_labels = FALSE
)ggInterval_2DhistMatrix(
facedata,
aes(col = "white"),
method = "unequal-bin",
display = "p",
palette = "Blues",
direction = 1,
tau = 0.5,
removeZero = TRUE,
cell_labels = FALSE
)ggInterval_indexImage(
facedata,
plotAll = TRUE,
full_strip = TRUE,
column_condition = FALSE
) +
scale_colour_distiller(palette = "Blues", direction = 1) +
labs(x = "Subjects") +
theme(axis.title.x = element_blank(),
axis.text.x = element_blank(),
axis.ticks.x = element_blank())
ggInterval_indexImage(
facedata,
plotAll = TRUE,
full_strip = TRUE
) +
scale_colour_distiller(palette = "Spectral") +
labs(x = "Subjects")
ggInterval_indexImage(
facedata,
plotAll = TRUE,
full_strip = FALSE,
column_condition = FALSE
) +
scale_colour_distiller(palette = "Blues", direction = 1) +
labs(x = "Subjects") +
theme(axis.title.x = element_blank(),
axis.text.x = element_blank(),
axis.ticks.x = element_blank())
ggInterval_indexImage(
facedata,
plotAll = TRUE,
full_strip = FALSE
) +
scale_colour_distiller(palette = "Spectral") +
labs(x = "Subjects")library(ggthemes)
ggInterval_radarplot(
Environment,
plotPartial = c(4, 6),
showLegend = FALSE,
base_circle = FALSE,
base_lty = 1,
addText = FALSE,
addText_modal = FALSE
) +
scale_fill_manual(values = c("darkred", "darkblue")) +
scale_color_manual(values = c("darkred", "darkblue")) +
labs(title = "") +
theme_hc()
ggInterval_radarplot(
Environment,
plotPartial = c(4, 6),
showLegend = FALSE,
base_circle = FALSE,
base_lty = 1,
addText = FALSE,
addText_modal = FALSE,
type = "rect"
) +
scale_fill_manual(values = c("darkred", "darkblue")) +
scale_color_manual(values = c("darkred", "darkblue")) +
labs(title = "") +
theme_hc()
ggInterval_radarplot(
facedata,
base_circle = FALSE,
base_lty = 1,
type = "quantile",
quantileNum = 5,
showLegend = TRUE,
Drift = 0
) +
scale_fill_brewer(palette = "Greys") +
labs(title = "", fill = "Quantiles") +
theme_hc()
ggInterval_radarplot(
Environment,
base_circle = FALSE,
base_lty = 1,
type = "quantile",
quantileNum = 5,
showLegend = TRUE,
Drift = 0
) +
scale_fill_brewer(palette = "Greys") +
labs(title = "", fill = "Quantiles") +
theme_hc()set.seed(1234567890)
facedata.tmp <- facedata
facedata.tmp$cluster <- RSDA::sym.kmeans(facedata.tmp, k = 3)$cluster
ggInterval_indexplot(facedata.tmp, aes(y = AD, fill = Subjects)) +
geom_text(
aes(x = seq_len(nrow(facedata.tmp)), y = .data$AD$min,
label = rownames(facedata.tmp)),
vjust = 1.5,
size = 2
) +
scale_fill_brewer(palette = "Set1") +
labs(title = "Customized Index Plot Using K-Means Clusters",
fill = "Subjects") +
facet_grid(cols = vars(cluster), scales = "free_x", space = "free_x") +
theme_economist_white() +
theme(axis.title.x = element_blank(),
axis.text.x = element_blank(),
axis.ticks.x = element_blank())This example is evaluated only when the optional package
HistDAWass is installed.
BLOOD <- HistDAWass::BLOOD
blood.min <- HistDAWass::get.MatH.stats(BLOOD, stat = "min")
blood.max <- HistDAWass::get.MatH.stats(BLOOD, stat = "max")
blood <- data.frame(blood.min, blood.max)
myBLOOD <- classic2sym(
blood,
groupby = "customize",
minData = blood[, 2:4],
maxData = blood[, 6:8]
)
colnames(myBLOOD$intervalData) <- HistDAWass::get.MatH.main.info(BLOOD)$varnames
ggInterval_PCA(myBLOOD$intervalData, plot = FALSE)$ggplotPCAThis example is evaluated only when the optional package
MAINT.Data is installed.
AbaloneIdt <- MAINT.Data::AbaloneIdt
AbaloneRange <- exp(AbaloneIdt@LogR)
AbaloneMid <- AbaloneIdt@MidP
AbaloneBounds <- data.frame(
AbaloneMid - AbaloneRange / 2,
AbaloneMid + AbaloneRange / 2
)
myAbalone <- classic2sym(
AbaloneBounds,
groupby = "customize",
minData = AbaloneBounds[, 1:7],
maxData = AbaloneBounds[, 8:14]
)
colnames(myAbalone$intervalData) <- AbaloneIdt@VarNames
ggInterval_PCA(myAbalone$intervalData, plot = FALSE)$ggplotPCApca.results <- RSDA::sym.pca(facedata, method = "tops")
rownames(pca.results$Sym.Components) <- rownames(facedata)
ggInterval_scatterplot(
pca.results$Sym.Components,
aes(Dim.1, Dim.2, fill = as.factor(Subjects)),
labelSize = 2.6,
labelPosition = "topright",
labelNudgeX = -0.2,
labelNudgeY = 0.15,
checkOverlap = TRUE,
col = "black"
) +
scale_fill_brewer(palette = "Set1") +
scale_x_continuous(expand = expansion(mult = c(0.08, 0.12))) +
scale_y_continuous(expand = expansion(mult = c(0.06, 0.10))) +
coord_fixed(ratio = 1) +
labs(x = "PCA-1", y = "PCA-2", fill = "Subjects")
ggInterval_PCA(facedata, poly = TRUE, concepts_group = as.factor(Subjects)) +
coord_fixed(ratio = 1) +
labs(x = "PCA-1", y = "PCA-2")#> NULL
Use citation("ggInterval") after installation to
retrieve the current package citation metadata.
sessionInfo()
#> R version 4.6.0 (2026-04-24 ucrt)
#> Platform: x86_64-w64-mingw32/x64
#> Running under: Windows 10 x64 (build 19045)
#>
#> Matrix products: default
#> LAPACK version 3.12.1
#>
#> locale:
#> [1] LC_COLLATE=C
#> [2] LC_CTYPE=Chinese (Traditional)_Taiwan.utf8
#> [3] LC_MONETARY=Chinese (Traditional)_Taiwan.utf8
#> [4] LC_NUMERIC=C
#> [5] LC_TIME=Chinese (Traditional)_Taiwan.utf8
#>
#> time zone: Asia/Taipei
#> tzcode source: internal
#>
#> attached base packages:
#> [1] stats graphics grDevices utils datasets methods base
#>
#> other attached packages:
#> [1] RSQLite_2.4.6 ggthemes_5.2.0 ggInterval_0.2.5 RSDA_3.2.5
#> [5] lubridate_1.9.5 forcats_1.0.1 stringr_1.6.0 dplyr_1.2.1
#> [9] purrr_1.2.2 readr_2.2.0 tidyr_1.3.2 tibble_3.3.1
#> [13] tidyverse_2.0.0 ggplot2_4.0.3
#>
#> loaded via a namespace (and not attached):
#> [1] neuralnet_1.44.2 splines_4.6.0 polyclip_1.10-7
#> [4] xts_0.14.2 XML_3.99-0.23 rpart_4.1.27
#> [7] lifecycle_1.0.5 tcltk_4.6.0 rstatix_0.7.3
#> [10] globals_0.19.1 lattice_0.22-9 MASS_7.3-65
#> [13] flashClust_1.1-4 backports_1.5.1 magrittr_2.0.5
#> [16] plotly_4.12.0 sass_0.4.10 rmarkdown_2.31
#> [19] jquerylib_0.1.4 yaml_2.3.12 otel_0.2.0
#> [22] sn_2.1.3 askpass_1.2.1 reticulate_1.46.0
#> [25] DBI_1.3.0 RColorBrewer_1.1-3 abind_1.4-8
#> [28] Rtsne_0.17 tweenr_2.0.3 lava_1.9.0
#> [31] gbm_2.2.3 ggrepel_0.9.8 listenv_0.10.1
#> [34] proto_1.0.0 umap_0.2.10.0 RSpectra_0.16-2
#> [37] parallelly_1.47.0 codetools_0.2-20 DT_0.34.0
#> [40] ggforce_0.5.0 tidyselect_1.2.1 shape_1.4.6.1
#> [43] farver_2.1.2 stats4_4.6.0 jsonlite_2.0.0
#> [46] Formula_1.2-5 ggridges_0.5.7 randomcoloR_1.1.0.1
#> [49] survival_3.8-6 iterators_1.0.14 emmeans_2.0.3
#> [52] HistDAWass_1.0.8 foreach_1.5.2 tools_4.6.0
#> [55] chron_2.3-62 miscTools_0.6-30 Rcpp_1.1.1-1.1
#> [58] glue_1.8.1 mnormt_2.1.2 prodlim_2026.03.11
#> [61] gridExtra_2.3 xfun_0.57 TTR_0.24.4
#> [64] withr_3.0.2 numDeriv_2016.8-1.1 fastmap_1.2.0
#> [67] GGally_2.4.0 openssl_2.4.0 digest_0.6.39
#> [70] timechange_0.4.0 R6_2.6.1 estimability_1.5.1
#> [73] colorspace_2.1-2 gtools_3.9.5 MAINT.Data_2.8.0
#> [76] ggpolypath_0.4.0 generics_0.1.4 data.table_1.18.2.1
#> [79] robustbase_0.99-7 class_7.3-23 httr_1.4.8
#> [82] htmlwidgets_1.6.4 scatterplot3d_0.3-45 sqldf_0.4-12
#> [85] ggstats_0.13.0 RJSONIO_2.0.0 pkgconfig_2.0.3
#> [88] gtable_0.3.6 blob_1.3.0 S7_0.2.2
#> [91] pcaPP_2.0-5 htmltools_0.5.9 carData_3.0-6
#> [94] multcompView_0.1-11 scales_1.4.0 leaps_3.2
#> [97] png_0.1-9 histogram_0.0-25 knitr_1.51
#> [100] tzdb_0.5.0 curl_7.1.0 nloptr_2.2.1
#> [103] cachem_1.1.0 zoo_1.8-15 parallel_4.6.0
#> [106] pillar_1.11.1 grid_4.6.0 reshape_0.8.10
#> [109] vctrs_0.7.3 randomForest_4.7-1.2 ggpubr_0.6.3
#> [112] car_3.1-5 xtable_1.8-8 cluster_2.1.8.2
#> [115] princurve_2.1.6 evaluate_1.0.5 gsubfn_0.7
#> [118] mvtnorm_1.3-7 cli_3.6.6 compiler_4.6.0
#> [121] rlang_1.2.0 rrcov_1.7-7 future.apply_1.20.2
#> [124] ggsignif_0.6.4 labeling_0.4.3 mclust_6.1.2
#> [127] plyr_1.8.9 stringi_1.8.7 viridisLite_0.4.3
#> [130] lazyeval_0.2.3 glmnet_4.1-10 V8_8.2.0
#> [133] Matrix_1.7-5 hms_1.1.4 bit64_4.8.0
#> [136] future_1.70.0 FactoMineR_2.14 kknn_1.4.1
#> [139] igraph_2.3.0 broom_1.0.12 memoise_2.0.1
#> [142] bslib_0.10.0 DEoptimR_1.1-4 bit_4.6.0