Choose univariate class intervals — classIntervals

if (!require("spData", quietly=TRUE)) {
  message("spData package needed for examples")
  run <- FALSE
} else {
  run <- TRUE
}
if (run) {
data(jenks71, package="spData")
pal1 <- c("wheat1", "red3")
opar <- par(mfrow=c(2,3))
plot(classIntervals(jenks71$jenks71, n=5, style="fixed",
 fixedBreaks=c(15.57, 25, 50, 75, 100, 155.30)), pal=pal1, main="Fixed")
plot(classIntervals(jenks71$jenks71, n=5, style="sd"), pal=pal1, main="Pretty standard deviations")
plot(classIntervals(jenks71$jenks71, n=5, style="equal"), pal=pal1, main="Equal intervals")
plot(classIntervals(jenks71$jenks71, n=5, style="quantile"), pal=pal1, main="Quantile")
set.seed(1)
plot(classIntervals(jenks71$jenks71, n=5, style="kmeans"), pal=pal1, main="K-means")
plot(classIntervals(jenks71$jenks71, n=5, style="hclust", method="complete"),
 pal=pal1, main="Complete cluster")
}

if (run) {
plot(classIntervals(jenks71$jenks71, n=5, style="hclust", method="single"),
 pal=pal1, main="Single cluster")
set.seed(1)
plot(classIntervals(jenks71$jenks71, n=5, style="bclust", verbose=FALSE),
 pal=pal1, main="Bagged cluster")
plot(classIntervals(jenks71$jenks71, n=5, style="fisher"), pal=pal1,
 main="Fisher's method")
plot(classIntervals(jenks71$jenks71, n=5, style="jenks"), pal=pal1,
 main="Jenks' method")
 plot(classIntervals(jenks71$jenks71, style="dpih"), pal=pal1,
 main="dpih method")
 plot(classIntervals(jenks71$jenks71, style="headtails", thr = 1), pal=pal1,
 main="Head Tails method")
 }

if (run) {
 plot(classIntervals(jenks71$jenks71, style="maximum"), pal=pal1,
 main="Maximum method")
 plot(classIntervals(jenks71$jenks71, style="box"), pal=pal1,
 main="Box method")
 par(opar)
}

