Neil Pettinger's Avatar

Neil Pettinger

@kurtstat.bsky.social

Healthcare data analyst. Aspiring Munroist.

405 Followers  |  777 Following  |  903 Posts  |  Joined: 08.11.2024  |  1.7866

Latest posts by kurtstat.bsky.social on Bluesky

Headline: "Scientists discover emperor penguin colony in Antarctica using satellite images"

Headline: "Scientists discover emperor penguin colony in Antarctica using satellite images"

Yesterday it was cows using tools, today its penguins using satellite imagery.

20.01.2026 18:44 โ€” ๐Ÿ‘ 9158    ๐Ÿ” 2374    ๐Ÿ’ฌ 145    ๐Ÿ“Œ 203

Brexit in its proper context.

21.01.2026 17:58 โ€” ๐Ÿ‘ 0    ๐Ÿ” 0    ๐Ÿ’ฌ 0    ๐Ÿ“Œ 0
Post image

"All of these three measurement failings โ€“ the wrong doors, the wrong time zone, the wrong connotations โ€“ conspire to prevent the rigorous examination of cause-&-effect relationships in the health & care system thatโ€™s needed"
@kurtstat.bsky.social for #NHS2048
www.enlighten.scot/nhs2048/thre...

08.12.2025 08:18 โ€” ๐Ÿ‘ 2    ๐Ÿ” 1    ๐Ÿ’ฌ 0    ๐Ÿ“Œ 0

Well, it's a little clearer now why billionaires are so invested in technology that produces better written emails.

12.11.2025 22:23 โ€” ๐Ÿ‘ 14326    ๐Ÿ” 3146    ๐Ÿ’ฌ 69    ๐Ÿ“Œ 101

Guys this is the ONE client you really need to double check

30.10.2025 17:36 โ€” ๐Ÿ‘ 122    ๐Ÿ” 12    ๐Ÿ’ฌ 5    ๐Ÿ“Œ 0
Post image

My AMU 'heaviness' metric came about after I tried showing AMU lengths of stay so far (ALoSSF) as horizontal timelines on top of each other. On the left: a snapshot that captured 60 patients with an ALoSSF of 24.6 hours. On the right: 58 patients with an ALoSSF of 37.8 hours.
#rstats #ggplot2

23.10.2025 13:03 โ€” ๐Ÿ‘ 5    ๐Ÿ” 0    ๐Ÿ’ฌ 0    ๐Ÿ“Œ 0
Stuart Hall's encoding/decoding model (adapted from his 1973 essay) made to look a bit smarter with blue and pink text boxes.

Stuart Hall's encoding/decoding model (adapted from his 1973 essay) made to look a bit smarter with blue and pink text boxes.

I want to have a go at adapting Stuart Hall's encoding/decoding model so that it works for how healthcare data messages are communicated. I think the key to this is how I flesh out the meaning structures on each side of the diagram.

23.10.2025 06:18 โ€” ๐Ÿ‘ 4    ๐Ÿ” 0    ๐Ÿ’ฌ 0    ๐Ÿ“Œ 0
A scatterplot showing the relationship between Acute Medical Unit (AMU) 'heaviness' (measured along the horizontal axis) and Emergency Department (ED) length of stay (measured up the vertical axis). 366 overlapping grey dots in the chart represent the 366 days of the year. A "green zone of flow" has been (arbitrarily) drawn in the bottom left of the chart.
NOTE: AMU 'heaviness' is calculated as each day's average number of occupied beds multiplied by each day's average length of stay so far.

A scatterplot showing the relationship between Acute Medical Unit (AMU) 'heaviness' (measured along the horizontal axis) and Emergency Department (ED) length of stay (measured up the vertical axis). 366 overlapping grey dots in the chart represent the 366 days of the year. A "green zone of flow" has been (arbitrarily) drawn in the bottom left of the chart. NOTE: AMU 'heaviness' is calculated as each day's average number of occupied beds multiplied by each day's average length of stay so far.

I'm hoping that - eventually - *everyone* involved in acute hospital patient flow will be talking about AMU 'heaviness'! (Meanwhile I can't work out if this chart is a volcano metaphor or a Pandora's Box metaphor...)
#rstats #ggplot2

22.10.2025 14:44 โ€” ๐Ÿ‘ 4    ๐Ÿ” 0    ๐Ÿ’ฌ 0    ๐Ÿ“Œ 0

