Francois Keck
@francoiskeck.bsky.social
590 followers 260 following 24 posts
Digital community ecologist. I pursue the laws of nature on my computer. #rstats | #eDNA | #biodiversity | #ecology | and more https://francoiskeck.fr/
Posts Media Videos Starter Packs
Pinned
francoiskeck.bsky.social
Our study ‘The global human impact on biodiversity’ is out in Nature!

Through an unprecedented synthesis (2133 studies!) we show that humans are not only shrinking species numbers—but reshaping entire communities across the planet. 🌍🌐🐟🌿🪲

www.nature.com/articles/s41...
World map showing origin of the data
Reposted by Francois Keck
florianaltermatt.bsky.social
In massive #collaborative #effort, we assembled published & unpublished #fish 🐟 #eDNA 🧬 metabarcoding datasets, covering ~2000 sampling sites/>100 river systems globally. 🐟 🐠 🐡 🌐 🌍

Now results out in 2 #parallel #preprints @biorxiv-ecology.bsky.social

#aquatic #biodiversity #meta-analysis
1/6🧵
francoiskeck.bsky.social
If doughnuts are coming back into fashion, let me bring this one back. #rstats #ShowYourStripes #ShowYourTorus
Climate stripes projected on a 3d torus.
Reposted by Francois Keck
ericcapo12.bsky.social
We just launched the Kickstarter campaign of MicroMates, a card game that brings the hidden world of microorganisms to life in a fun, colorful, and scientifically inspired way. Please back us up and spread the word! micromates.se
Reposted by Francois Keck
florianaltermatt.bsky.social
On my way to #gfoe2025 @gfoesoc.bsky.social annual ecology conference in Würzburg www.gfoe-conference.de 🌳 🐟 🔬 🧪 🦀 🦋 🐝

Very much looking forward to catch up with my German & International #Ecology colleagues, please DM for a meeting/chat!
Reposted by Francois Keck
selina-b.bsky.social
Want to learn to write fast R code—and support Ukraine while doing it?
Join my workshop Thursday, August 28th 6-8 pm CEST!

We’ll cover profiling & benchmarking, and take a tour of fast packages like data.table, collapse, Rcpp and more...

With plenty of code examples & hands-on practice!

#rstats
dariia.bsky.social
❗️Our next workshop will be on August 28th, 6 pm CEST, on Efficient R by @selina-b.bsky.social
Register or sponsor a student by donating to support Ukraine!
Details: bit.ly/3wBeY4S
Please share!
#AcademicSky #EconSky #RStats
Reposted by Francois Keck
zzsylvester.bsky.social
I have been experimenting with different ways of visualizing the curvature of meandering rivers. Plotting curvature in the context of the meanders themselves helps QC-ing the curvature data ⚒️🧪
Thick black line is the centerline of the Beni River in Bolivia. Circles that are tangent to the centerline represent the radius of curvature ag the location. Smaller circles = higher curvatures. In this version the circles are colored according to the curvature; brighter colors = higher curvatures.
francoiskeck.bsky.social
Impressive quantitative synthesis led by Rebecca Oester on the cascading effects of land cover change on aquatic detrital food webs.
Now out in @globalchangebio.bsky.social 💧 🌐

🔗 doi.org/10.1111/gcb....
Graphical abstract of the publication
Reposted by Francois Keck
thebulletin.org
Data visualizations are some of the most powerful tools in a climate science communicator’s playbook. However, designing visuals that are clear to the public and policy makers is not a straightforward task, writes @rachitdubey.bsky.social .

