Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 20 additions & 2 deletions docs/docs/feature-checklist.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@
|-----------------------------|-------------------------------------|---------------------|------------|-------------------|---------------|-----------------|
| **Mean Direction** | | | | | | |
| Rayleigh Test | $\rho=0$ [^uniform] | `rayleigh_test` | `rayleigh` | `circ_rtest` | `r.test` | `rayleigh.test` |
| V-Test | $\rho=0$ | `V_test` | `vtest` | `circ_vtest` | `v0.test` | - |
| V-Test | $\rho=0$ | `V_test` | `vtest` | `circ_vtest` | `v0.test` | `rayleigh.test(., mu=)`[^vtest-circular] |
| One-sample Test | $\tilde\mu=μ_0$ | `one_sample_test` | `mtest` | `circ_mtest` | - | - |
| Change Point Test | no change point | `change_point_test` | - | - | `change.pt` | `change.point` |
| **Median Direction** | | | | | | |
Expand All @@ -61,6 +61,7 @@
| Equal Kappa Test | $\kappa_1 = \dots = \kappa_n$ | `equal_kappa_test` | - | - | - | `equal.kappa.test` |
| **Distribution Homogeneity** | | | | | | |
| Watson's U2 Test | $F_1 = F_2$ [^F] | `watson_u2_test` | - | - | `watson.two` | `watson.two.test` |
| Two-sample Kuiper Test[^kuiper-2samp] | $F_1 = F_2$ | `kuiper_two_test` | `kuiper` | `circ_kuipertest` | - | - |
| Wallraff Test | $F_1 = F_2$ | `wallraff_test` | - | - | - | `wallraff.test` |
| Wheeler-Watson Test | $F_1 = F_2$ | `wheeler_watson_test` | - | - | - | `watson.wheeler.test` |
| Angular Randomization Test | $F_1 = F_2$ | `angular_randomisation_test` | - | - | - | - |
Expand All @@ -70,9 +71,10 @@

| Feature | H0 | PyCircStat2 | PyCircStat | CircStat (MATLAB) | CircStats (R) | circular (R) |
|---------------------|------------|--------------------|--------------|-------------------|---------------|--------------------|
| Kuiper’s Test | $\rho = 0$ | `kuiper_test` | `kuiper` | `circ_kuipertest` | `kuiper` | `kuiper.test` |
| Kuiper’s Test (one-sample)[^kuiper-1samp] | $\rho = 0$ | `kuiper_test` | - | - | `kuiper` | `kuiper.test` |
| Rao’s Spacing Test | $\rho = 0$ | `rao_spacing_test` | `raospacing` | `circ_raotest` | `rao.spacing` | `rao.spacing.test` |
| Watson's Test | $\rho = 0$ | `watson_test` | - | - | `watson` | `watson.test` |
| Watson's Test (von Mises GoF)[^vm-gof] | von Mises | `watson_test(dist="vonmises")` | - | - | `watson(dist="vm")` | `watson.test(dist="vonmises")` |
| Circular Range Test | $\rho = 0$ | `circ_range_test` | - | - | `circ_range` | `range.circular` |


