Jem Arnold

Jem Arnold

@jemarnold.bsky.social

PhD candidate & physiotherapist | 🩸Iliac artery endofibrosis / FLIA | Endurance testing & NIRS. Treat declarative statements as questions?

667 followers382 following466 posts

Pinned

A visual analogy for why small changes in #NIRS probe position can return considerably different signals - chaotic scattering & absorption within tissue Mostly it averages out, but differential pathlength factor DPF is fundamentally unstable, while CW-NIRS assumes it's fixed (1/2)

Muscle oxidative capacity analysis with #mnirs is monoexponential by consensus. But are there secondary drift kinetics hiding in the data and biasing results?🤔 No idea, but could 'slow-component' drift be related to hyperaemia + metabolic rate adjustments as seen here? Thoughts? #rstats

Reallly, I just wanted an excuse to display the mnirs kinetics analysis capabilities I'm working on, and raise some wild speculation while I'm at it 😊 Need to challenge these models on more data when the app is rolled out (soon!)

Jem Arnold reposted

New study out on muscle oxygen saturation (SmO₂) breakpoints using NIRS 🎉 First authored by @igfjarillo.bsky.social - I contributed via the statistical analyses. While we present the findings elsewhere, here I focus on what’s new about our approach and why it matters ⬇️🧵 1/8

Jem Arnold reposted

TIL you can print() intermediate objects in the middle of an #rstats pipeline🤯 ``` df |> print() |> process() |> print() |> plot() ``` Just added `return(invisible(x))` to my own print.generics. Very helpful to print a formatted results table and plot at the same time!

Jem Arnold reposted

Replying to @solomonkurz.bsky.social

But on the upside, the only way I was able to zero in on the mistakes was because the authors shared code. Without that, I would have just been surprised and confused. Share your code! It makes the world a better place.

{mnirs} R package for reading, processing, analysing muscle near-infrared spectroscopy data🦵🔦 updated to 0.7.0 Mostly internal performance improvements getting ready for `mnirs::analyse_kinetics()` soon! github.com/jemarnold/mn... Here are the key changes: 1/5🧵🔗👇 #rstats #nirs #muscleoxygenation

View full thread

4/5 A minor ⚠️ breaking change to `shift_mnirs()`, `replace_mnirs()`, and `extract_intervals()`: `group_channels` arg handles channels `group_intervals` arg handles intervals for `extract_intervals()` Options are “distinct”, “ensemble”, or a custom group list

{mnirs} R package for reading, processing, analysing muscle near-infrared spectroscopy data🦵🔦 updated to 0.7.0 Mostly internal performance improvements getting ready for `mnirs::analyse_kinetics()` soon! github.com/jemarnold/mn... Here are the key changes: 1/5🧵🔗👇 #rstats #nirs #muscleoxygenation

2/5 Core processing functions now accept a list of data frames or grouped dfs with `dplyr::group_by()`: You can `filter_mnirs()` over a list of dfs from multiple `read_mnirs()` files Or `extract_intervals()` from a longer session and `rescale_mnirs()` each independently

3/5 {mnirs} 0.7.0 can now process each `nirs_channel` with independent settings: You can `replace_mnirs()` invalid values with different criteria each for “smo2” and “thb” Or `filter_mnirs()` one channel with “moving average” and another with “butterworth”, side by side

Another call for input! 📢 CLINICIANS, COACHES, and ATHLETES managing recovery from surgery for flow limitations in the iliac artery FLIA / endofibrosis We'd love to hear your experiences to help improve care for athletes. Please contact email below 👇 #cycling #sportsmedicine #sportmedicine

#rstats how are we finding GPT-5.6 vs Fable/Opus for working in R? I don't like the R code it's been giving me so far, but I've spent more time with Claude so maybe I just need to set up better instructions? 🤔

How long does it take for blood to make a full round-trip around the entire body during exercise? 🫁🫀🔁🦵 Only 10-sec! That’s way faster than I intuitively would have expected But we’re just reproducing what’s been known for the last century👇 #science #medicine #rstats #datavis

This paper found similar ~11sec mean recirculation time in females & males treadmill walking at 3 mph (12:25/km) @ 5% grade So already at walking intensity, or cycling near V̇O₂max, bulk blood flow velocity is nearly the same?😮 Chapman & Fraser 1954 doi.org/10.1161/01.C...

This is how we can resample breath-by-breath metabolic data to 1 Hz using `mnirs::resample_mnirs()` The secret is {mnirs} works on many time series data, not just NIRS 🤫 #rstats #nirs #cpet

For example, we can also use it to filter BxB data by either time- or breath-averaging, specifying ONE OF either `width` (sample/breath-averaging) or `span` (time-averaging

Jem Arnold reposted

Dear stats people, I'm looking for textbooks or other resources on test design and analysis to establish validity & reliability. Any recommendations & repost appreciated. PS: we have to respond to a reviewer and I want to make sure we're doing the right thing. #rstats #stats #science #AcademicSky

And now I think I need to be accounting for nesting, expecting biological variation, rather than strict repeated measures. Which would reduce the limits of agreement further 🤔. I will have to clarify which is more appropriate Smooth level has greater effect on nested than RM data.

Woops! Found a substantial memory allocation issue in my code while trying to process a couple 300k+ row data frames. Think I've got it sorted now. Probably need to push a hotfix for this to CRAN 😬

View full thread

Quick update {mnirs} 🦵🔦 0.6.3 pushed to CRAN Main improvement with plotting lists of data frames as facets, primarily for extracted intervals Here is how you can extract intervals by time values from data processed with #mnirs, for subsequent analysis (kinetics analysis coming soon🤞) #rstats #nirs

Anyone else still use autohotkey shortcuts for writing special symbols? Or do the chatbots do it these days?🤔 I just handed down my old script to my grad student colleagues Works system wide, not just in Word! ΔV̇O₂ ≈ 5 ± 2 (mL·kg⁻¹·min⁻¹) 13°C β₁ ≤ α ≠ 𝜏 (†) ¯\_(ツ)_/¯ #academicsky #rstats

Jem Arnold reposted

Replying to @captain7bag.bsky.social

The data speak for themselves but their voices can be soft and sly, especially non-experimental data. That's why our methods have to be cleverer, to find slim signals amidst noisy dross.

What looks like noise at a wide timescale in this cycling interval (recorded at 10Hz w/ @artinis.bsky.social) is actually meaningful intra-cadence changes in Oxy[haeme] Zooming in on the occlusion, we see distortion caused by over-parameterising the Butterworth filter order

I want to make it easier to visually validate our choice of digital filter parameters Filter parameters depend on the signal we're trying to observe and on our data characteristics (e.g. sample rate and raw signal-to-noise ratio) More to come! Tell me when you find new bugs!

Garmin sounds serious about #muscleoxygenation #mnirs. "Muscle Battery" gives me high hopes and cautious expectations 😄 What do you think?🤔 Very interested to see how they solve the hardware distribution problem, and how the model learns from repeated measurements

the5krunner.comGarmin Leaks Trademarks - Two New Products highly LikelyGarmin has trademarked Muscle Battery, confirming SmO2 muscle oxygen hardware is coming, and CIRQA, its Whoop competitor. Full analysis of what the filings reveal about both products.

I don't use "body battery" myself, but I appreciate it's a first step into training load/stress monitoring. "Muscle battery" will likely be similar More advanced athletes will of course interpret it within greater context gained from experience