So, what works?
How clear and simple data visualizations bring the climate crisis home
Climate change is a slow-moving disaster. We need graphics that capture both its pace and its impact.
thebulletin.org
Reposted by Francois Keck
tatsuya-amano.bsky.social
Our new paper, led by Andrew Burton-Jones, argues English-only science is unfair, costly and may no longer be necessary. With AI translation tools advancing rapidly, we ask what truly multilingual science could look like and how we might get there.
doi.org/10.3127/ajis...
#languagebarriers
1/4
This Article is Not Just in English | Australasian Journal of Information Systems
doi.org
Reposted by Francois Keck
kayandskittles.bsky.social
Most of the internet used to be like this. This is actually the default, it took companies enclosing the internet and adding weird, soul-killing incentives to make people behave the way they do now. In a way, there is truly nothing special about Wikipedia except that it survived longer.
tuthanhha.bsky.social
“Wikipedia is this economic anomaly. In many ways, it’s sort of magical that people will just volunteer without explicit economic incentives to create artifacts that are meant to share knowledge with everyone in the world”
francoiskeck.bsky.social
Sorry, that's not glamorous, but start by taking a serious course on linear modeling with applications in #rstats.
francoiskeck.bsky.social
Yet another synthesis challenging the idea of systematic biotic homogenisation
afredston.bsky.social
one signature of human impacts on the planet (esp climate change) is ecosystems becoming less unique—a process called "biotic homogenization".

it turns out that isn't happening in the global oceans!

colossal new synthesis led by @zoejean88.bsky.social on marine fishes:

doi.org/10.1371/jour...
Most marine communities around the world do not have any change in beta-diversity. Some are becoming more homogenous, but some are also becoming more differentiated. Fig. 1 from Kitchel et al. 2025 PLOS Climate.
francoiskeck.bsky.social
Thanks for reporting for evolution. I agree that aggregating by paper is also important to get an idea of the absolute usage.
francoiskeck.bsky.social
So, has this reached us yet? Yes, it did. I did a quick #rstats analysis of the literature in ecology. 📊
🔗 See my new blog post: www.pieceofk.fr/the-rise-of-...
Barplot showing how the usage of different typographic character has changed in abstracts between 2021 and 2025 and showing that the use em dash indeed has doubled.
Reposted by Francois Keck
florianaltermatt.bsky.social
Apply now: #PhD #position “Advancing environmental DNA (#eDNA) approaches to future-proof #environmental #monitoring of #aquatic #ecosystems” 🧬 🔎 🦐 🧪 🐟 (4 years position)

➡️ apply.refline.ch/673277/1268/...

Thanks for sharing to suitable candidates! @eawag.bsky.social
francoiskeck.bsky.social
I'm taking advantage of this #showyourstripes day to repost this graphic I once published on “the other site”.
There's climate change and then there's all the other issues. Human activities are profoundly reshaping our planet in multiple dimensions.
Stripe plots showing the changes of multiple socio-economic and earth system trends in the Anthropocene.
Reposted by Francois Keck
anikahappe.bsky.social
In a synthesis of over 3000 population trends in the Wadden Sea, we show a substantial reorganization of biodiversity with over 38% of populations undergoing significant change (i.e., increases or decreases), identify winners and losers and critical time points of change! dx.doi.org/10.1111/gcb....
Reposted by Francois Keck
francoiskeck.bsky.social
Important stuff discussed here.
andrew.heiss.phd
Updated my "AI, LLMs, and bullshit" mini-lecture post in my dataviz class with a new section on vibe coding datavizs25.classes.andrewheiss.com/resource/ai-...
Vibe coding and learning
Remember that LLMs are (philosophical) bullshit machines. They don’t care if the answer if gives you is wrong or right. They don’t care if the code runs or not. All they care about is if the answer looks plausible.

That said, in part due to the massive amount of publicly available code that’s inside their training data, LLMs can work okay with code in limited circumstances. Think of them as fancy documentation—if a programming language or package has good documentation with lots of good examples online, the stuff that LLMs generate about it will generally have good coverage and won’t be completely made up.

They work well enough that a whole new approach to programming has emerged: vibe coding. When vibe coding, you essentially tell an LLM what you want it to make and then let it actually build the whole thing. Some code editors actually allow LLMs to create and edit files directly on your computer. Like, you can say

