-
Notifications
You must be signed in to change notification settings - Fork 0
Open questions
Unresolved decisions that affect numbers people report. Each is recorded here rather than settled silently.
The 0.3-10 Hz band-pass. The invariant is about 5.0 mm/s in mean speed, or 4.42 in median, and the seven-dataset spread is 2.2 per cent. The deciding argument was not the tighter number but that the low-pass degenerates at low sampling rates: on 20 Hz data its cutoff sits on Nyquist and it removes 0.0000 per cent of the energy, so the origin study of the whole corpus was being compared unfiltered against filtered championship data. The original analysis follows.
Two conventions, differing by 15.5 per cent on identical optical data:
- 0.3–10 Hz band-pass — usable on every sensor; across seven independent optical datasets the median head speed converges to 4.42 mm/s with a 3.5 per cent spread.
- 10 Hz low-pass, no lower edge — the convention behind most published figures; the same datasets spread 5.9 per cent.
The band-pass gives the tighter invariant and is the only one an accelerometer can confirm. The low-pass is what is in print. This is an editorial decision about published work, not a technical one.
Decided: the modules move here and MGT depends on this package. Done in
fourMs/MGT-python#362, which is open for
review. MGT's 53 tests are vendored under tests/mgt/ and pass unmodified, so the guarantee
that its numbers did not change keeps holding.
One piece is deliberately unresolved. axial_rayleigh as absorbed from MGT returns R = 0.9985
where circular.rayleigh_axial returns 0.9222 for the same bimodal input. Only the latter
matches the textbook resultant length of the doubled angles, so MGT's looks wrong — but it is
the one under test, and changing it would change published numbers. Needs its own fix.
The original analysis follows.
MGT's unreleased main branch already contains band_limited_qom, accel_to_speed,
read_qtm_tsv, cop_sway_metrics and respiration_rate, credited in their docstrings to the
same source study as this package. They are absent from the released 1.6.9.
The implementations disagree. On one 200 Hz optical recording:
| mean speed | |
|---|---|
MGT band_limited_qom, 0.3–15 Hz default |
5.675 mm/s |
MGT band_limited_qom, forced to 0.3–10 Hz |
5.594 mm/s |
micromotion.qom, 0.3–10 Hz |
5.455 mm/s |
MGT's default band reaches to 15 Hz rather than 10, it differentiates with a two-point difference, and it does not band-limit again after differentiating. Three possible resolutions:
- Publish MGT's pending release and have
micromotiondepend on it. Costs a 282 MB dependency including opencv for anyone analysing accelerometer data. - Extract those modules out of MGT into
micromotionand have MGT depend on this package instead. Matches the existing MGT → ambiscape arrow, where the heavy package depends on the light one and never the reverse. - Scope
micromotionto what MGT genuinely lacks — the readers, the resampling rules, the alignment module, circular statistics.
Option 2 fits the stated architecture. Until it is decided, state which package produced any number you report.
Not published. This is load-bearing rather than administrative: deposited research datasets have to run standalone for someone who downloads only that record, so they cannot import a package that is not installable. Their own copies of these functions therefore stay, verified numerically against this package rather than replaced by it.
group.coincidence_test returns two summaries. The published one, score, is the mean of
-log10(p) across every sample. It barely separates coordinated groups from independent ones in
exactly the case these recordings present — a few shared moments in a long recording.
Measured on twenty simulated people whose event trains were independent apart from a planted number of shared moments:
| shared moments | score |
frac_significant |
|---|---|---|
| 3 | 0.317 | 0.012 |
| 10 | 0.295 | 0.034 |
| 30 | 0.323 | 0.100 |
| 60 | 0.465 | 0.200 |
| none (independent) | 0.337 | 0.004 |
The three-moment case scores below complete independence, because a mean over three thousand
samples is dominated by the samples where nothing happened. frac_significant orders correctly
throughout. Both are returned and the docstring says which to read, but if the score is used in
published work it is worth deciding whether to keep reporting it.