Expand Down Expand Up @@ -192,3 +194,19 @@ All circular distributions assume angles are on ``[0, 2π)``. Inputs are automat
[^cl-resp]: Circular response, linear predictor.
[^lc-resp]: Linear response, circular predictor (harmonic regression à la
Pewsey et al. 2014, §8.4).
[^vtest-circular]: `circular`'s `rayleigh.test(x, mu = θ)` *is* the V-test: with
`mu` supplied it computes the modified Rayleigh statistic
`z₀ = √(2n)·mean(cos(x − θ))` and `p = 1 − Φ(z₀)`. Only the no-`mu` call is the
ordinary Rayleigh test. (Verified in `circular`'s `rayleigh.test.R`.)
[^kuiper-1samp]: This row is the **one-sample** Kuiper test of uniformity (GoF vs the
circular uniform). PyCircStat's `kuiper` and MATLAB CircStat's `circ_kuipertest`
are **two-sample** tests (`H0: F₁ = F₂`) and belong in *Distribution Homogeneity*
below — they are not one-sample GoF tests, despite sharing the Kuiper name.
[^kuiper-2samp]: The **two-sample** Kuiper test, the circular analogue of the
two-sample Kolmogorov–Smirnov test (`H0: the two samples share a distribution`;
sensitive to differences in location *or* dispersion). Distinct from the
one-sample Kuiper GoF in the goodness-of-fit section.
[^vm-gof]: Goodness-of-fit against a **von Mises** null (not uniformity): estimate κ
by ML, probability-integral-transform the data through the fitted von Mises CDF,
then apply Watson's U². `circular`'s `watson.test(dist = "vonmises")` and CircStats'
`watson(dist = "vm")` both do this; the other packages test uniformity only.
8 changes: 4 additions & 4 deletions examples/B1-Fisher-1993.ipynb

Large diffs are not rendered by default.

112 changes: 66 additions & 46 deletions examples/B2-Zar-2010.ipynb

Large diffs are not rendered by default.

53 changes: 26 additions & 27 deletions examples/B3-Pewsey-2014.ipynb

Large diffs are not rendered by default.

16 changes: 8 additions & 8 deletions examples/T0-utils.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -280,16 +280,16 @@
"name": "stdout",
"output_type": "stream",
"text": [
"Last updated: 2025-11-03 14:20:54CET\n",
"Last updated: 2026-06-08 17:37:24 CEST\n",
"\n",
"Python implementation: CPython\n",
"Python version : 3.12.12\n",
"IPython version : 9.6.0\n",
"Python version : 3.13.11\n",
"IPython version : 9.13.0\n",
"\n",
"numpy : 2.3.4\n",
"pycircstat2: 0.1.15\n",
"numpy : 2.4.4\n",
"pycircstat2: 0.1.16\n",
"\n",
"Watermark: 2.5.0\n",
"Watermark: 2.6.0\n",
"\n"
]
}
Expand All @@ -302,7 +302,7 @@
],
"metadata": {
"kernelspec": {
"display_name": ".venv (3.12.12)",
"display_name": "pycircstat2 (3.13.11)",
"language": "python",
"name": "python3"
},
Expand All @@ -316,7 +316,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.12.12"
"version": "3.13.11"
},
"orig_nbformat": 4
},
Expand Down
18 changes: 9 additions & 9 deletions examples/T1-descriptive-statistics.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -420,7 +420,7 @@
"median 279.0 247.5 245.0 \n",
"mean 280.8 248.7 247.6 \n",
"95% median CI [245. 315.] [229. 277.] [229. 267.] \n",
"95% bootstrap mean CI [263. 306.9] [227.7 272.5] [234.5 263.2] \n",
"95% bootstrap mean CI [254.6 301.8] [225.8 272. ] [233.9 262.2] \n",
"95% large-sample mean CI - - [232.7 262.5] \n"
]
}
Expand Down Expand Up @@ -481,16 +481,16 @@
"name": "stdout",
"output_type": "stream",
"text": [
"Last updated: 2025-11-03 14:19:06CET\n",
"Last updated: 2026-06-08 17:37:34 CEST\n",
"\n",
"Python implementation: CPython\n",
"Python version : 3.12.12\n",
"IPython version : 9.6.0\n",
"Python version : 3.13.11\n",
"IPython version : 9.13.0\n",
"\n",
"numpy : 2.3.4\n",
"pycircstat2: 0.1.15\n",
"numpy : 2.4.4\n",
"pycircstat2: 0.1.16\n",
"\n",
"Watermark: 2.5.0\n",
"Watermark: 2.6.0\n",
"\n"
]
}
Expand All @@ -503,7 +503,7 @@
],
"metadata": {
"kernelspec": {
"display_name": ".venv (3.12.12)",
"display_name": "pycircstat2 (3.13.11)",
"language": "python",
"name": "python3"
},
Expand All @@ -517,7 +517,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.12.12"
"version": "3.13.11"
},
"orig_nbformat": 4
},
Expand Down
Loading
Loading