Make a website that has a login page where users can log in and then create and edit blog posts. Create a theme for it that is mostly blue, but with some nice contrasting colors, and use a warm, friendly sans serif font. Add some photos from Flickr too.

… and it will attempt to do that, creating all the necessary files and code. It feels neat and magical to code without coding.

If you know what you’re doing, and you mistrust everything the LLM spits out, and hand-check everything it says, vibe coding can save you some time. HOWEVER it is (1) potentially dangerous, and (2) bad for learning. Danger!
Because LLMs are designed to make plausible looking code, they can reference external packages that don’t exist. For instance, you might want to make a lollipop chart, and it’ll say something like

Certainly! First, run remotes::install_github("someone/gglollipop") and then run library(gglollipop) to load it.

BUT GUESS WHAT. There is no package named {gglollipop}. It’s not a thing. Malicious actors also vibe code and look for the names of packages that LLMs think should exist, then they go and create those packages themselves, but include malware in those fake packages. If you’re using an editor that allows LLMs to make changes to your computer, it can run all this code without you knowing what happens and bad things can happen.

Additionally, vibe-coded code can run well but be full of security vulnerabilities and issues and inefficiencies and bugs. The code it generates is essentially an average of all other code online—it will have bugs and security issues.

It’s also incredibly easy to accidentally expose private information to LLMs, like feeding them passwords, usernames, private data, and so on, especially if you’re mindlessly generating and running code.

Always distrust and be suspicious about all code that LLMs generate. Bad for learning!
Some people claim that vibe coding helps them learn how to code. This is most likely not the case—pure vibe coding likely hurts learning. Think of learning to code like learning a language. You could try to learn French by watching hours and hours of French movies, and you’d certainly pick stuff up, but you won’t learn nearly as well as you would by taking a dedicated French class.

You need the foundation first. If you take a few years of French classes and then watch hours and hours of French movies, you’ll learn a lot. If you jump right into a pure media-based approach to learning, it’ll be detrimental to learning the language.

Recent research explores this idea with LLMs:

Students who substitute some of their learning activities with LLMs (e.g., by generating solutions to exercises) increase the volume of topics they can learn about but decrease their understanding of each topic. Students who complement their learning activities with LLMs (e.g., by asking for explanations) do not increase topic volume but do increase their understanding. We also observe that LLMs widen the gap between students with low and high prior knowledge. (Lehmann, Cornelius, and Sting 2025)

Prior knowledge is essential if you want to do any code-related stuff with LLMs, and even then, LLMs are helpful when asking for explanations (e.g. “This code works, but I don’t know why! Can you explain what’s happening with geom_point() here?”), but far less helpful for learning than just generating plausible-looking answers. I can typically tell when you submit code generated by an LLM; it has a certain vibe/style to it and often gives you extraneous code that you don’t actually need to use. Like this—this comes right from ChatGPT:

# Load the required libraries
library(dplyr)

# Read a file named cars.csv into the R session
data <- read.csv("data/cars.csv")

# Calculate the average value of cty by class
average_cty_by_class <- data %>%
  group_by(class) %>%
  summarize(average_cty = mean(cty, na.rm = TRUE), .groups = "drop")

# Show the results
print(average_cty_by_class)

The “tells”
Here’s how I can tell that that ↑ code comes from an LLM:

Comments at every stage
read.csv() instead of read_csv(),
The older %>% pipe instead of the newer |> pipe
na.rm = TRUE inside mean()
.groups = "drop" inside summarize()
Using print() to show the created object
In general, don’t ever just copy/paste from ChatGPT and hope it runs. If you do use these tools, use them to ask for explanations. Make sure you know what every line of code is doing. For example, if it spits out summarize(average_cty = mean(cty, na.rm = TRUE), .groups = "drop"), and you don’t know what those na.rm = TRUE or .groups = "drop" things mean, look at the help page for mean() and see what na.rm actually does so you can decide if you really need to use it or not, or ask the LLM why it included it.

I will call out code that looks vibe-coded in your assignments. Please don’t do it.