if (run) {
print(classIntervals(jenks71$jenks71, n=5, style="fixed",
 fixedBreaks=c(15.57, 25, 50, 75, 100, 155.30)))
}
#> style: fixed
#>   one of 3,921,225 possible partitions of this variable into 5 classes
#>  [15.57,25)     [25,50)     [50,75)    [75,100) [100,155.3] 
#>           6          34          42          14           6 
if (run) {
print(classIntervals(jenks71$jenks71, n=5, style="sd"))
}
#> style: sd
#>   one of 75,287,520 possible partitions of this variable into 6 classes
#> [5.514407,30.89691) [30.89691,56.27941) [56.27941,81.66191) [81.66191,107.0444) 
#>                  10                  47                  31                   9 
#> [107.0444,132.4269) [132.4269,157.8094] 
#>                   4                   1 
if (run) {
print(classIntervals(jenks71$jenks71, n=5, style="equal"))
}
#> style: equal
#>   one of 3,921,225 possible partitions of this variable into 5 classes
#>   [15.57,43.516)  [43.516,71.462)  [71.462,99.408) [99.408,127.354) 
#>               35               44               17                4 
#>  [127.354,155.3] 
#>                2 
if (run) {
print(classIntervals(jenks71$jenks71, n=5, style="quantile"))
}
#> style: quantile
#>   one of 3,921,225 possible partitions of this variable into 5 classes
#>  [15.57,33.822) [33.822,50.114) [50.114,57.454) [57.454,73.368)  [73.368,155.3] 
#>              21              20              20              20              21 
if (run) {
set.seed(1)
print(classIntervals(jenks71$jenks71, n=5, style="kmeans"))
}
#> style: kmeans
#>   one of 3,921,225 possible partitions of this variable into 5 classes
#>  [15.57,36.905)  [36.905,53.33)  [53.33,72.185) [72.185,105.95)  [105.95,155.3] 
#>              25              26              29              17               5 
if (run) {
set.seed(1)
print(classIntervals(jenks71$jenks71, n=5, style="kmeans", intervalClosure="right"))
}
#> style: kmeans
#>   one of 3,921,225 possible partitions of this variable into 5 classes
#>  [15.57,36.905]  (36.905,53.33]  (53.33,72.185] (72.185,105.95]  (105.95,155.3] 
#>              25              26              29              17               5 
if (run) {
set.seed(1)
print(classIntervals(jenks71$jenks71, n=5, style="kmeans", dataPrecision=0))
}
#> style: kmeans
#>   one of 3,921,225 possible partitions of this variable into 5 classes
#>   [16,37)   [37,54)   [54,73)  [73,106) [106,156] 
#>        25        26        29        17         5 
if (run) {
set.seed(1)
print(classIntervals(jenks71$jenks71, n=5, style="kmeans"), cutlabels=FALSE)
}
#> style: kmeans
#>   one of 3,921,225 possible partitions of this variable into 5 classes
#>    under 36.905  36.905 - 53.33  53.33 - 72.185 72.185 - 105.95     over 105.95 
#>              25              26              29              17               5 
if (run) {
print(classIntervals(jenks71$jenks71, n=5, style="hclust", method="complete"))
}
#> style: hclust
#>   one of 3,921,225 possible partitions of this variable into 5 classes
#>   [15.57,54.81)  [54.81,74.405) [74.405,105.95)  [105.95,143.4)   [143.4,155.3] 
#>              55              27              15               4               1 
if (run) {
print(classIntervals(jenks71$jenks71, n=5, style="hclust", method="single"))
}
#> style: hclust
#>   one of 3,921,225 possible partitions of this variable into 5 classes
#>  [15.57,20.995) [20.995,105.95)  [105.95,125.7)   [125.7,143.4)   [143.4,155.3] 
#>               4              93               3               1               1 
if (run) {
set.seed(1)
print(classIntervals(jenks71$jenks71, n=5, style="bclust", verbose=FALSE))
}
#> style: bclust
#>   one of 3,921,225 possible partitions of this variable into 5 classes
#>    [15.57,43.3)   [43.3,82.175) [82.175,105.95)  [105.95,143.4)   [143.4,155.3] 
#>              35              53               9               4               1 
if (run) {
print(classIntervals(jenks71$jenks71, n=5, style="bclust",
 hclust.method="complete", verbose=FALSE))
}
#> style: bclust
#>   one of 3,921,225 possible partitions of this variable into 5 classes
#>    [15.57,43.3)   [43.3,82.175) [82.175,105.95)  [105.95,143.4)   [143.4,155.3] 
#>              35              53               9               4               1 
if (run) {
print(classIntervals(jenks71$jenks71, n=5, style="fisher"))
}
#> style: fisher
#>   one of 3,921,225 possible partitions of this variable into 5 classes
#>    [15.57,43.3)    [43.3,61.36)  [61.36,78.475) [78.475,105.95)  [105.95,155.3] 
#>              35              33              18              11               5 
if (run) {
print(classIntervals(jenks71$jenks71, n=5, style="jenks"))
}
#> style: jenks
#>   one of 3,921,225 possible partitions of this variable into 5 classes
#>  [15.57,41.2]  (41.2,60.66] (60.66,77.29] (77.29,100.1] (100.1,155.3] 
#>            35            33            18            11             5 
if (run) {
print(classIntervals(jenks71$jenks71, style="dpih"))
}
#> style: dpih
#>   one of 16,007,560,800 possible partitions of this variable into 8 classes
#>    [15.57,31.70792) [31.70792,47.84584) [47.84584,63.98376) [63.98376,80.12169) 
#>                  14                  25                  33                  15 
#> [80.12169,96.25961) [96.25961,112.3975) [112.3975,128.5355) [128.5355,144.6734] 
#>                   7                   4                   2                   2 
if (run) {
print(classIntervals(jenks71$jenks71, style="dpih", range.x=c(0, 160)))
}
#> style: dpih
#>   one of 186,087,894,300 possible partitions of this variable into 9 classes
#>        [0,16.26458) [16.26458,32.52917) [32.52917,48.79375) [48.79375,65.05834) 
#>                   2                  16                  21                  34 
#> [65.05834,81.32292) [81.32292,97.58751) [97.58751,113.8521) [113.8521,130.1167) 
#>                  15                   8                   2                   2 
#> [130.1167,146.3813] 
#>                   2 
if (run) {
  print(classIntervals(jenks71$jenks71, style="headtails"))
}
#> style: headtails
#>   one of 100 possible partitions of this variable into 2 classes
#> [15.57,56.27941) [56.27941,155.3] 
#>               57               45 
if (run) {
  print(classIntervals(jenks71$jenks71, style="headtails", thr = .45))
}
#> style: headtails
#>   one of 75,287,520 possible partitions of this variable into 6 classes
#>    [15.57,56.27941) [56.27941,77.74533) [77.74533,100.5925)   [100.5925,126.98) 
#>                  57                  29                  11                   3 
#>      [126.98,143.4)       [143.4,155.3] 
#>                   1                   1 
if (run) {
  print(classIntervals(jenks71$jenks71, style="maximum"))
}
#> style: maximum
#>   one of 16,007,560,800 possible partitions of this variable into 8 classes
#> [15.57,20.995)  [20.995,43.3)   [43.3,90.16) [90.16,105.95) [105.95,114.1) 
#>              4             31             58              4              1 
#>  [114.1,125.7)  [125.7,143.4)  [143.4,155.3] 
#>              2              1              1 
if (run) {
  print(classIntervals(jenks71$jenks71, style="box"))
}
#> style: box
#>   one of 75,287,520 possible partitions of this variable into 6 classes
#>    [-Inf,-8.02125) [-8.02125,37.7325)    [37.7325,53.33)     [53.33,68.235) 
#>                  0                 26                 25                 25 
#>  [68.235,113.9887)   [113.9887,155.3] 
#>                 22                  4 
if (run) {
  print(classIntervals(jenks71$jenks71, style="box", iqr_mult = 0.25))
}
#> style: box
#>   one of 75,287,520 possible partitions of this variable into 6 classes
#>   [15.57,30.10688) [30.10688,37.7325)    [37.7325,53.33)     [53.33,68.235) 
#>                 10                 16                 25                 25 
#>  [68.235,75.86062)   [75.86062,155.3] 
#>                  8                 18 
x <- c(0, 0, 0, 1, 2, 50)
print(classIntervals(x, n=3, style="fisher"))
#> style: fisher
#>   one of 3 possible partitions of this variable into 3 classes
#>  [0,0.5) [0.5,26)  [26,50] 
#>        3        2        1 
print(classIntervals(x, n=3, style="jenks"))
#> style: jenks
#>   one of 3 possible partitions of this variable into 3 classes
#>  [0,0]  (0,2] (2,50] 
#>      3      2      1 