Good question! I need to try and get hold of data from different types of AMUs to see if there's a difference!
(I've recently embarked on a similar-ish quest following advice from @mancunianmedic.bsky.social about how medical specialties are organized differently from hospital to hospital...)

21.10.2025 16:32 โ€” ๐Ÿ‘ 1    ๐Ÿ” 0    ๐Ÿ’ฌ 1    ๐Ÿ“Œ 0

The important thing would be to try and get the clinicians themselves (with a bit of help from the analysts!) to define the dimensions of the grey zone. "Ought-to-be" zones are probably better calculated 'bottom-up' rather than 'top-down', I think.

21.10.2025 15:44 โ€” ๐Ÿ‘ 2    ๐Ÿ” 0    ๐Ÿ’ฌ 1    ๐Ÿ“Œ 0
A scatterplot showing the relationship between Acute Medical Unit (AMU) 'heaviness' (measured along the horizontal axis) and Emergency Department (ED) length of stay (measured up the vertical axis). Two red dots in the chart represent the 'worst' day of the year (23 Jan 2024, when four-hour compliance was 40%) and the 'best' day of the year (23 Jun 2023, when four-hour compliance was 79%). A "grey zone of flow" has been (arbitrarily) drawn in the bottom right of the chart.

A scatterplot showing the relationship between Acute Medical Unit (AMU) 'heaviness' (measured along the horizontal axis) and Emergency Department (ED) length of stay (measured up the vertical axis). Two red dots in the chart represent the 'worst' day of the year (23 Jan 2024, when four-hour compliance was 40%) and the 'best' day of the year (23 Jun 2023, when four-hour compliance was 79%). A "grey zone of flow" has been (arbitrarily) drawn in the bottom right of the chart.

Acute Medical Unit (AMU) 'heaviness' scores are calculated by multiplying each day's AMU mean lengths of stay by the same day's AMU fullness snapshots. The scores are closely correlated with Emergency Department (ED) performance, so I thought a scatterplot would be the way to go.
#rstats #ggplot2

21.10.2025 15:44 โ€” ๐Ÿ‘ 5    ๐Ÿ” 1    ๐Ÿ’ฌ 1    ๐Ÿ“Œ 0
A scatterplot showing the relationship between occupied beds (along the horizontal axis) and no. of "wrong" wards used (up the vertical axis). There are 366 blue dots on the graph, each dot representing a midday snapshot in 2023-24. As occupied beds increase, so do the number of wrong wards.

A scatterplot showing the relationship between occupied beds (along the horizontal axis) and no. of "wrong" wards used (up the vertical axis). There are 366 blue dots on the graph, each dot representing a midday snapshot in 2023-24. As occupied beds increase, so do the number of wrong wards.

Here's the graph after the correction. I'm trying out different ways of showing how a specialty's inpatients get more displaced as its workload increases. As @em-dr-jacklin.bsky.social might put it: the fuller the specialty, the greater the "wrongward-ness".
#rstats #ggplot2

21.10.2025 12:17 โ€” ๐Ÿ‘ 7    ๐Ÿ” 1    ๐Ÿ’ฌ 0    ๐Ÿ“Œ 0
ggplot(data = df_resp_midday) +
  aes(x = total_fullness,
      y = no_of_wrong_wards) +
  gg_point()

ggplot(data = df_resp_midday) + aes(x = total_fullness, y = no_of_wrong_wards) + gg_point()

Error in gg_point() : could not find function "gg_point".

Please tell me I'm not the only person who's made this mistake!
#rstats #ggplot2

21.10.2025 11:39 โ€” ๐Ÿ‘ 5    ๐Ÿ” 0    ๐Ÿ’ฌ 1    ๐Ÿ“Œ 0
A white poodle leans out an suv with neon light streaks flashing across the surface of the car

A white poodle leans out an suv with neon light streaks flashing across the surface of the car

Tried to sneak a photo of a cute doggo and accidentally had long exposure on and I believe I have created manโ€™s greatest expression of art

21.10.2025 02:14 โ€” ๐Ÿ‘ 16640    ๐Ÿ” 2306    ๐Ÿ’ฌ 281    ๐Ÿ“Œ 136

Has anyone done 'loathed to say' yet?

20.10.2025 18:00 โ€” ๐Ÿ‘ 0    ๐Ÿ” 0    ๐Ÿ’ฌ 0    ๐Ÿ“Œ 0

Speak for yourself. It's a 'doggy-dog world' for me from now on!

20.10.2025 17:56 โ€” ๐Ÿ‘ 0    ๐Ÿ” 0    ๐Ÿ’ฌ 0    ๐Ÿ“Œ 0
A diagram that is basically a square. The horizontal axis is labelled Reason > judgement. The vertical axis is labelled Emotion > action. Within the square, a path is suggested first up the vertical axis (by using the visceral layer of design), then across the horizontal axis (using the behavioural layer of design), and finally up to the top of the vertical axis (using the reflective layer of design). The diagram is titled "Reason leads to judgement; emotion leads to action."

A diagram that is basically a square. The horizontal axis is labelled Reason > judgement. The vertical axis is labelled Emotion > action. Within the square, a path is suggested first up the vertical axis (by using the visceral layer of design), then across the horizontal axis (using the behavioural layer of design), and finally up to the top of the vertical axis (using the reflective layer of design). The diagram is titled "Reason leads to judgement; emotion leads to action."

I'm working on a diagram that shows how we might incorporate emotion into data visualizations. I'm trying to mash together some ideas from Gavin McMahon's new book (www.story-business.com) with Don Norman's three layers of design (www.interaction-design.org/literature/a...).

20.10.2025 16:09 โ€” ๐Ÿ‘ 1    ๐Ÿ” 0    ๐Ÿ’ฌ 0    ๐Ÿ“Œ 0

The result is that hospital beds are managed โ€œreactivelyโ€ in the permanent-crisis here-and-now: a bed manager sees an empty bed, so they immediately fill it. It would be better if clinicians could see and discuss their flow metrics, to give them at least a chance of managing beds "proactively".
6/6

20.10.2025 13:38 โ€” ๐Ÿ‘ 3    ๐Ÿ” 0    ๐Ÿ’ฌ 2    ๐Ÿ“Œ 0

Preconceptions apart, the real problem is that we hardly ever report average bed occupancy to the clinicians whose patients occupy the beds. Most clinicians โ€“ and most managersโ€“ are not given the numbers that retrospectively describe demand and capacity in a general hospital.
5/6

20.10.2025 13:38 โ€” ๐Ÿ‘ 1    ๐Ÿ” 0    ๐Ÿ’ฌ 1    ๐Ÿ“Œ 0

There are some โ€œNHS-specificโ€ preconceptions, too. For example, thereโ€™s an โ€œauraโ€ surrounding โ€œ85%: the cure for all our illsโ€. In fact, the โ€œrightโ€ percentage will be different for each part of the hospital. Some wards/specialties can work optimally at 95%; others need it to be lower than 60%.
4/6

20.10.2025 13:38 โ€” ๐Ÿ‘ 0    ๐Ÿ” 0    ๐Ÿ’ฌ 1    ๐Ÿ“Œ 0
Post image

Most of us bring โ€œgenericโ€ preconceptions to percentages. We think higher numbers are better. Like the anecdote about the optimist who sees a glass half-full, a pessimist who sees a glass half-empty and a hospital manager who sees a glass twice as big as it needs to be.
3/6

20.10.2025 13:38 โ€” ๐Ÿ‘ 1    ๐Ÿ” 0    ๐Ÿ’ฌ 1    ๐Ÿ“Œ 0
Post image

Average percentage bed occupancy is the conventional way we measure bed usage in the NHS. (Hereโ€™s a visual example: 8,784 consecutive hour-by-hour snapshots of the number of beds occupied in a 46-bed hospital ward.) But the NHS has problems with bed occupancy as a metric.
2/6

20.10.2025 13:38 โ€” ๐Ÿ‘ 1    ๐Ÿ” 0    ๐Ÿ’ฌ 1    ๐Ÿ“Œ 0
Preview
On the edge My week in the NHS

This is a fascinating - and excellent - post by @samfr.bsky.social on his recent experience of being an NHS hospital patient. My heart jumped when I saw bed occupancy mentioned in the article: I have โ€œviewsโ€ on bed occupancy, so I thought Iโ€™d say something about it.
substack.com/inbox/post/1...
1/6

20.10.2025 13:38 โ€” ๐Ÿ‘ 14    ๐Ÿ” 4    ๐Ÿ’ฌ 1    ๐Ÿ“Œ 0

Yes, perhaps we do need to be careful. One of my objectives here is to find a way of engaging clinicians in the specialties by giving them an indicator of dysfunction "of their own".

20.10.2025 12:49 โ€” ๐Ÿ‘ 1    ๐Ÿ” 0    ๐Ÿ’ฌ 0    ๐Ÿ“Œ 0

Thanks for this - I like this WrongWardHours idea a lot. Moving away from snapshots and building in a bit of history (including ED history) to the indicator. This might also allow me to add "number of non-clinical ward moves" into the mix...

20.10.2025 12:47 โ€” ๐Ÿ‘ 1    ๐Ÿ” 0    ๐Ÿ’ฌ 0    ๐Ÿ“Œ 0
Post image

As it stands, it's a snapshot metric. I tried doing it for one specialty (Respiratory Medicine) based on hour-by-hour snapshots from two years ago. I posted it on X; can't remember if I posted it here. So here it is - in all its dual-vertical-axis glory...

20.10.2025 12:43 โ€” ๐Ÿ‘ 1    ๐Ÿ” 0    ๐Ÿ’ฌ 0    ๐Ÿ“Œ 0

Man walking into the Post Office earlier: You look like a person who knows about things.
Person behind the til: I do? Well I know about some things I suppose.
Man (showing him his phone): Good. What do I press to answer this thing?

17.10.2025 20:59 โ€” ๐Ÿ‘ 42    ๐Ÿ” 3    ๐Ÿ’ฌ 5    ๐Ÿ“Œ 0

...and called the package {abracadabra}...

16.10.2025 16:28 โ€” ๐Ÿ‘ 1    ๐Ÿ” 0    ๐Ÿ’ฌ 0    ๐Ÿ“Œ 0
Post image

I still think of pivot_wider() as magic, basically.

16.10.2025 16:03 โ€” ๐Ÿ‘ 0    ๐Ÿ” 0    ๐Ÿ’ฌ 1    ๐Ÿ“Œ 0

@kurtstat is following 20 prominent accounts