|
7 | 7 | | **Measures of Central Tendency** | | | | | | |
8 | 8 | | Circular Mean | `circ_mean` | `mean(alpha)` | `circ_mean(alpha)` | `circ.mean` | `mean.circular` | |
9 | 9 | | Circular Mean CI | `circ_mean_ci` | `mean(alpha, ci=95)` | `circ_confmean` | - | `mle.vonmises.bootstrap.ci` | |
10 | | -| Circular Median | `circ_median` | `median` | `circ_median` | - | `median.circular`/`medianHL.circular` | |
| 10 | +| Circular Median (Fisher/Mardia) | `circ_median` (method=`"deviation"`/`"count"`) [^median-grouped] | `median` | `circ_median` | - | `median.circular` | |
| 11 | +| Hodges-Lehmann Median | `circ_median` (method=`"HL1"`/`"HL2"`/`"HL3"`) | - | - | - | `medianHL.circular`[^medianHL-broken] | |
11 | 12 | | Circular Median CI | `circ_median_ci` | - | - | - | - | |
12 | 13 | | Circular Quantile | `circ_quantile` | - | - | - | `quantile.circular` | |
13 | 14 | | **Measures of Spread & Dispersion** | | | | | | |
|
17 | 18 | | Circular Variance | `circ_var` | `var` | `circ_var` | `circ.disp` | `var.circular` | |
18 | 19 | | Circular Standard Deviation | `circ_std` | `std` | `circ_std` | - | `sd.circular` | |
19 | 20 | | Circular Dispersion | `circ_dispersion` | - | - | - | - | |
| 21 | +| Circular Range | `circ_range` | - | - | `circ.range` | `range.circular` | |
| 22 | +| Concentration Parameter (κ) | `circ_kappa` | `kappa` | `circ_kappa` | `est.kappa` | `A1inv` | |
20 | 23 | | **Higher-Order Statistics** | | | | | | |
21 | 24 | | Circular Moment | `circ_moment` | `moment` | `circ_moment` | `tri.moment` | `trigonometric.moment` | |
22 | 25 | | Circular Skewness | `circ_skewness` | `skewness` | `circ_skewness` | - | - | |
23 | 26 | | Circular Kurtosis | `circ_kurtosis` | `kurtoisis` | `circ_kurtosis` | - | - | |
24 | 27 | | **Distance & Pairwise Comparisons** | | | | | | |
25 | | -| Mean deviation | `circ_mean_deviation` | - | - | - | `meandeviation` | |
| 28 | +| Mean deviation [^mean-dev] | `circ_mean_deviation` | - | - | - | `meandeviation` | |
26 | 29 | | Circular Distance | `circ_dist` | `cdist` | `circ_dist` | - | - | |
27 | 30 | | Pairwise Circular Distance | `circ_pairdist` | `pairwise_cdiff` | `circ_dist2` | - | `dist.circular` | |
28 | 31 |
|
|
67 | 70 |
|
68 | 71 | | Feature | H0 | PyCircStat2 | PyCircStat | CircStat (MATLAB) | CircStats (R) | circular (R) | |
69 | 72 | |---------------------|------------|--------------------|--------------|-------------------|---------------|--------------------| |
70 | | -| Kuiper’s Test | $\rho = 0$ | `circ_kuiper_test` | `kupier` | `circ_kuipertest` | `kuiper` | `kuiper.test` | |
| 73 | +| Kuiper’s Test | $\rho = 0$ | `kuiper_test` | `kuiper` | `circ_kuipertest` | `kuiper` | `kuiper.test` | |
71 | 74 | | Rao’s Spacing Test | $\rho = 0$ | `rao_spacing_test` | `raospacing` | `circ_raotest` | `rao.spacing` | `rao.spacing.test` | |
72 | 75 | | Watson's Test | $\rho = 0$ | `watson_test` | - | - | `watson` | `watson.test` | |
73 | 76 | | Circular Range Test | $\rho = 0$ | `circ_range_test` | - | - | `circ_range` | `range.circular` | |
74 | 77 |
|
75 | 78 |
|
76 | 79 | ### 3. Correlation & Regression |
77 | | -| Feature | PyCircStat2 | PyCircStat | CircStat (MATLAB) | CircStats (R) | circular (R) | |
78 | | -|-------------------------------|----------------|------------|-------------------|---------------|---------------------------| |
79 | | -| Circular-Circular Correlation | `circ_corrcc` | `corrcc` | `circ_corrcc` | `circ.cor` | `cor.circular` | |
80 | | -| Circular-Linear Correlation | `circ_corrcl` | `corrcl` | `circ_corrcl` | - | - | |
81 | | -| Circular-Circular Regression | `CCRegression` | - | - | `circ.reg` | `lm.circular(type="c-c")` | |
82 | | -| Circular-Linear Regression | `CLRegression` | - | - | - | `lm.circular(type="c-l")` | |
| 80 | +| Feature | PyCircStat2 | PyCircStat | CircStat (MATLAB) | CircStats (R) | circular (R) | |
| 81 | +|-----------------------------------------------|----------------|------------|-------------------|---------------|---------------------------| |
| 82 | +| Circular-Circular Correlation | `circ_corrcc` | `corrcc` | `circ_corrcc` | `circ.cor` | `cor.circular` | |
| 83 | +| Circular-Linear Correlation | `circ_corrcl` | `corrcl` | `circ_corrcl` | - | - | |
| 84 | +| Circular-Circular Regression | `CCRegression` | - | - | `circ.reg` | `lm.circular(type="c-c")` | |
| 85 | +| Circular-Linear Regression [^cl-resp] | `CLRegression` | - | - | - | `lm.circular(type="c-l")` | |
| 86 | +| Linear-Circular Regression (harmonic) [^lc-resp] | `LCRegression` | - | - | - | - | |
83 | 87 |
|
84 | 88 |
|
85 | 89 |
|
@@ -165,12 +169,26 @@ All circular distributions assume angles are on ``[0, 2π)``. Inputs are automat |
165 | 169 | | | PPF | `wrapstable.ppf` | - | - | - | - | |
166 | 170 | | | RVS | `wrapstable.rvs` | - | - | `rwrpstab` | - | |
167 | 171 | | | Fit | `wrapstable.fit` | - | - | - | - | |
168 | | -| Asymmetric Trangular | PDF | - | - | - | - | `dasytriangular` | |
| 172 | +| Asymmetric Triangular | PDF | - | - | - | - | `dasytriangular` | |
169 | 173 | | Projected Normal | PDF | - | - | - | - | `dpnorm` | |
170 | 174 | | | RVS | - | - | - | - | `rpnorm` | |
171 | 175 |
|
172 | 176 | [^uniform]: $\rho=0$ stands for uniform distributed. |
173 | 177 | [^median]: $\theta$ stands for median. |
174 | 178 | [^F]: $F$ stands for distributions. |
175 | | -[^one-way]: Yet anothr one-way ANOVA. |
| 179 | +[^one-way]: Yet another one-way ANOVA. |
176 | 180 | [^two-way]: Two-way ANOVA. |
| 181 | +[^median-grouped]: For grouped data (non-uniform `w`), `circ_median` uses the |
| 182 | + Mardia (1972) interpolation; the `method` argument is ignored on that path. |
| 183 | +[^medianHL-broken]: As of `circular` 0.5-2 (CRAN, 2025-09-24), `medianHL.circular` |
| 184 | + builds the pair-mean array but its C primitive calls the deviation median on |
| 185 | + the original `x` instead of on the pair-means, so HL1/HL2/HL3 all return the |
| 186 | + regular `median.circular` value. See Otieno (2002) §3.4 for the intended |
| 187 | + algorithm. |
| 188 | +[^mean-dev]: Different signatures: pycircstat2's `circ_mean_deviation(α, β)` |
| 189 | + evaluates Fisher (1993) eq. 2.32 — `d(β) = π − (1/n)Σ|π−|αᵢ−β||` — at every |
| 190 | + reference angle `β` (vector output). R's `meandeviation(x)` is the scalar |
| 191 | + `d(median(x))`. Same formula, different evaluation points. |
| 192 | +[^cl-resp]: Circular response, linear predictor. |
| 193 | +[^lc-resp]: Linear response, circular predictor (harmonic regression à la |
| 194 | + Pewsey et al. 2014, §8.4). |
0 commit comments