# Argument 'unique' will collapse the label of classes containing a
# single value. This is particularly useful for 'censored' variables
# that contain for example many zeros.

data_censored<-c(rep(0,10), rnorm(100, mean=20,sd=1),rep(26,10))
plot(density(data_censored))

cl2 <- classIntervals(data_censored, n=5, style="jenks", dataPrecision=2)
print(cl2, unique=FALSE)
#> style: jenks
#>   one of 4,082,925 possible partitions of this variable into 5 classes
#>        [0,0]     (0,19.5] (19.5,20.63] (20.63,22.6]    (22.6,26] 
#>           10           33           39           28           10 
print(cl2, unique=TRUE)
#> style: jenks
#>   one of 4,082,925 possible partitions of this variable into 5 classes
#> Class found with one single (possibly repeated) value: changed label
#>            0     (0,19.5] (19.5,20.63] (20.63,22.6]           26 
#>           10           33           39           28           10 

# \dontrun{
set.seed(1)
n <- 1e+05
x <- runif(n)
classIntervals(x, n=5, style="sd")
#> style: sd
#> [-0.07925682,0.06546355)   [0.06546355,0.2101839)    [0.2101839,0.3549043) 
#>                     6597                    14579                    14403 
#>    [0.3549043,0.4996247)     [0.4996247,0.644345)     [0.644345,0.7890654) 
#>                    14395                    14446                    14439 
#>    [0.7890654,0.9337858)     [0.9337858,1.078506] 
#>                    14463                     6678 
classIntervals(x, n=5, style="pretty")
#> style: pretty
#>   [0,0.2) [0.2,0.4) [0.4,0.6) [0.6,0.8)   [0.8,1] 
#>     20142     19936     19888     19993     20041 
classIntervals(x, n=5, style="equal")
#> style: equal
#> [3.895489e-06,0.1999925)    [0.1999925,0.3999812)    [0.3999812,0.5999698) 
#>                    20141                    19935                    19888 
#>    [0.5999698,0.7999584)    [0.7999584,0.9999471] 
#>                    19991                    20045 
classIntervals(x, n=5, style="quantile")
#> style: quantile
#> [3.895489e-06,0.1984408)    [0.1984408,0.3993007)    [0.3993007,0.6003913) 
#>                    20000                    20000                    20000 
#>    [0.6003913,0.8003984)    [0.8003984,0.9999471] 
#>                    20000                    20000 
# the class intervals found vary a little because of sampling
classIntervals(x, n=5, style="kmeans")
#> style: kmeans
#> [3.895489e-06,0.1992885)    [0.1992885,0.4002208)     [0.4002208,0.600954) 
#>                    20075                    20034                    19946 
#>      [0.600954,0.800892)     [0.800892,0.9999471] 
#>                    20007                    19938 
classIntervals(x, n=5, style="fisher")
#> Warning: N is large, and some styles will run very slowly; sampling imposed
#> style: fisher
#> [3.895489e-06,0.2084817)    [0.2084817,0.4107739)    [0.4107739,0.6097159) 
#>                    21009                    20108                    19764 
#>    [0.6097159,0.8037792)    [0.8037792,0.9999471] 
#>                    19470                    19649 
classIntervals(x, n=5, style="fisher")
#> Warning: N is large, and some styles will run very slowly; sampling imposed
#> style: fisher
#> [3.895489e-06,0.201632)    [0.201632,0.4031747)   [0.4031747,0.6060818) 
#>                   20327                   20045                   20172 
#>   [0.6060818,0.8071612)   [0.8071612,0.9999471] 
#>                   20159                   19297 
classIntervals(x, n=5, style="fisher")
#> Warning: N is large, and some styles will run very slowly; sampling imposed
#> style: fisher
#> [3.895489e-06,0.1927805)    [0.1927805,0.3880168)    [0.3880168,0.5904186) 
#>                    19443                    19489                    20059 
#>    [0.5904186,0.7963362)    [0.7963362,0.9999471] 
#>                    20617                    20392 
# }
have_units <- FALSE
if (require(units, quietly=TRUE)) have_units <- TRUE
#> udunits database from /usr/share/udunits/udunits2.xml
if (have_units) {
set.seed(1)
x_units <- set_units(sample(seq(1, 100, 0.25), 100), km/h)
# \dontrun{
classIntervals(x_units, n=5, style="sd")
# }
}
#> style: sd
#>   one of 14,887,031,544 possible partitions of this [km/h] variable into 8 classes
#> [-6.990949,7.637413)  [7.637413,22.26578)  [22.26578,36.89414) 
#>                    6                   15                   16 
#>   [36.89414,51.5225)   [51.5225,66.15086)  [66.15086,80.77922) 
#>                   12                   12                   16 
#>  [80.77922,95.40759)  [95.40759,110.0359] 
#>                   18                    5 
if (have_units) {
classIntervals(x_units, n=5, style="pretty")
}
#> style: pretty
#>   one of 3,764,376 possible partitions of this [km/h] variable into 5 classes
#>   [0,20)  [20,40)  [40,60)  [60,80) [80,100] 
#>       18       21       19       19       23 
if (have_units) {
# \dontrun{
classIntervals(x_units, n=5, style="equal")
# }
}
#> style: equal
#>   one of 3,764,376 possible partitions of this [km/h] variable into 5 classes
#>    [4,23.1) [23.1,42.2) [42.2,61.3) [61.3,80.4) [80.4,99.5] 
#>          22          19          17          19          23 
if (have_units) {
classIntervals(x_units, n=5, style="quantile")
}
#> style: quantile
#>   one of 3,764,376 possible partitions of this [km/h] variable into 5 classes
#>    [4,21.95) [21.95,41.5) [41.5,64.05) [64.05,82.8)  [82.8,99.5] 
#>           20           20           20           20           20 
if (have_units) {
# \dontrun{
classIntervals(x_units, n=5, style="kmeans")
# }
}
#> style: kmeans
#>   one of 3,764,376 possible partitions of this [km/h] variable into 5 classes
#>      [4,19.375) [19.375,39.375)   [39.375,60.5)   [60.5,79.625)   [79.625,99.5] 
#>              18              21              19              19              23 
if (have_units) {
classIntervals(x_units, n=5, style="fisher")
}
#> style: fisher
#>   one of 3,764,376 possible partitions of this [km/h] variable into 5 classes
#>      [4,19.375) [19.375,39.375)   [39.375,60.5)   [60.5,79.625)   [79.625,99.5] 
#>              18              21              19              19              23 
if (have_units) {
classIntervals(x_units, style="headtails")
}
#> style: headtails
#>   one of 99 possible partitions of this [km/h] variable into 2 classes
#>    [4,51.5225) [51.5225,99.5] 
#>             49             51 
if (have_units) {
classIntervals(x_units, style="box")
}
#> style: box
#>   one of 71,523,144 possible partitions of this [km/h] variable into 6 classes
#>    [-Inf,-46.375) [-46.375,26.9375)      [26.9375,52)      [52,75.8125) 
#>                 0                25                25                25 
#> [75.8125,149.125)     [149.125,Inf] 
#>                25                 0 
# \dontrun{
st <- Sys.time()
x_POSIXt <- sample(st+((0:500)*3600), 100)
fx <- st+((0:5)*3600)*100
classIntervals(x_POSIXt, style="fixed", fixedBreaks=fx)
#> style: fixed
#>   one of 3,764,376 possible partitions of this variable into 5 classes
#> [2024-12-27 10:41:00.252928,2024-12-31 14:41:00.252928) 
#>                                                      21 
#> [2024-12-31 14:41:00.252928,2025-01-04 18:41:00.252928) 
#>                                                      18 
#> [2025-01-04 18:41:00.252928,2025-01-08 22:41:00.252928) 
#>                                                      19 
#> [2025-01-08 22:41:00.252928,2025-01-13 02:41:00.252928) 
#>                                                      21 
#> [2025-01-13 02:41:00.252928,2025-01-17 06:41:00.252928] 
#>                                                      21 
classIntervals(x_POSIXt, n=5, style="sd")
#> style: sd
#>   one of 14,887,031,544 possible partitions of this variable into 8 classes
#> [2024-12-25 13:40:28.307138,2024-12-28 14:46:36.293586) 
#>                                                       5 
#> [2024-12-28 14:46:36.293586,2024-12-31 15:52:44.280033) 
#>                                                      16 
#> [2024-12-31 15:52:44.280033,2025-01-03 16:58:52.266481) 
#>                                                      17 
#> [2025-01-03 16:58:52.266481,2025-01-06 18:05:00.252928) 
#>                                                      12 
#> [2025-01-06 18:05:00.252928,2025-01-09 19:11:08.239376) 
#>                                                      14 
#> [2025-01-09 19:11:08.239376,2025-01-12 20:17:16.225824) 
#>                                                      14 
#> [2025-01-12 20:17:16.225824,2025-01-15 21:23:24.212271) 
#>                                                      16 
#>  [2025-01-15 21:23:24.212271,2025-01-18 22:29:32.19871] 
#>                                                       6 
classIntervals(x_POSIXt, n=5, style="pretty")
#> style: pretty
#>   one of 3,764,376 possible partitions of this variable into 5 classes
#> [2024-12-24 01:26:40,2024-12-29 20:20:00) 
#>                                        12 
#> [2024-12-29 20:20:00,2025-01-04 15:13:20) 
#>                                        27 
#> [2025-01-04 15:13:20,2025-01-10 10:06:40) 
#>                                        28 
#> [2025-01-10 10:06:40,2025-01-16 05:00:00) 
#>                                        28 
#> [2025-01-16 05:00:00,2025-01-21 23:53:20] 
#>                                         5 
classIntervals(x_POSIXt, n=5, style="equal")
#> style: equal
#>   one of 3,764,376 possible partitions of this variable into 5 classes
#> [2024-12-27 23:41:00.252928,2025-01-01 00:05:00.252928) 
#>                                                      23 
#> [2025-01-01 00:05:00.252928,2025-01-05 00:29:00.252928) 
#>                                                      16 
#> [2025-01-05 00:29:00.252928,2025-01-09 00:53:00.252928) 
#>                                                      19 
#> [2025-01-09 00:53:00.252928,2025-01-13 01:17:00.252928) 
#>                                                      20 
#> [2025-01-13 01:17:00.252928,2025-01-17 01:41:00.252928] 
#>                                                      22 
classIntervals(x_POSIXt, n=5, style="quantile")
#> style: quantile
#>   one of 3,764,376 possible partitions of this variable into 5 classes
#> [2024-12-27 23:41:00.252928,2024-12-31 10:29:00.252928) 
#>                                                      20 
#> [2024-12-31 10:29:00.252928,2025-01-05 03:41:00.252928) 
#>                                                      20 
#> [2025-01-05 03:41:00.252928,2025-01-09 03:05:00.252928) 
#>                                                      20 
#> [2025-01-09 03:05:00.252928,2025-01-13 05:17:00.252928) 
#>                                                      20 
#> [2025-01-13 05:17:00.252928,2025-01-17 01:41:00.252928] 
#>                                                      20 
classIntervals(x_POSIXt, n=5, style="kmeans")
#> style: kmeans
#>   one of 3,764,376 possible partitions of this variable into 5 classes
#> [2024-12-27 23:41:00.252928,2024-12-31 02:41:00.252928) 
#>                                                      19 
#> [2024-12-31 02:41:00.252928,2025-01-04 01:41:00.252928) 
#>                                                      19 
#> [2025-01-04 01:41:00.252928,2025-01-08 10:11:00.252928) 
#>                                                      17 
#> [2025-01-08 10:11:00.252928,2025-01-12 14:11:00.252928) 
#>                                                      23 
#> [2025-01-12 14:11:00.252928,2025-01-17 01:41:00.252928] 
#>                                                      22 
classIntervals(x_POSIXt, n=5, style="fisher")
#> style: fisher
#>   one of 3,764,376 possible partitions of this variable into 5 classes
#> [2024-12-27 23:41:00.252928,2024-12-31 02:41:00.252928) 
#>                                                      19 
#> [2024-12-31 02:41:00.252928,2025-01-04 01:41:00.252928) 
#>                                                      19 
#> [2025-01-04 01:41:00.252928,2025-01-08 10:11:00.252928) 
#>                                                      17 
#> [2025-01-08 10:11:00.252928,2025-01-12 14:11:00.252928) 
#>                                                      23 
#> [2025-01-12 14:11:00.252928,2025-01-17 01:41:00.252928] 
#>                                                      22 
classIntervals(x_POSIXt, style="headtails")
#> style: headtails
#>   one of 99 possible partitions of this variable into 2 classes
#> [2024-12-27 23:41:00.252928,2025-01-06 18:05:00.252928) 
#>                                                      50 
#> [2025-01-06 18:05:00.252928,2025-01-17 01:41:00.252928] 
#>                                                      50 
classIntervals(x_POSIXt, style="maximum")
#> style: maximum
#>   one of 14,887,031,544 possible partitions of this variable into 8 classes
#> [2024-12-27 23:41:00.252928,2025-01-03 08:41:00.252928) 
#>                                                      37 
#> [2025-01-03 08:41:00.252928,2025-01-04 01:41:00.252928) 
#>                                                       1 
#> [2025-01-04 01:41:00.252928,2025-01-04 18:11:00.252928) 
#>                                                       1 
#> [2025-01-04 18:11:00.252928,2025-01-07 02:41:00.252928) 
#>                                                      12 
#> [2025-01-07 02:41:00.252928,2025-01-10 09:41:00.252928) 
#>                                                      16 
#> [2025-01-10 09:41:00.252928,2025-01-12 14:11:00.252928) 
#>                                                      11 
#> [2025-01-12 14:11:00.252928,2025-01-15 22:11:00.252928) 
#>                                                      16 
#> [2025-01-15 22:11:00.252928,2025-01-17 01:41:00.252928] 
#>                                                       6 
classIntervals(x_POSIXt, style="box")
#> style: box
#>   one of 71,523,144 possible partitions of this variable into 6 classes
#>                       [-Inf,2024-12-17 03:03:30.252928) 
#>                                                       0 
#> [2024-12-17 03:03:30.252928,2025-01-01 10:11:00.252928) 
#>                                                      25 
#> [2025-01-01 10:11:00.252928,2025-01-06 17:41:00.252928) 
#>                                                      25 
#> [2025-01-06 17:41:00.252928,2025-01-11 14:56:00.252928) 
#>                                                      25 
#> [2025-01-11 14:56:00.252928,2025-01-26 22:03:30.252928) 
#>                                                      25 
#>                        [2025-01-26 22:03:30.252928,Inf] 
#>                                                       0 
# }
# see vignette for further details
# \dontrun{
# Head Tails method is suitable for right-sided heavy-tailed distributions
set.seed(1234)
# Heavy tails-----
# Pareto distributions a=7 b=14
paretodist <- 7 / (1 - runif(100)) ^ (1 / 14)
# Lognorm
lognormdist <- rlnorm(100)
# Weibull
weibulldist <- rweibull(100, 1, scale = 5)

pal1 <- c("wheat1", "red3")
opar <- par(mfrow = c(1, 3))
plot(classIntervals(paretodist, style = "headtails"),
     pal = pal1,
     main = "HeadTails: Pareto Dist.")
plot(classIntervals(lognormdist, style = "headtails"),
     pal = pal1,
     main = "HeadTails: LogNormal Dist.")
plot(classIntervals(weibulldist, style = "headtails"),
     pal = pal1,
     main = "HeadTails: Weibull Dist.")

plot(classIntervals(paretodist, n = 5, style = "fisher"),
     pal = pal1,
     main = "Fisher: Pareto Dist.")
plot(classIntervals(lognormdist, n = 7, style = "fisher"),
     pal = pal1,
     main = "Fisher: LogNormal Dist.")
plot(classIntervals(weibulldist, n= 4, style = "fisher"),
     pal = pal1,
     main = "Fisher: Weibull Dist.")

par(opar)


#Non heavy tails, thr should be increased-----

#Normal dist
normdist <- rnorm(100)
#Left-tailed truncated Normal distr
leftnorm <- rep(normdist[normdist < mean(normdist)], 2)
# Uniform distribution
unifdist <- runif(100)
opar <- par(mfrow = c(2, 3))
plot(classIntervals(normdist, style = "headtails"),
     pal = pal1,
     main = "Normal Dist.")
plot(classIntervals(leftnorm, style = "headtails"),
     pal = pal1,
     main = "Truncated Normal Dist.")
plot(classIntervals(unifdist, style = "headtails"),
     pal = pal1,
     main = "Uniform Dist.")
# thr should be increased for non heavy-tailed distributions
plot(
  classIntervals(normdist, style = "headtails", thr = .6),
  pal = pal1,
  main = "Normal Dist. thr = .6"
)
plot(
  classIntervals(leftnorm, style = "headtails", thr = .6),
  pal = pal1,
  main = "Truncated Normal Distribution thr = .6"
)
plot(
  classIntervals(unifdist, style = "headtails", thr = .6),
  pal = pal1,
  main = "Uniform Distribution thr = .6"
)

par(opar)
# }