New Systematic Review Showing General Population Prevalence of Exocrine Pancreatic Insufficiency Is Higher Than In Co-Conditions

For those unfamiliar with academic/medical journal publishing, it is slow. Very slow. I did a systematic review on EPI prevalence and submitted it to a journal on May 5, 2023. It underwent peer review and a round of revisions and was accepted on July 13, 2023. (That part is actually relatively quick.) However, it sat, and sat, and sat, and sat, and sat. I was impatient and wrote a blog post last year about the basic premise of the review, which is that despite commonly repeated statements about the prevalence of EPI being so high in co-conditions that those conditions therefore are the highest drivers of EPI… this unlikely to be true because it is mathematically improbable.

And then this paper still sat several more months until it was published online ahead of print…today! Wahoo! You can read “An Updated Review of Exocrine Pancreatic Insufficiency Prevalence finds EPI to be More Common in General Population than Rates of Co-Conditions in the Journal of Gastrointestinal and Liver Diseases ahead of print (scheduled for the March 2024 issue).

It’s open access (and I didn’t have to pay for it to be!), so click here to go read it and download your own PDF copy of the article there. (As a reminder, I also save a version of every article including those that are not open access at DIYPS.org/research, in case you’re looking for this in the future or want to read some of my other research.) If you don’t want to read the full article, here’s a summary below and key takeaways for providers and patients (aka people like me with EPI!).

I read and systematically categorized 649 articles related to exocrine pancreatic insufficiency, which is known as EPI or PEI depending on where in the world you are. EPI occurs when the pancreas no longer produces enough enzymes to successfully digest food completely; when this occurs, pancreatic enzyme replacement therapy (PERT) is needed. This means swallowing enzyme pills every time you eat or drink something with fat or protein in it.

Like many of my other EPI-related research articles, this one found that EPI is underdiagnosed; undertreated; treatment costs are high; and prevalence is widely misunderstood, possibly leading to missing screening key populations.

  • Underdiagnosis – for a clearer picture and specific disease-related example of how EPI is likely underdiagnosed in a co-condition, check out my other systematic review specifically assessing EPI in diabetes. I show in that paper how EPI is likely many times more likely than gastroparesis and celiac disease, yet it’s less likely to be screened for.
  • Undertreated – another recent systematic review that I wrote after this paper (but was published sooner) is this systematic review on PERT dosing guidelines and dosing literature, showing how the overwhelming majority of people are not prescribed enough enzymes to meet their needs. Thus, symptoms persist and the literature continues to state that symptoms can’t be managed with PERT, which is not necessarily true: it just hasn’t been studied correctly with sufficient titration protocols.
  • PERT costs are high – I highlight that although PERT costs continue to rise each year, there are studies in different co-condition populations showing PERT treatment is cost-effective and in some cases reduces the overall cost of healthcare. It’s hard to believe when we look at the individual out of pocket costs related to PERT sometimes, but the data more broadly shows that PERT treatment in many populations is cost-effective.
  • Prevalence of EPI is misunderstood. This is the bulk of the paper and goes into a lot of detail showing how the general population estimates of EPI may be as high as 11-21%. In contrast, although prevalence of EPI is much higher within co-conditions, these conditions are such a small fraction of the general population that they therefore are also likely a small fraction of the EPI population.

As I wrote in the paper:

“The overall population prevalence of cystic fibrosis, pancreatitis, cancer, and pancreatic-related surgery combined totals <0.1%, and the lower end of the estimated overall population prevalence of EPI is approximately 10%, which suggests less than 1% of the overall incidence of EPI occurs in such rare co-conditions.

We can therefore conclude that 99% of EPI occurs in those without a rare co-condition.”

I also pointed out the mismatch of research prioritization and funding to date in EPI. 56-85% of the EPI-related research is focused on those representing less than ~1% of the overall population with EPI.

So what should you take away from this research?

If you are a healthcare provider:

Make sure you are screening people who present with gastrointestinal symptoms with a fecal elastase test to check for EPI. Weight loss and malnutrition does not always occur with EPI (which is a good thing, meaning it’s caught earlier) and similarly not everyone has diarrhea as their hallmark symptoms. Messy, smelly stools are often commonly described by people with EPI, among other symptoms such as excess gas and bloating,

Remember that conditions like diabetes have a high prevalence of EPI – it’s not just chronic pancreatitis or cystic fibrosis.

If you do have a patient that you are diagnosing or have diagnosed with EPI, make sure you are aware of the current dosing guidelines (see this systematic review) and 1) prescribe a reasonable minimal starting dose; 2) tell the patient when/how they can adjust their PERT on their own and when to call back for an updated prescription as they figure out what they need, and; 3) tell them they will likely need an updated prescription and you are ready to support them when they need to do so.

If you are a person living with EPI:

Most people with EPI are not taking enough enzymes to eliminate their symptoms. Dose timing matters (take it with/throughout meals), and the quantity of PERT matters.

If you’re still having symptoms, you may still need more enzymes.

Don’t compare what you are doing to what other people are taking: it’s not a moral failing to need a different amount of enzymes (or insulin, for that matter, or any other medication) than another person! It also likely varies by what we are eating, and we all eat differently.

If you’re still experiencing symptoms, you may need to experiment with a higher dose. If you still have symptoms or have new symptoms that start after taking PERT, you may need to try a different brand of PERT. Some people do well on one but not another, and there are different kinds you can try – ask your doctor.

How to cite this systematic review:

Lewis D. An Updated Review of Exocrine Pancreatic Insufficiency Prevalence finds EPI to be More Common in General Population than Rates of Co-Conditions. Journal of Gastrointestinal and Liver Diseases. 2024. DOI: 10.15403/jgld-5005

For other posts related to EPI, see DIYPS.org/EPI for more of my personal experiences with EPI and other plain-language research summaries.

For other research articles, see DIYPS.org/research

A systematic review shows EPI prevalence is more common in the general population than in co-conditions

Meet me in the gray area: beyond prevention, before progression

Two things can simultaneously be true:

  • Doctors may wish they had more opportunities to help patients prevent having worse/later stage outcomes of a disease.
  • Doctors may struggle when a patient seeks health care at an early stage, asking for strategies and intervention support against developing worse/later stage outcomes of a disease.

The struggle may be for a few reasons. There’s often a lack of systemic infrastructure to support patients who show up earlier rather than later in a disease progression, especially when the frequency/timeline of care is much quicker than the system is currently resourced for. There’s often a lack of research for these earlier stages and what effective strategies are for preventing progression and treating earlier stage outcomes.

When a clinician struggles with this, it’s not a moral failing of the clinician if they don’t feel equipped to tackle those challenges. However, I do wish clinicians would more often clearly communicate to patients about these struggles. The patient might have a choice: do they pursue another clinician who might have different resources (including time/energy) or expertise in navigating the unknown? Or do they work with the existing clinician to navigate the murky waters together, figuring it out as they go? But patients only have a choice if they realize it themselves and are equipped to pursue alternative paths – or are told that this is a fork in the path.

The challenge is this is a gray area for all of us – patients and clinicians alike. But the reality is, the gray area (for a patient) betwixt and between prevention and progression is our life. The black and white that may emerge after the gray space can be as significant, literally, as life and death. We as patients are highly motivated to navigate the gray area and reduce suffering and possibly try different or new strategies that have shown early promise (although maybe haven’t yet been tested to RCT or the ideal standard, or in the specific disease or stage of the disease in question). We as patients may not have time to wait for the evidence to evolve further.

Clinicians may be aware of the gray space that the patient has landed in. The reality that many clinicians may not know or forget – or have slipped out of their mind – is that the gray space is even more daunting to face alone. If the instinct is to simply shoot down every patient idea with “that’s not approved for use in this disease” without forthrightly contextualizing against a recognition “there’s nothing tested or proven for this part/stage of the disease”, it can begin to put cracks in a relationship. What clinicians might not realize is that a patient may not have time to be in the gray space with a clinician who simply says no to trying anything, because no one has ever studied it before and when little study is being done at all about the gray area the patient is within. Or maybe clinicians do realize it, and sometimes rely on the power of the broken systemic infrastructure that keeps a patient from finding a clinician who does feel equipped to walk through the gray area with them.

What I wish is for clinicians to be equipped to identify this situation, standing on the edge of the gray area with a patient. And to say up front, then and there, if they don’t feel comfortable pursuing off-label strategies when there are zero documented on-label strategies beyond waiting for the worse outcomes to progress. I don’t like that (because why wait for permanent damage to do something, when permanent damage is not inevitable if action is taken sooner), but I very much highly respect and appreciate a clinician who is forthright and willing to say they don’t have time/energy/feel equipped to do so.

Why? Because if I’m already in the gray space, past prevention and before serious progression, it gives me a better opportunity to find someone else who can partner there. It might take a try or two, but it keeps me from wasting time and energy and trying to invest in developing a relationship with a clinician who has already decided they can’t help me until I cross over into black and white worse outcomes.

When we talk about prevention, it’s often about preventing a disease. In the world I live in, and the body I live in – now inhibited by five autoimmune diseases, I don’t have a choice about disease prevention for the most part. My body is clearly equipped with a superstar hyperactive immune system. While I’ve seen some research working on addressing autoimmune stuff, it’s likely decades away from any cure of any one condition that I have (let alone all of them) or fixing the hyperactivity of my immune system and preventing additional autoimmune diseases. Sure, I can work to prevent other diseases that aren’t autoimmune (exercising, staying in as best health overall that I can, etc.), but my focus right now is keeping each of my five autoimmune conditions from being bigger headaches than they already are.

(As a side note, I recently read this paper looking at rates of autoimmune conditions after T1D, based on a registry analysis in Sweden of people with T1D. It’s interesting that the risk of “one more” condition following T1D is 17%, two more is essentially the square of that, etc. etc. all the way down…so the risk is typically about 17% and it’s not additive; having two does not mean you’re more likely to get three, it means you have about the same 17% chance of something else. That’s a useful mental model to me, understanding that I got unlucky 4 more times…and that combination of luck is rare among people with T1D. They went all the way to the category of “three or more” autoimmune conditions after T1D, calculating that 0.3% of people with T1D have 3 or more autoimmune conditions after T1D. They stopped there, but you can extrapolate by multiplying by 17% again and estimate it’s 0.08% for four or more…which is where I’m at. This shows me that I’m not alone in dealing with so many things, but it puts me at about 1 in 1,250 of people with T1D or around one in a million – heh – in the general population if you extrapolate based on global population estimates and assume similar rates/risks of autoimmune conditions in the general public.)

Four of the five are easy enough (although, the fourth took about a year and a half to get to ‘easy enough’, overlapping with the third taking two to three years). The fifth, though, is the gray area that I currently inhabit. Possibly because I am in tune with my body because of the experience with these other autoimmune conditions, I have been presenting to the healthcare system to address this fifth autoimmune condition earlier than most people. Like many autoimmune conditions, it takes years to decades for some people to get diagnosed. Many are diagnosed after systemic manifestations have fully kicked in, e.g. these later stage worse outcomes I referred to above. I’m in a gray area, at the edge of seeing systemic activity, and able to identify it as a red flag, but before – I hope – permanent irreversible damage has been done. The question remains, however, for me to figure out how to navigate this gray area and with which clinicians, in order to achieve care that will possibly prevent or delay or reduce the severity of the outcomes that I will end up with.

I speak from personal experience with this gray area. It’s not fun to navigate, even if you do have a really great clinician partner. But it’s infinitely more challenging to stand there in the gray, unsure of the ability or willingness of a clinician to partner with you.

Meet me in the gray: beyond prevention, before progression - a blog written by Dana M. Lewis on DIYPS.org

A Slackbot for using Slack to access and use a chat-based LLM in public

I’ve been thinking a lot about how to help my family, friends, and colleagues use LLMs to power their work. (As I’ve written about here, and more recently here with lots of tips on prompting and effectively using LLMs for different kinds of projects). 

Scott has been on the same page, especially thinking about how to help colleagues use LLMs effectively, but taking a slightly different approach: he built a Slackbot (a bot for Slack) which uses GPT-3.5 and GPT-4 to answer questions. This uses the API of GPT but presents it to the user in Slack instead of having to use ChatGPT as the chat interface. So, it’s a LLM chatbot, different than ChatGPT (because it’s a different chat interface), but uses the same AI (GPT-3.5 and GPT-4 from OpenAI). You could implement the same idea (a chat-based bot in Slack) using different AIs/LLMs, of course.

Using a slack-based bot for an LLM achieves a couple of things:

  1. More people can try GPT-4 and compare it to GPT-3.5 to get a taste for prompting and responses, without having to pay $20/month for a ChatGPT Pro account to get access to GPT-4.
  2. If you spend a lot of time in Slack for work, you don’t have to switch windows to access GPT.
  3. If your employer doesn’t want you to use the ChatGPT consumer product for work due to security concerns, but is more comfortable with OpenAI’s confidentiality guarantees for their API, a Slack bot interface provides a more secure alternative.
  4. You can see “in public” how other people in your Slack workspace are using it, and learn from their prompts and interactions new tricks and ideas (in addition to reading my long post here with lots of tips and suggestions).
  5. You can privately (in DM by yourself) talk to the bot and ask it your “dumb” questions (which aren’t dumb), and you can reason through things at your own speed or learn how to do things that you haven’t done before, and do so in private just like if you had your own ChatGPT account. It doesn’t burn social capital or take other people’s time, which you can save for more nuanced questions.

Scott has implemented it for work, but also came up with another fun use for it: we created a family-focused Slack channel for kids in our lives (we have ten (!) nieces and nephews – you can see how I used GPT to help with special custom books for some of them recently) so their parents and they can access GPT in a safe environment, too. ChatGPT (and OpenAI’s GPT API) have some reasonable safeguards in it already to protect kids, but more usefully we want to be able to provide custom instructions to keep it always at a kid-focused level. Plus this way we can share the experience with them, too.

I asked the bot to summarize itself for a lay audience not familiar with the project, and this was the output:

### Summary of the SlackAskBot

The SlackAskBot is a smart assistant designed to operate within Slack, a popular communication platform used by teams for messaging and collaboration. Imagine having a helpful robot in your group chats or direct messages that can understand your questions and provide informative responses. That’s what the SlackAskBot does. It’s like adding a knowledgeable team member to your Slack workspace who is always ready to assist.

#### How It Works:

  1. **Integration with Slack:**

– The bot is integrated into Slack, meaning it can read messages in channels it’s added to or when directly messaged. It’s like inviting a friend into your group chat who can listen and respond to conversations.

  1. **Understanding Messages:**

– When you type a message that includes the bot (either by mentioning it with an @ symbol in a channel or by sending it a direct message), the bot pays attention. It’s designed to understand that you’re talking to it and that you’re expecting some form of response.

  1. **Processing Your Requests:**

– Once the bot receives a message, it doesn’t just look at the latest message you’ve sent. It considers the context by looking at the conversation history. This way, it can provide responses that make sense within the ongoing discussion. It’s akin to a human joining a conversation, where understanding the previous discussion points is crucial for making relevant comments.

  1. **Generating Responses:**

– The bot uses a powerful language model (think of it as a very advanced AI that understands and generates human-like text) to come up with responses to your messages. It’s as if the bot thinks about what you’ve asked and then crafts a reply that aims to be helpful and informative.

  1. **Interacting Back:**

– After thinking through your message and generating a response, the bot then sends this response back into the Slack channel or direct message. You’ll see its reply just like you would from any other team member, providing the information or assistance you requested.

  1. **Special Features:**

– The bot is designed with specific settings for different channels or direct messages. This means it can tailor its responses based on where it’s talking. For example, it might respond differently in a casual chat compared to a more formal project discussion channel.

  1. **Respecting Privacy and Permissions:**

– The bot is programmed to respect Slack’s rules and the privacy of your conversations. It only listens and responds to messages where it’s explicitly mentioned or directly messaged, ensuring that it doesn’t intrude on private discussions.

#### In Summary:

The SlackAskBot acts as a virtual assistant within your Slack workspace, ready to provide information and answers to your questions. It’s designed to understand the context of conversations, generate helpful responses, and interact with users in a way that enhances team communication and productivity. Whether you’re asking for quick facts, seeking advice on a project, or just interacting for fun, the SlackAskBot is there to make your Slack experience more informative and engaging.


The SlackAskBot is open source – you can check out the code and instructions for how to implement it in your own Slack environment in the repository here.

We are using Slack as a chat interface for LLMs like GPT, making the user experience similar to ChatGPT

Effective Pair Programming and Coding and Prompt Engineering and Writing with LLMs like ChatGPT and other AI tools

I’ve been puzzled when I see people online say that LLM’s “don’t write good code”. In my experience, they do. But given that most of these LLMs are used in chatbot mode – meaning you chat and give it instructions to generate the code – that might be where the disconnect lies. To get good code, you need effective prompting and to do so, you need clear thinking and ideas on what you are trying to achieve and how.

My recipe and understanding is:

Clear thinking + clear communication of ideas/request = effective prompting => effective code and other outputs

It also involves understanding what these systems can and can’t do. For example, as I’ve written about before, they can’t “know” things (although they can increasingly look things up) and they can’t do “mental” math. But, they can generally repeat patterns of words to help you see what is known about a topic and they can write code that you can execute (or it can execute, depending on settings) to solve a math problem.

What the system does well is help code small chunks, walk you through processes to link these sections of code up, and help you implement them (if you ask for it). The smaller the task (ask), the more effective it is. Or also – the easier it is for you to see when it completes the task and when it hasn’t been able to finish due to limitations like response length limits, information falling out of the context window (what it knows that you’ve told it); unclear prompting; and/or because you’re asking it to do things for which it doesn’t have expertise. Some of the last part – lack of expertise – can be improved with specific prompting techniques –  and that’s also true for right-sizing the task it’s focusing on.

Right-size the task by giving a clear ask

If I were to ask an LLM to write me code for an iOS app to do XYZ, it could write me some code, but it certainly wouldn’t (at this point in history, written in February 2024), write all code and give me a downloadable file that includes it all and the ability to simply run it. What it can do is start writing chunks and snippets of code for bits and pieces of files that I can take and place and build upon.

How do I know this? Because I made that mistake when trying to build my first iOS apps in April and May 2023 (last year). It can’t do that (and still can’t today; I repeated the experiment). I had zero ideas how to build an iOS app; I had a sense that it involved XCode and pushing to the Apple iOS App Store, and that I needed “Swift” as the programming language. Luckily, though, I had a much stronger sense of how I wanted to structure the app user experience and what the app needed to do.

I followed the following steps:

  1. First, I initiated chat as a complete novice app builder. I told it I was new to building iOS apps and wanted to use XCode. I had XCode downloaded, but that was it. I told it to give me step by step instructions for opening XCode and setting up a project. Success! That was effective.
  2. I opened a different chat window after that, to start a new chat. I told it that it was an expert in iOS programming using Swift and XCode. Then I described the app that I wanted to build, said where I was in the process (e.g. had opened and started a project in XCode but had no code yet), and asked it for code to put on the home screen so I could build and open the app and it would have content on the home screen. Success!
  3. From there, I was able to stay in the same chat window and ask it for pieces at a time. I wanted to have a new user complete an onboarding flow the very first time they opened the app. I explained the number of screens and content I wanted on those screens; the chat was able to generate code, tell me how to create that in a file, and how to write code that would trigger this only for new users. Success!
  4. I was able to then add buttons to the home screen; have those buttons open new screens of the app; add navigation back to the home; etc. Success!
  5. (Rinse and repeat, continuing until all of the functionality was built out a step at a time).

To someone with familiarity building and programming things, this probably follows a logical process of how you might build apps. If you’ve built iOS apps before and are an expert in Swift programming, you’re either not reading this blog post or are thinking I (the human) am dumb and inexperienced.

Inexperienced, yes, I was (in April 2023). But what I am trying to show here is for someone new to a process and language, this is how we need to break down steps and work with LLMs to give it small tasks to help us understand and implement the code it produces before moving forward with a new task (ask). It takes these small building block tasks in order to build up to a complete app with all the functionality that we want. Nowadays, even though I can now whip up a prototype project and iOS app and deploy it to my phone within an hour (by working with an LLM as described above, but skipping some of the introductory set-up steps now that I have experience in those), I still follow the same general process to give the LLM the big picture and efficiently ask it to code pieces of the puzzle I want to create.

As the human, you need to be able to keep the big picture – full app purpose and functionality – in mind while subcontracting with the LLM to generate code for specific chunks of code to help achieve new functionality in our project.

In my experience, this is very much like pair programming with a human. In fact, this is exactly what we did when we built DIYPS over ten years ago (wow) and then OpenAPS within the following year. I’ve talked endlessly about how Scott and I would discuss an idea and agree on the big picture task; then I would direct sub-tasks and asks that he, then also Ben and others would be coding on (at first, because I didn’t have as much experience coding and this was 10 years ago without LLMs; I gradually took on more of those coding steps and roles as well). I was in charge of the big picture project and process and end goal; it didn’t matter who wrote which code or how; we worked together to achieve the intended end result. (And it worked amazingly well; here I am 10 years later still using DIYPS and OpenAPS; and tens of thousands of people globally are all using open source AID systems spun off of the algorithm we built through this process!)

Two purple boxes. The one on the left says "big picture project idea" and has a bunch of smaller size boxes within labeled LLM, attempting to show how an LLM can do small-size tasks within the scope of a bigger project that you direct it to do. On the right, the box simply says "finished project". Today, I would say the same is true. It doesn’t matter – for my types of projects – if a human or an LLM “wrote” the code. What matters is: does it work as intended? Does it achieve the goal? Does it contribute to the goal of the project?

Coding can be done – often by anyone (human with relevant coding expertise) or anything (LLM with effective prompting) – for any purpose. The critical key is knowing what the purpose is of the project and keeping the coding heading in the direction of serving that purpose.

Tips for right-sizing the ask

  1. Consider using different chat windows for different purposes, rather than trying to do it all in one. Yes, context windows are getting bigger, but you’ll still likely benefit from giving different prompts in different windows (more on effective prompting below).Start with one window for getting started with setting up a project (e.g. how to get XCode on a Mac and start a project; what file structure to use for an app/project that will do XYZ; how to start a Jupyter notebook for doing data science with python; etc); brainstorming ideas to scope your project; then separately for starting a series of coding sub-tasks (e.g. write code for the home page screen for your app; add a button that allows voice entry functionality; add in HealthKit permission functionality; etc.) that serves the big picture goal.
  2. Make a list for yourself of the steps needed to build a new piece of functionality for your project. If you know what the steps are, you can specifically ask the LLM for that.Again, use a separate window if you need to. For example, if you want to add in the ability to save data to HealthKit from your app, you may start a new chat window that asks the LLM generally how does one add HealthKit functionality for an app? It’ll describe the process of certain settings that need to be done in XCode for the project; adding code that prompts the user with correct permissions; and then code that actually does the saving/revising to HealthKit.

    Make your list (by yourself or with help), then you can go ask the LLM to do those things in your coding/task window for your specific project. You can go set the settings in XCode yourself, and skip to asking it for the task you need it to do, e.g. “write code to prompt the user with HealthKit permissions when button X is clicked”.

    (Sure, you can do the ask for help in outlining steps in the same window that you’ve been prompting for coding sub-tasks, just be aware that the more you do this, the more quickly you’ll burn through your context window. Sometimes that’s ok, and you’ll get a feel for when to do a separate window with the more experience you get.)

  • Pay attention as you go and see how much code it can generate and when it falls short of an ask. This will help you improve the rate at which you successfully ask and it fully completes a task for future asks. I observe that when I don’t know – due to my lack of expertise – the right size of a task, it’s more prone to give me ½-⅔ of the code and solution but need additional prompting after that. Sometimes I ask it to continue where it cut off; other times I start implementing/working with the bits of code (the first ⅔) it gave me, and have a mental or written note that this did not completely generate all steps/code for the functionality and to come back.Part of why sometimes it is effective to get started with ⅔ of the code is because you’ll likely need to debug/test the first bit of code, anyway. Sometimes when you paste in code it’s using methods that don’t match the version you’re targeting (e.g. functionality that is outdated as of iOS 15, for example, when you’re targeting iOS 17 and newer) and it’ll flag a warning or block it from working until you fix it.

    Once you’ve debugged/tested as much as you can of the original ⅔ of code it gave you, you can prompt it to say “Ok, I’ve done X and Y. We were trying to (repeat initial instructions/prompt) – what are the remaining next steps? Please code that.” to go back and finish the remaining pieces of that functionality.

    (Note that saying “please code that” isn’t necessarily good prompt technique, see below).

    Again, much of this is paying attention to how the sub-task is getting done in service of the overall big picture goal of your project; or the chunk that you’ve been working on if you’re building new functionality. Keeping track with whatever method you prefer – in your head, a physical written list, a checklist digitally, or notes showing what you’ve done/not done – is helpful.

Most of the above I used for coding examples, but I follow the same general process when writing research papers, blog posts, research protocols, etc. My point is that this works for all types of projects that you’d work on with an LLM, whether the output generation intended is code or human-focused language that you’d write or speak.

But, coding or writing language, the other thing that makes a difference in addition to right-sizing the task is effective prompting. I’ve intuitively noticed that has made the biggest difference in my projects for getting the output matching my expertise. Conversely, I have actually peer reviewed papers for medical journals that do a horrifying job with prompting. You’ll hear people talk about “prompt engineering” and this is what it is referring to: how do you engineer (write) a prompt to get the ideal response from the LLM?

Tips for effective prompting with an LLM

    1. Personas and roles can make a difference, both for you and for the LLM. What do I mean by this? Start your prompt by telling the LLM what perspective you want it to take. Without it, you’re going to make it guess what information and style of response you’re looking for. Here’s an example: if you asked it what caused cancer, it’s going to default to safety and give you a general public answer about causes of cancer in very plain, lay language. Which may be fine. But if you’re looking to generate a better understanding of the causal mechanism of cancer; what is known; and what is not known, you will get better results if you prompt it with “You are an experienced medical oncologist” so it speaks from the generated perspective of that role. Similarly, you can tell it your role. Follow it with “Please describe the causal mechanisms of cancer and what is known and not known” and/or “I am also an experienced medical researcher, although not an oncologist” to help contextualize that you want a deeper, technical approach to the answer and not high level plain language in the response.

      Compare and contrast when you prompt the following:

      A. “What causes cancer?”

      B. “You are an experienced medical oncologist. What causes cancer? How would you explain this differently in lay language to a patient, and how would you explain this to another doctor who is not an oncologist?”

      C. “You are an experienced medical oncologist. Please describe the causal mechanisms of cancer and what is known and not known. I am also an experienced medical researcher, although not an oncologist.”

      You’ll likely get different types of answers, with some overlap between A and the first part of answer B. Ditto for a tiny bit of overlap between the latter half of answer B and for C.

      I do the same kind of prompting with technical projects where I want code. Often, I will say “You are an expert data scientist with experience writing code in Python for a Jupyter Notebook” or “You are an AI programming assistant with expertise in building iOS apps using XCode and SwiftUI”. Those will then be followed with a brief description of my project (more on why this is brief below) and the first task I’m giving it.

      The same also goes for writing-related tasks; the persona I give it and/or the role I reference for myself makes a sizable difference in getting the quality of the output to match the style and quality I was seeking in a response.

  • Be specific. Saying “please code that” or “please write that” might work, sometimes, but more often or not will get a less effective output than if you provide a more specific prompt.I am a literal person, so this is something I think about a lot because I’m always parsing and mentally reviewing what people say to me because my instinct is to take their words literally and I have to think through the likelihood that those words were intended literally or if there is context that should be used to filter those words to be less literal. Sometimes, you’ll be thinking about something and start talking to someone about something, and they have no idea what on earth you’re talking about because the last part of your out-loud conversation with them was about a completely different topic!

    LLMs are the same as the confused conversational partner who doesn’t know what you’re thinking about. LLMs only know what you’ve last/recently told it (and more quickly than humans will ‘forget’ what you told it about a project). Remember the above tips about brainstorming and making a list of tasks for a project? Providing a description of the task along with the ask (e.g. we are doing X related to the purpose of achieving Y, please code X) will get you better output more closely matching what you wanted than saying “please code that” where the LLM might code something else to achieve Y if you didn’t tell it you wanted to focus on X.

    I find this even more necessary with writing related projects. I often find I need to give it the persona “You are an expert medical researcher”, the project “we are writing a research paper for a medical journal”, the task “we need to write the methods section of the paper”, and a clear ask “please review the code and analyses and make an outline of the steps that we have completed in this process, with sufficient detail that we could later write a methods section of a research paper”. A follow up ask is then “please take this list and draft it into the methods section”. That process with all of that specific context gives better results than “write a methods section” or “write the methods” etc.

  • Be willing to start over with a new window/chat. Sometimes the LLM can get itself lost in solving a sub-task and lose sight (via lost context window) of the big picture of a project, and you’ll find yourself having to repeat over and over again what you’re asking it to do. Don’t be afraid to cut your losses and start a new chat for a sub-task that you’ve been stuck on. You may be able to eventually come back to the same window as before, or the new window might become your new ‘home’ for the project…or sometimes a third, fourth, or fifth window will.
  • Try, try again.
    I may hold the record for the longest running bug that I (and the LLM) could. Not. solve. This was so, so annoying. No users apparently noticed it but I knew about it and it bugged me for months and months. Every few weeks I would go to an old window and also start a new window, describe the problem, paste the code in, and ask for help to solve it. I asked it to identify problems with the code; I asked it to explain the code and unexpected/unintended functionality from it; I asked it what types of general things would be likely to cause that type of bug. It couldn’t find the problem. I couldn’t find the problem. Finally, one day, I did all of the above, but then also started pasting every single file from my project and asking if it was likely to include code that could be related to the problem. By forcing myself to review all my code files with this problem in mind, even though the files weren’t related at all to the file/bug….I finally spotted the problem myself. I pasted the code in, asked if it was a possibility that it was related to the problem, the LLM said yes, I tried a change and…voila! Bug solved on January 16 after plaguing me since November 8. (And probably existed before then but I didn’t have functionality built until November 8 where I realized it was a problem). I was beating myself up about it and posted to Twitter about finally solving the bug (but very much with the mindset of feeling very stupid about it). Someone replied and said “congrats! sounds like it was a tough one!”. Which I realized was a very kind framing and one that I liked, because it was a tough one; and also I am doing a tough thing that no one else is doing and I would not have been willing to try to do without an LLM to support.

    Similarly, just this last week on Tuesday I spent about 3 hours working on a sub-task for a new project. It took 3 hours to do something that on a previous project took me about 40 minutes, so I was hyper aware of the time mismatch and perceiving that 3 hours was a long time to spend on the task. I vented to Scott quite a bit on Tuesday night, and he reminded me that sure it took “3 hours” but I did something in 3 hours that would take 3 years otherwise because no one else would do (or is doing) the project that I’m working on. Then on Wednesday, I spent an hour doing another part of the project and Thursday whipped through another hour and a half of doing huge chunks of work that ended up being highly efficient and much faster than they would have been, in part because the “three hours” it took on Tuesday wasn’t just about the code but about organizing my thinking, scoping the project and research protocol, etc. and doing a huge portion of other work to organize my thinking to be able to effectively prompt the LLM to do the sub-task (that probably did actually take closer to the ~40 minutes, similar to the prior project).

    All this to say: LLMs have become pair programmers and collaborators and writers that are helping me achieve tasks and projects that no one else in the world is working on yet. (It reminds me very much of my early work with DIYPS and OpenAPS where we did the work, quietly, and people eventually took notice and paid attention, albeit slower than we wished but years faster than had we not done that work. I’m doing the same thing in a new field/project space now.) Sometimes, the first attempt to delegate a sub-task doesn’t work. It may be because I haven’t organized my thinking enough, and the lack of ideal output shows that I have not prompted effectively yet. Sometimes I can quickly fix the prompt to be effective; but sometimes it highlights that my thinking is not yet clear; my ability to communicate the project/task/big picture is not yet sufficient; and the process of achieving the clarity of thinking and translating to the LLM takes time (e.g. “that took 3 hours when it should have taken 40 minutes”) but ultimately still moves me forward to solving the problem or achieving the tasks and sub-tasks that I wanted to do. Remember what I said at the beginning:

    Clear thinking + clear communication of ideas/request = effective prompting => effective code and other outputs

 

  • Try it anyway.
    I am trying to get out of the habit of saying “I can’t do X”, like “I can’t code/program an iOS app”…because now I can. I’ve in fact built and shipped/launched/made available multiple iOS apps (check out Carb Pilot if you’re interested in macronutrient estimates for any reason; you can customize so you only see the one(s) you care about; or if you have EPI, check out PERT Pilot, which is the world’s first and only app for tracking pancreatic enzyme replacement therapy and has the same AI feature for generating macronutrient estimates to aid in adjusting enzyme dosing for EPI.) I’ve also made really cool, 100% custom-to-me niche apps to serve a personal purpose that save me tons of time and energy. I can do those things, because I tried. I flopped a bunch along the way – it took me several hours to solve a simple iOS programming error related to home screen navigation in my first few apps – but in the process I learned how to do those things and now I can build apps. I’ve coded and developed for OpenAPS and other open source projects, including a tool for data conversion that no one else in the world had built. Yet, my brain still tries to tell me I can’t code/program/etc (and to be fair, humans try to tell me that sometimes, too).

    I bring that up to contextualize that I’m working on – and I wish others would work on to – trying to address the reflexive thoughts of what we can and can’t do, based on prior knowledge. The world is different now and tools like LLMs make it possible to learn new things and build new projects that maybe we didn’t have time/energy to do before (not that we couldn’t). The bar to entry and the bar to starting and trying is so much lower than it was even a year ago. It really comes down to willingness to try and see, which I recognize is hard: I have those thought patterns too of “I can’t do X”, but I’m trying to notice when I have those patterns; shift my thinking to “I used to not be able to do X; I wonder if it is possible to work with an LLM to do part of X or learn how to do Y so that I could try to do X”.

    A recent real example for me is power calculations and sample size estimates for future clinical trials. That’s something I can’t do; it requires a statistician and specialized software and expertise.

    Or…does it?

    I asked my LLM how power calculations are done. It explained. I asked if it was possible to do it using Python code in a Jupyter notebook. I asked what information would be needed to do so. It walked me through the decisions I needed to make about power and significance, and highlighted variables I needed to define/collect to put into the calculation. I had generated the data from a previous study so I had all the pieces (variables) I needed. I asked it to write code for me to run in a Jupyter notebook, and it did. I tweaked the code, input my variables, ran it..and got the result. I had run a power calculation! (Shocked face here). But then I got imposter syndrome again, reached out to a statistician who I had previously worked with on a research project. I shared my code and asked if that was the correct or an acceptable approach and if I was interpreting it correctly. His response? It was correct, and “I couldn’t have done it better myself”.

    (I’m still shocked about this).

    He also kindly took my variables and put it in the specialized software he uses and confirmed that the results output matched what my code did, then pointed out something that taught me something for future projects that might be different (where the data is/isn’t normally distributed) although it didn’t influence the output of my calculation for this project.

    What I learned from this was a) this statistician is amazing (which I already knew from working with him in the past) and kind to support my learning like this; b) I can do pieces of projects that I previously thought were far beyond my expertise; c) the blocker is truly in my head, and the more we break out of or identify the patterns stopping us from trying, the farther we will get.

    “Try it anyway” also refers to trying things over time. The LLMs are improving every few months and often have new capabilities that didn’t before. Much of my work is done with GPT-4 and the more nuanced, advanced technical tasks are way more efficient than when using GPT-3.5. That being said, some tasks can absolutely be done with GPT-3.5-level AI. Doing something now and not quite figuring it out could be something that you sort out in a few weeks/months (see above about my 3 month bug); it could be something that is easier to do once you advance your thinking ; or it could be more efficiently done with the next model of the LLM you’re working with.

  • Test whether custom instructions help. Be aware though that sometimes too many instructions can conflict and also take up some of your context window. Plus if you forget what instructions you gave it, you might get seemingly unexpected responses in future chats. (You can always change the custom instructions and/or turn it on and off.)

I’m hoping this helps give people confidence or context to try things with LLMs that they were not willing to try before; or to help get in the habit of remembering to try things with LLMs; and to get the best possible output for the project that they’re working on.

Remember:

  • Right-size the task by making a clear ask.
  • You can use different chat windows for different levels of the same project.
  • Use a list to help you, the human, keep track of all the pieces that contribute to the bigger picture of the project.
  • Try giving the LLM a persona for an ask; and test whether you also need to assign yourself a persona or not for a particular type of request.
  • Be specific, think of the LLM as a conversational partner that can’t read your mind.
  • Don’t be afraid to start over with a new context window/chat.
  • Things that were hard a year ago might be easier with an LLM; you should try again.
  • You can do more, partnering with an LLM, than you can on your own, and likely can do things you didn’t realize were possible for you to do!

Clear thinking + clear communication of ideas/request = effective prompting => effective code and other outputs

Have any tips to help others get more effective output from LLMs? I’d love to hear them, please comment below and share your tips as well!

Tips for prompting LLMs like ChatGPT, written by Dana M. Lewis and available from DIYPS.org

Understanding Fecal Elastase Test Results Including Sensitivity And Specificity And What It Means For Exocrine Pancreatic Insufficiency (EPI or PEI)

One of the challenges related to diagnosing exocrine pancreatic insufficiency (known as EPI or PEI) is that there is no perfect test.

With diabetes, we can see in several different ways what glucose is doing: via fasting glucose levels, HbA1c (an average of 3 months glucose), and/or continuous glucose monitoring. We can also test for c-peptide to see if insulin production is ongoing.

Yet for EPI, the tests for assessing whether and how much the pancreas is producing digestive enzymes are much less direct, more invasive, or both.

Some of the tests include a breath test; an invasive secretin pancreatic function test; a 72-hour fecal fat collection test, or a single sample fecal elastase test.

  • A breath test is an indirect test, which assesses the end-product of digestion rather than digestion itself, and other conditions (like SIBO) can influence the results of this test. It’s also not widely available or widely used.
  • The secretin pancreatic function test is an invasive test involving inserting a tube into the small intestine after giving secretin, which is a hormone that stimulates the pancreas. The tube collects digestive juices produced by the pancreas, which are tested. It’s invasive, costly, and therefore not ideal.
  • For reliability, the 72-hour fecal fat collection test might be ideal, because it’s checking the amount of fat in the stool. It requires stopping enzymes, if someone is taking them already, and consuming a high fat diet. But that includes collecting stool samples for 3 days – ugh. (The “ugh” is my personal opinion, clearly).
  • The fecal elastase test, in contrast, does not require stopping enzymes. It measures human elastase, whereas digestive enzymes are typically pig-based, so you don’t have to stop enzymes when doing this test. It’s also a single stool sample (so you’re not collecting poop for 3 days in a row). The sensitivity and specificity are different based on the diagnostic threshold, which I’ll talk about below, and the accuracy can be influenced by the sample. Diarrhea, meaning watery poop, can make this test even less reliable. But that’s why it’s good that you can take enzymes while doing this test. Someone with diarrhea and suspected EPI could go on enzymes, reduce their diarrhea so they could have a formed (non-watery) sample for the elastase test, and get a better answer from the fecal elastase test.

The fecal elastase test is often commonly used for initial screening or diagnosis of EPI. But over the last two years, I’ve observed a series of problems with how it is being used clinically, based on reading hundreds of research and clinical practice articles and reading thousands of posts of people with EPI describing how their doctor is ordering/reviewing/evaluating this test.

Frequent problems include:

  • Doctors refuse to test elastase, because they don’t believe the test indicates EPI due to the sensitivity/specificity results for mild/moderate EPI.
  • Doctors test elastase, but won’t diagnose EPI when test results are <200 (especially if 100-200).
  • Doctors test elastase, but won’t diagnose EPI even when test results are <100!
  • Doctors test elastase, diagnose EPI, but then do not prescribe enzymes because of the level of elastase (even when <200).
  • Doctors test elastase, diagnose EPI, but prescribe a too-low level of enzymes based on the level of elastase, even though there is no evidence indicating elastase should be used to determine dosing of enzymes.

Some of the problems seem to result from the fact that the elastase test has different sensitivity and specificity at different threshold levels of elastase.

When we talk about “levels” of elastase or “levels” or “types” of EPI (PEI), that usually means the following thresholds / ranges:

  • Elastase <= 200 ug/g indicates EPI
  • Elastase 100-200 ug/g indicates “mild” or “mild/moderate” or “moderate” EPI
  • Elastase <100 ug/g often is referred to as “severe” EPI

You should know that:

  • People with severe EPI (elastase <100) could have no symptoms
  • People with mild/moderate EPI (elastase 100-200) could have a very high level of symptoms and be malnourished
  • People with any level of elastase indicating EPI (elastase <=200) can have EPI even if they don’t have malnourishment (usually meaning blood vitamin levels like A, D, E, or K are below range).

So let’s talk about sensitivity and specificity at these different levels of elastase.

First, let’s grab some sensitivity and specificity numbers for EPI.

  1. One paper that is widely cited, albeit old, is of sensitivity and specificity of fecal elastase for EPI in people with chronic pancreatitis. You’ll see me talk in other posts about how chronic pancreatitis and cystic fibrosis-related research is over-represented in EPI research, and it may or may not reflect the overarching population of people with EPI.But since it’s widely used, I’ll use it in the below examples, especially because this may be what is driving clinician misunderstanding about this test.With a cut off of <200 ug/g, they found that the sensitivity in detecting moderate/severe EPI is 100%, and 63% sensitivity for detecting mild EPI. At that <200 ug/g threshold, the specificity is 93% (which doesn’t distinguish between severities). With a cut off of <100 ug/g, the sensitivity for detecting mild EPI drops to 50%, but the specificity increases to 98%.This means that:
    1. 63% of people with mild EPI would be correctly diagnosed using an elastase threshold of 200 ug/g (vs. only 50% at 100 ug/g).
    2. 100% of people with moderate/severe EPI would be correctly diagnosed using an elastase threshold of 200 ug/g (compared to only 93% or 96% for moderate/severe at 100 ug/g).
    3. Only 7% of people testing <200 ug/g would be incorrectly diagnosed with EPI, and only 2% of people testing <100 ug/g.
  2. For comparison, a systematic review evaluated a bunch of studies (428 people from 14 studies) and found an average sensitivity of 77% (95% CI of 58-89%) and average specificity of 88% (95% CI of 78-93%).This sensitivity is a little higher than the above number, which I’ll discuss at the end for some context.

So what does sensitivity and specificity mean and why do we care?

At an abstract level, I personally find it hard to remember what sensitivity and specificity mean.

  • Sensitivity means: how often does it correctly identify the thing we want to identify?

This means a true positive. (Think about x-ray screening at airport security: how often do they find a weapon that is there?)

  • Specificity means: how often does it avoid mistakenly identifying the thing we want to identify? In other words, how often is a positive a true positive rather than a false positive?

(Think about x-ray screening at airport security: how often does it correctly identify that there are no weapons in the bag? Or how often do they accidentally think that your jam-packed bag of granola and snacks might be a weapon?)

Here is how we apply this to fecal elastase testing for EPI.

For those with moderate/severe EPI, the test is 100% sensitive at correctly detecting those cases if you use an elastase cut off of <200 ug/g. For those with mild EPI, the test drops to only being 63% sensitive at correctly detecting all of those cases. And 93% of the time, the test correctly excludes EPI when it doesn’t exist (at a <200 ug/g cut off, vs. 98% of the time at a <100 ug/g cut off). Conversely, 7% (which we get from subtracting 93% from 100%) of people with elastase <200 ug/g might not have EPI, and 2% (98% subtracted from 100%) of people with elastase <100 ug/g might not have EPI.

Here’s another way of thinking about it, using a weather forecast analogy. Think about how easy it is to predict rain when a major storm is coming. That’s like trying to detect severe EPI, it’s a lot easier and forecasters are pretty good about spotting major storms.

But in contrast, what about correctly predicting light rain? In Seattle, that feels close to impossible – it rains a lot, very lightly. It’s hard to predict, so we often carry a light rain jacket just in case!

And for mild EPI, that’s what the sensitivity of 63% means: less than two thirds of the time can it correctly spot mild EPI by looking for <200 ug/g levels, and only half the time by looking for <100 ug/g. The signal isn’t as strong so it’s easier to miss.

The specificity of 93% means that the forecast is pretty good at identifying not-rainy-days, even with a cut off of elastase >200 ug/g. But, occasionally (around 7/100 times), it’s wrong.

Table comparing the sensitivity for severe and mild EPI alongside specificity, plus comparing to weather forecast ability for rain in major storms.

Why might clinicians be incorrectly using the value of these numbers for the fecal elastase test?

I hypothesize that in many cases, for the elastase levels now considered to indicate mild/moderate EPI (elastase 100-200 ug/g), clinicians might be accidentally swapping the sensitivity (63%) and specificity (93%) numbers in their mind.

What these numbers tell us is that 63% of the time, we’ll catch mild EPI through elastase testing. This means 37/100 people with actual mild EPI might be missed!

In contrast, the specificity of 93% tells us about accidental false positives, and that 7/100 people without EPI might accidentally get flagged as having possible EPI.

Yet, the clinical practice in the real-world seems to swap these numbers, acting as if the accuracy goes the other way, suspecting that elastase 100-200 doesn’t indicate EPI (e.g. thinking 37/100 false positives, which is incorrect, the false positive rate is 7/100).

There’s plenty of peer-reviewed and published evidence that people with elastase 100-200 have a clear symptom burden. There’s even a more recent paper suggesting that those with symptoms and elastase of 200-500 benefit from enzymes!

Personally, as a person with EPI, I am frustrated when I see/hear cases of people whose clinicians refuse testing, or don’t prescribe PERT when elastase is <=200 ug/g, because they don’t believe elastase 100-200 ug/g is an accurate indicator of EPI. This data shows that’s incorrect. Regardless of which paper you use and which numbers you cite for sensitivity and specificity, they all end up with way more common rates of false negatives (missing people with EPI) than false positives.

And, remember that many people with FE 200-500 benefit from enzymes, too. At a cutoff of 200 ug/g, the number of people we are likely to miss (sensitivity) at the mild/moderate level is much higher than the number of false positives who don’t actually have EPI. That puts the risk/benefit calculation – to me – such that it warrants using this test, putting people on enzymes, and evaluating symptom resolution over time following PERT dosing guidelines. If people’s symptom burden does not improve, titrating PERT and re-testing elastase makes sense (and that is what the clinical guidelines say to do), but the cost of missing ~37 people out of 100 with EPI is too high!

Let’s also talk about elastase re-testing and what to make of changed numbers.

I often also observe people with EPI who have their elastase re-tested multiple times. Here are some examples and what they might mean.

  • A) Someone who tests initially with a fecal elastase of 14, later retests as 16, then 42 ug/g.
  • B) Someone who tests initially at 200 and later 168.
  • C) Someone who tests initially at 72 and later 142.
  • D) Someone who tests initially as 112 and later 537.

Remember the key to interpreting elastase is that <=200 ug/g is generally accepted as indicating EPI. Also it’s key to remember that the pancreas is still producing some enzymes, thus elastase production will vary slightly. But in scenarios A, B, and C – those changes are not meaningful. In scenario A, someone still has clear indicators of severe (elastase <100) EPI. Slight fluctuations don’t change that. Same for scenario B, 200 and 168 are both still in mild/moderate EPI (elastase <=200). Even scenario C isn’t very meaningful, even though there is an “increase”, this is still clearly EPI.

In most cases, the fluctuations in test results are likely a combination of both natural fluctuations in pancreas production and/or test reliability. If someone was eating a super low fat diet, taking enzymes effectively, that may influence how the pancreas is producing its natural enzymes – we don’t actually know what causes the pancreas to fluctuate the natural enzyme levels.

The only case that is meaningful in these examples is scenario D, where someone initially had a result of 112 and later clearly above the EPI threshold (e.g. 537). There are a few cases in the literature where people with celiac seem to have temporary EPI and later their elastase production returns to normal. This hasn’t been documented in other conditions, which doesn’t mean that it’s not possible, but we don’t know how common it is. It’s possible the first sample of 112 was due to a watery sample (e.g. during diarrhea) or other testing inaccuracy, too. If a third test result was >500, I’d assume it was a temporary fluctuation or test issue, and that it’s not a case of EPI. (Yay for that person!). If it were me (and I am not a doctor), I’d have them try out a period without enzymes to ensure that symptoms continued to be managed effectively. If the third test was anywhere around 200 or below, I’d suspect something going on contributing to fluctuations in pancreatic production and not be surprised if enzymes were continued to be needed, unless the cause could be resolved.

But what about scenario C where someone “went from severe to mild/moderate EPI”?!

A lot of people ask that. There’s no evidence in the hundreds (seriously, hundreds) of papers about EPI that indicate clearly that enzymes should be dosed based on elastase level, or that there’s different needs based on these different categories. The “categories” of EPI originally came from direct measurements of enzyme secretion via invasive tests, combined with quantitative measurements of bicarbonate and fat in stools. Now that fecal elastase is well established as a non-invasive diagnostic method, severities are usually estimated based on the sensitivity of these cutoffs for detecting EPI, and that’s it. The elastase level doesn’t actually indicate the severity of the experience through symptoms, and so enzymes should be dosed and adjusted based on the individual’s symptoms and their diet.

In summary:

  • Elastase <=200 ug/g is very reliable, indicates EPI, and warrants starting PERT.
  • There is one small study suggesting even people with elastase 200-500 might benefit from PERT, if they have symptoms, but this needs to be studied more widely.
  • It’s possible clinicians are conflating the sensitivity and specificity, thus misunderstanding how accurately elastase tests can detect cases of mild/moderate EPI (when elastase is 100-200 ug/g).

Let me know if anyone has questions about elastase testing, sensitivity, and specificity that I haven’t answered here! Remember I’m not a doctor, and you should certainly talk with your doctor if you have questions about your specific levels. But make sure your doctor understands the research, and feel free to recommend this post to them if they aren’t already familiar with it: https://bit.ly/elastase-sensitivity-specificity

Personalized Story Prompts for Kids Books and Early Reader Books

For the holidays this year, I decided to try my hand at creating another set of custom, illustrated stories for my nieces and nephews (and bonus nieces and nephews). I have a few that are very advanced readers and/or too old for this, but I ended up with a list of 8 kids in my life from not-yet-reading to beginning reading to early 2nd grade reading level. I wanted to write stories that would appeal to each kid, include them as the main character, be appropriate for their reading (or read-to) level, and also include some of their interests.

Their interests were varied which made it quite a challenge! Here’s the list I worked from:

  • 2nd grade reading level, Minecraft
  • early 2nd grade reading level: soccer, stunt biking, parkour, ninja, Minecraft
  • beginning reading level: soccer, stunt biking, ninja, Spiderman
  • beginning reading level: Peppa Pig, moko jumbies
  • (read to younger child): Minnie Mouse, Peppa Pig, Bluey, and tea parties
  • (read to younger child): Bluey, Olaf, Elsa, & Anna
  • (read to younger child): cars/vehicles

I enlisted ChatGPT, an LLM, and ended up creating stories for each kid, matching their grade levels and interests, then illustrating them.

But illustrating them was actually a challenge (still), trying to create images with similar characters that would be on every page of the story and similar enough throughout that they were the “same” character.

Illustration challenges and how I got successful prompts:

My first pass on images wasn’t very good. I could get basic details to repeat, but often had images that looked like this – slightly different style and character throughout:

8 different illustrations in slightly different styles and almost different characters of a girl with blonde, shoulder length hair and a purple dress in an enchanted forest

Different styles throughout and that makes it look like a different character, even though it’s the same character in the whole story. This was a book to read to a <3 year old, though, and I thought she wouldn’t mind the different styles and left it as is. I also battled with adding, for personal use, the characters that most interested her: Peppa Pig and Minnie Mouse.

Interestingly, if I described with a prompt to illustrate a scene including a character “inspired by, but distinct from, Peppa Pig”…it essentially drew Peppa Pig or a character from it. No problems.

But if you gave the same prompt “inspired by, but distinct from, Minnie Mouse”? No go. No image at all: ChatGPT would block it for copyright reasons and wouldn’t draw any of the image. I riffed a bunch of times and finally was able to prompt a good enough mouse with round ears and a red dress with white polka dots. I had to ultimately illustrate the mouse character alone with the human character, because if I tried to get a Peppa-inspired character and then separately a mouse character, it wanted to draw the mouse with a pig-style face in the correct dress! I could never work around that effectively for the time I had available (and all the other books I was trying to illustrate!) so I stopped with what I had.

This was true for other characters, too, with copyright issues. It won’t draw anything from or like Bluey – or Frozen, when prompted. But I could get it to draw “an ethereal but warm, tall female adult with icy blonde hair, blue eyes, in an icy blue dress”, which you can see in the fourth image on the top row here:

Another series of illustrations with slightly different characters but closer in style throughout. there's one image showing a Frozen-inspired female character that I got by not prompting with Frozen.

I also managed to get slightly closer matching characters throughout this, but still quite a bit of variability. Again, for a young being-read-to-child, it was good enough for my purposes. (I never could get it to draw a Bluey-like character, even when I stopped referencing Bluey by name and described the shape and character, so I gave up on that.)

I tried a variety of prompts and series of prompts for each book. Sometimes, I would give it the story and prompt it with each page’s text, asking for an illustration and to keep it in the same style and the same character as the previous image. That didn’t work well, even when I told it in every prompt to use the same style and character plus the actual image prompt. I then tried to create a “custom” GPT, with the GPT’s instructions to use the same style throughout. That started to give me slightly better results, but I still had to remind it constantly to use the same style.

I also played around with taking an image that I liked, starting a new chat, and asking it to describe that image. Then I’d use that prompt to create a new prompt, describing the character in the same way. That started to get me slightly better results, especially when I did so using the custom GPT I had designed (you can try using this GPT here). I started to get better, more consistent characters:

A series of images of a young cartoon-drawn boy with wavy blonde hair riding a bike through an enchanted forest.

 

A series of drawings of a cartoon-like character with spiky blonde hair, blue eyes, and various outfits including a ninja costume

Those two had some variability, but a lot improved beyond the first several books. They are for the beginning and second-grade reading levels, too, so they are older kids with more attention to detail so it was worth the extra effort to try to get theirs to be more consistent.

The last one with the ninja and ninja outfits is another one that ran into copyright issues. I tried to have it illustrate a character inspired by, but distinct from, Spiderman – nope, no illustration at all. I asked it to illustrate the first picture in the soccer park with a spider strand looping in the corner of the image, like Spiderman had swung by but was out of sight and not picture – NOPE. You can’t even get an image that has Spiderman in the prompt at all, even if Spiderman isn’t in the picture! (I gave up and moved on without illustrating spiderwebs, even though Spiderman is described in the story).

My other favorite and pretty consistent one was two more of the early reader ones:

A series of images showing a young cartoon boy with wavy brown hair at a car fair

The hard part from that book was actually trying to do the cars consistently, rather than the human character. The human character was fairly consistent (although in different outfits, despite clear outfit prompts – argh) throughout, because I had learned from the previous images and prompt processes and used the Custom GPT, but the cars varied more. But, for a younger reader, hopefully that doesn’t matter.

The other, more-consistent character one for an early reader had some variations in style but did a better job matching the character throughout even when the style changed.

Another example with a mostly consistent young cartoon drawn girl with whispy blonde pigtails and big blue eyes, plus moko jumbies and peppa pig

How I wrote each story:

I also found some processes for building better stories. Again, see the above list of very, varied interests for each kid. Some prompts were straight forward (Minecraft) and other were about really different characters or activities (moko jumbies and Peppa Pig? Minnie Mouse and Peppa Pig? soccer ninja and Minecraft?).

What I ended up doing for each:

  1. In a new ChatGPT window (not the custom GPT for illustrating): Describe the reading level; the name of the character(s); and the interests. Ask it to brainstorm story ideas based on these interests.
  2. It usually gave 3 story ideas in a few sentences each, including a title. Sometimes, I would pick one and move on. Other times, I would take one of the ideas and tweak it a bit and ask for more ideas based on that. Or, I’d have it try again generally, asking for 3 more ideas.
  3. Once I had an idea that I liked, I would ask it to outline the story, based on the chosen story idea and the grade level we were targeting. Sometimes I would tweak the title and other times I would take the title as-is.
  4. Once it had the outline, I could have it then write the entire story (especially for the younger, beginner reader or read-to levels that are so short), but for the “chapter” books of early 2nd and 2nd grade reading level, I had it give me a chapter at a time, based on the outline. As each chapter was generated, I edited and tweaked it and took the text to where I would build the book. Sometimes, I would re-write the whole chapter myself, then give it back the chapter text and ask it to write the next one. If you didn’t give it back, it wouldn’t know what the chapter ended up as, so this is an important step to do when you’re making more than minor sentence construction changes.
  5. Because I know my audience(s) well, I tweaked it heavily as I went, incorporating their interests. For example, in the second images I showed above, there’s a dancing dog. It’s their actual dog, with the dog named in the story along with them as characters. Or in the chapter book for the character with the bike, it described running up a big mountain on a quest and being tired. I tossed in an Aunt-Dana reference including reminding the character about run-walking as a way to keep moving forward without stopping and cover the distance that needs to be covered. I also tweaked the stories to include character traits (like kindness) that each child has, and/or behaviors that their family prioritizes.

I described the images processes first, then the story writing, in this blog post, but I actually did the opposite for each book. I would write (brainstorm, outline, write, edit, write) the entire book, then I would go start a new chat window (eventually solely using my custom GPT) and ask for illustrations. Sometimes, I would give it the page of the story’s text and ask it to illustrate it. That’s helpful when you don’t know what to illustrate, and it did fairly well for some of the images (especially the Minecraft-inspired ones!). Ultimately, though, I would often get an image, ask what the prompt was for the image, tweak the prompt, and give it back to better match the story or what I wanted to illustrate. Once I was regularly asking for the image prompts, I had realized that giving the character details repeatedly for every image helped with consistency. Then I would use the ad-nauseam details myself for a longer prompt, which resulted in better images throughout, so I spent more energy deciding myself what to illustrate to best match the story.

All in all, I made 7 custom books (and 8 copies, one of the Minecraft books I copied and converted to a different named character for a friend’s child!). Between writing and editing, and illustrating, I probably spent an average of one hour per book! That’s a lot of time, but it did get more efficient as I went, and in some cases the hour included completely starting over and re-working the images in the book for consistency compared to the version I had before. The next books I create will probably take less time, both because I figured out the above processes but also because hopefully DALL*E and other illustration tools will get better about being able to illustrate the same character consistently across multiple prompts to illustrate a story.

How other people can use this to create stories – and why:

I have been so excited about this project. I love, love, love to read and I love reading with my nieces and nephews (and bonus kids in my life) and finding books that match their interest and help spark or maintain their love of reading. That’s why I did this project, and I have been bursting for WEEKS waiting to be able to give everyone their books! I wanted it to be a surprise for their parents, too, which meant that I couldn’t tell 2/3 of my closest circles about my cool project.

One of my friends without young kids that I finally told about my project loved the idea: she works as staff at an elementary school, supporting some students who are working on their reading skills who are nonverbal. She thought it would be cool to make a book for one student in particular, and described some of her interests: violins, drums, raspberries, and unicorns. I was in the car when she told me this, and I was able to follow the same process as above in the mobile ChatGPT app and list the interests, ask for a brainstorm of story ideas for a beginning reading level style book that had some repetitive text using the interests to aid in reading. It created a story about a unicorn who gathers other animals in the forest to play in an orchestra (with drums and violins) and eat raspberries. I had it illustrate the story, and it did so (with slightly different unicorns throughout). I only had to have it re-draw one image, because it put text in one of the last images that didn’t need to be there.

Illsutrations from a quick story about a unicorn, drums, violin, and an orchestra, plus raspberries

It was quick and easy, and my friend and her student LOVED it, and the other teachers and staff at the school are now working on personalized books for a lot of other students to help them with reading skills!

It really is an efficient and relatively easy way to generate personalized content; it can do so at different reading levels (especially when a teacher or someone who knows the student can tweak it to better match the reading level or sounds and words they are working on next); and you can generate pretty good matching illustrations too.

The hardest part is consistent characters; but when you don’t need consistency throughout a whole book, the time it takes drops to ~5 or so minutes to write, tweak, and illustrate an entire story.

Illustrations require a paid ChatGPT account, but if you have one and want to try out the custom GPT I built for (slightly more consistent) illustrations of stories, you can check it out here.

Custom stories: prompting and effective illustrating with ChatGPT, a blog post by Dana M. Lewis from DIYPS.org

Systematic Review of PERT Research and Guidelines for Exocrine Pancreatic Insufficiency (EPI or PEI)

New Systematic Review And Evaluation of Pancreatic Enzyme Replacement Therapy (PERT) Dosing Guidelines and Research for Exocrine Pancreatic Insufficiency (EPI or PEI)

I wrote a new paper evaluating the research behind pancreatic enzyme replacement therapy (aka, PERT) dosing for people with exocrine pancreatic insufficiency (known as EPI or PEI). I decided to do this research and write this paper because in my previous papers on EPI, I saw a lot of inconsistencies in when PERT was studied, how it was studied, and how that research was then used to develop guidelines.

(Big thanks to Julia Blanchette, Jordan Rieke, Claudia Lewis (no relation), Khaleal Almusaylim , and Anuhya Kanchibhatla for collaborating on this research and co-authoring the paper with me!)

You can find an author copy of the paper here, or see it on the journal website here. As a reminder, all my research papers have author copies and you can find them at DIYPS.org/research! I also have several other EPI-related articles.

A note on methods – this is a systematic review, meaning I used keywords to search multiple electronic databases to find articles about exocrine pancreatic insufficiency. I screened articles to make sure they were about EPI in humans and focused on English-language articles. We then reviewed the title and abstract of 2,530 remaining articles (!) that mentioned EPI, and excluded those that were not focused on EPI or a co-condition and unlikely to include guidelines or specific dose information related to EPI. That left 820 articles, which we then screened again looking for the full text and reviewing them for relevancy. I ended up reading 257 papers that we used for the basis of the research described below!

We found 7 key findings from this body of research:

  1. PERT Titration Protocols Aren’t Very Specific (or useful as typically written)“Most PERT dosing guidelines do not articulate a specific, defined dose range. Instead, PERT is commonly dosed with a general starting dose, such as 50,000 units of lipase per meal and 25,000 units of lipase per snack. If needed, guidelines then recommend increasing (i.e., titrating) the dosage by a factor of two to three (commonly described as increasing by 2x – 3x), and if symptoms persist, adding a proton pump inhibitor (PPI) before exploring other potential diagnoses. As a result, providers are prompted to focus primarily on the starting dose, rather than the full range of recommended doses.”

    I ended up crafting a table (Table 2) for the paper that shows how this dosing process can result in much bigger doses – such as 150,000 units of lipase per meal – to contrast  how prescriptions are often given at very low doses in comparison and often are not sufficient.

    This is a similar version of the table that I had developed for a previous blog post talking about the ranges of PERT dosing:
    Examples of PERT starting doses of 25,000, 40,000, and 50,000 (plus half that for snacks) and what the dose would be if increased according to guidelines to 2x and 3x, plus the sum of the total daily dose needed at those levels.
    Most guidelines, and the underlying studies, do not do a good job describing what doses people actually took in the studies. This may influence then providers’ understanding of how much PERT is needed.

  1. People are not taking enough PERTLike I found in my own previous research, there have been numerous studies showing that people are not getting prescribed enough PERT. This is both based on people reporting ongoing symptoms and reduced quality of life, but also studies that show a huge gap between the doses recommended to start with in guidelines and the fact that >90% of the time, providers don’t prescribe anywhere near this dose (and therefore are not prescribing enough PERT).
  2. Comparing different PERT studies is challengingWhen PERT studies are done, they are typically for safety and efficacy at a specific dose. Very few studies record what dosing people take when they are allowed to take the amount that they need to effectively reduce symptoms.

    As a result, we don’t know how much PERT people need (on average) in order to reduce symptoms.

  3. PERT Dosing Studies and Guidelines Only Focus on Fat (and we need to talk about protein)If you’ve read my previous blog posts about ratios and PERT dosing, you’ll notice I talk about protein dosing. For some people with EPI, protein dosing makes a huge difference in symptom outcomes.

    However, PERT is described based on units of lipase (for fat digestion) and primarily studied for fat, which means that doctors often prescribe it and only talk about changing PERT doses for different sized meals based on fat.

    This is a huge area of need for future studies to determine what role protein malabsorption plays for people with EPI. I suspect, based on personal experience and talking to others in the EPI community about when they have symptoms, this influences a lot of PERT dosing efficacy in real life.

  4. PERT Dosing Guidelines Are Very Different Around The World – But Should They Be?There are dozens of PERT dosing guidelines by condition, and in different parts of the world. They don’t always agree!

    My hypothesis is that this is not because of a true varying need geographically for PERT dosing (meaning your PERT dosing needs aren’t likely different if you live in South America or Europe), but because of the selection of studies used to determine the guidelines. And because most studies have only looked at basic, minimal doses for safety/efficacy, they haven’t studied how much people need to eliminate symptoms. There’s also no data on what people eat in these studies, so the ‘regional’ differences perceived may be a result of different composition of foods, but we have no evidence for this because the studies are poorly described and/or the studies don’t actually record this.

  5. PERT Dosing Guidelines Are Different By Co-Condition The majority of the studies on EPI and PERT dosing are in chronic pancreatitis (CP). As I’ve written previously, this is likely a small fraction of the number of people with EPI. But because this body of research on CP and EPI is so big, it has a very loud voice in determining what the guidelines say about PERT dosing. (Cystic fibrosis (CF) is the second-most studied and also plays the second-biggest role in influencing guidelines).

    If you want to dig in to the differences between conditions, note that the guidelines are influenced by the volume of studies, and so many conditions (such as diabetes) have very few guidelines and very few studies, so most of the ‘guidance’ on dosing is extrapolated from CF and/or chronic pancreatitis. It’s therefore very possible that people with EPI need more dosing or different dosing than is studied in those co-conditions – but we don’t know more because it hasn’t been studied!

    (I have a lot of details in the paper about what has been studied, and you can look at Table 4 for a summary of some of the less-studied conditions or check out the appendix for a narrative description of all of the co-conditions and their bodies of research.)

  6. PERT Dosing Is Determined By Clinicians And They’re Not Following The GuidelinesMost doctors and clinicians are not following PERT guidelines. This means that many people are prescribed a too-low dose of PERT according to the guidelines. This could be because providers are unaware of the guidelines; or don’t agree with the guidelines; or have not seen evidence showing clear effects of PERT on symptom resolution (in part because this hasn’t been studied!).

    More work needs to be done to understand why patients with EPI are under-prescribed and under-dosed when prescribed, and understanding barriers for clinicians may be a key factor to study moving forward.

So, what next?

Here’s what I want to see studied next for EPI, based on the findings in this paper:

  1. All PERT studies should clearly document the titration protocol in a way that can be understood and reproduced.
  2. PERT studies should record what dose people take throughout or at the end of the trial.
  3. PERT should be studied for symptom resolution. (PS – take the anonymous EPI symptom survey if you haven’t already!) This should be done outside of conditions such as chronic pancreatitis, because there is pain associated with CP that is confounding the results of EPI symptoms. And, CP is a tiny fraction of EPI and should not therefore be used to determine whether PERT is effective at resolving EPI-related symptoms.
  4. We need more awareness of the prevalence of EPI and for clinicians to screen for EPI. When elastase results are low (e.g. less than or equal to 200-ish), providers should initiate a trial of PERT and aid people in increasing their doses to the point that symptoms resolve. We need to study the barriers/factors determining why providers are not screening for EPI and why they are not prescribing PERT.
  5. We need more tools to help doctors and patients increase PERT dosing to achieve symptom resolution.
  6. We need studies on the effect of protein in the diet of people with EPI and PERT dosing to improve protein digestion.

If clinicians are reading this, here is your call to action:

  • Screen for EPI using a fecal elastase test. This includes anyone presenting with GI symptoms, not just in people that you suspect have chronic pancreatitis. You’re probably missing a not-insignificant number of people coming to you with EPI. For example, a previous systematic review shows EPI is likely much more common in people with diabetes than celiac or gastroparesis!
  • If fecal elastase results are around or below 200, prescribe PERT. Yes, even if they’re close to 200 – PERT can help for those with EPI who have symptoms!

    This study was published after our systematic review, so I wasn’t able to cite it in the paper, but includes evidence that PERT also can help reduce symptoms when elastase is 200-500. Don’t get too hung up on the elastase result, it’s not very precise but that doesn’t mean you shouldn’t prescribe a trial of PERT. 
  • Prescribe PERT at a minimum of 40,000-50,000 units PER MEAL and tell patients specifically to increase dosing as needed, such as when they’re eating larger meals. Many people need much larger doses (evidence here). Give guidance on how to adjust based on meals. If you want tools, consider things like PERT Pilot or other calculators to aid in matching dosing to food intake. This matches the recent AGA Clinical Practice Update on the Epidemiology, Evaluation, and Management of Exocrine Pancreatic Insufficiency (EPI) by Whitcomb et al which emphasizes that “PERT treats the meal, not the pancreas” meaning that PERT should match food intake.The level of elastase does NOT determine the dosing need, and the size of your prescriptions shouldn’t be influenced by the elastase result.

    All EPI needs PERT, and PERT needs should be driven by the individual’s symptoms and the dose it takes to reduce or eliminate their symptoms.

Here’s how to cite this paper:

Lewis DM, Rieke, JG, Almusaylim, K, Kanchibhatla, A, Blanchette, JE, Lewis, C. Exocrine Pancreatic Insufficiency Dosing Guidelines For Pancreatic Enzyme Replacement Therapy Vary Widely Across Disease Types. Digestive Diseases and Sciences. 2023. https://doi.org/10.1007/s10620-023-08184-w

Accepted, Rejected, and Conflict of Interest in Gastroenterology (And Why This Is A Symptom Of A Bigger Problem)

Recently, someone published a new clinical practice update on exocrine pancreatic insufficiency (known as EPI or PEI) in the journal called Gastroenterology, from the American Gastroenterology Association (AGA). Those of you who’ve read any of my blog posts in the last year know how much I’ve been working to raise awareness of EPI, which is very under-researched and under-treated clinically despite the prevalence rates in the general population and key sub-populations such as PWD. So when there was a new clinical practice update and another publication on EPI in general, I was jazzed and set out to read it immediately. Then frowned. Because, like so many articles about EPI, it’s not *quite* right about many things and it perpetuates a lot of the existing problems in the literature. So I did what I could, which was to check out the journal requirements for writing a letter to the editor (LTE) in response to this article and drafting and submitting a LTE article about it. To my delight, on October 17, 2023, I got an email indicating that my LTE was accepted.

You can find my LTE as a pre-print here.

See below why this pre-print version is important, and why you should read it, plus what it reminds us about what journal articles can or cannot tell us in healthcare.

Here’s an image of my acceptance email. I’ll call out a key part of the email:

A print of the acceptance email I received on October 17, 2023, indicating my letter would be sent to authors of the original articles for a chance to choose to respond (or not). Then my LTE would be published.

Letters to the Editor are sent to the authors of the original articles discussed in the letter so that they might have a chance to respond. Letters are not sent to the original article authors until the window of submission for letters responding to that article is closed (the last day of the issue month in which the article is published). Should the authors choose to respond to your letter, their response will appear alongside your letter in the journal.

Given the timeline described, I knew I wouldn’t hear more from the journal until the end of November. The article went online ahead of print in September, meaning likely officially published in October, so the letters wouldn’t be sent to authors until the end of October.

And then I did indeed hear back from the journal. On December 4, 2023, I got the following email:

A print of the email I received saying the LTE was now rejected
TLDR: just kidding, the committee – members of which published the article you’re responding to – and the editors have decided not to publish your article. 

I was surprised – and confused. The committee members, or at least 3 of them, wrote the article. They should have a chance to decide whether or not to write a response letter, which is standard. But telling the editors not to publish my LTE? That seems odd and in contrast to the initial acceptance email. What was going on?

I decided to write back and ask. “Hi (name redacted), this is very surprising. Could you please provide more detail on the decision making process for rescinding the already accepted LTE?”

The response?

Another email explaining that possible commercial affiliations influenced their choice to reject the article after accpeting it originally
In terms of this decision, possible commercial affiliations, as well as other judgments of priority and relevance among other submissions, dampened enthusiasm for this particular manuscript. Ultimately, it was not judged to be competitive for acceptance in the journal.

Huh? I don’t have any commercial affiliations. So I asked again, “Can you clarify what commercial affiliations were perceived? I have none (nor any financial conflict of interest; nor any funding related to my time spent on the article) and I wonder if there was a misunderstanding when reviewing this letter to the editor.”

The response was “There were concerns with the affiliation with OpenAPS; with the use of the term “guidelines,” which are distinct from this Clinical Practice Update; and with the overall focus being more fit for a cystic fibrosis or research audience rather than a GI audience.”

A final email saying the concern with my affiliation of OpenAPS, which is not a commercial organization nor related to the field of gastroenterology and EPI

Aha, I thought, there WAS a misunderstanding. (And the latter makes no sense in the context of my LTE – the point of it is that most research and clinical literature is a too-narrow focus, cystic fibrosis as one example – the very point is that a broad gastroenterology audience should pay attention to EPI).

I wrote back and explained how I, as a patient/independent researcher, struggle to submit articles to manuscript systems without a Ringgold-verified organization. (You can also listen to me describe the problem in a podcast, here, and I also talked about it in a peer-reviewed journal article about citizen science and health-related journal publishing here). So I use OpenAPS as an “affiliation” even though OpenAPS isn’t an organization. Let alone a commercial organization. I have no financial conflict of interest related to OpenAPS, and zero financial conflict of interest or commercial or any type of funding in gastroenterology at all, related to EPI or not. I actually go to such extremes to describe even perceived conflicts of interest, even non-financial ones, as you can see this in my disclosure statement publicly available from the New England Journal of Medicine here on our CREATE trial article (scroll to Supplemental Information and click on Disclosure Forms) where I articulate that I have no financial conflicts of interest but acknowledge openly that I created the algorithm used in the study. Yet, there’s no commercial or financial conflict of interest.

A screenshot from the publicly available disclosure form on NEJM's site, where I am so careful to indicate possible conflicts of interest that are not commercial or financial, such as the fact that I developed the algorithm that was used in that study. Again, that's a diabetes study and a diabetes example, the paper we are discussing here is on exocrine pancreatic insufficiency (EPI) and gastroenterology, which is unrelated. I have no COI in gastroenterology.

I sent this information back to the journal, explaining this, and asking if the editors would reconsider the situation, given that the authors (committee members?) have misconstrued my affiliation, and given that the LTE was originally accepted.

Sadly, there was no change. They are still declining to publish this article. And there is no change in my level of disappointment.

Interestingly, here is the article in which my LTE is in reply to, and the conflict of interest statement by the authors (committee members?) who possibly raised a flag about supposed concern about my (this is not true) commercial affiliation:

The conflict of interest statement for authors from the article "AGA Clinical Practice Update on the Epidemiology, Evaluation, and Management of Exocrine Pancreatic Insufficiency 2023"

The authors disclose the following: David C. Whitcomb: consultant for AbbVie, Nestlé, Regeneron; cofounder, consultant, board member, chief scientific officer, and equity holder for Ariel Precision Medicine. Anna M. Buchner: consultant for Olympus Corporation of America. Chris E. Forsmark: grant support from AbbVie; consultant for Nestlé; chair, National Pancreas Foundation Board of Directors.

As a side note, one of the companies with consulting and/or grant funding to two of the three authors is the biggest manufacturer of pancreatic enzyme replacement therapy (PERT), which is the treatment for EPI. I don’t think this conflict of interest makes these clinicians ineligible to write their article; nor do I think commercial interests should preclude anyone from publishing – but in my case, it is irrelevant, because I have none. But, it does seem weird given the stated COI for my (actually not a) COI then to be a reason to reject a LTE, of all things.

Here’s the point, though.

It’s not really about the fact that I had an accepted article rejected (although that is weird, to say the least…).

The point is that the presence of information in medical and research journals does not mean that they are correct. (See this post describing the incorrect facts presented about prevalence of EPI, for example.)

And similarly, the lack of presence of material in medical and research journals does not mean that something is not true or is not fact! 

There is a lot of gatekeeping in scientific and medical research. You can see it illustrated here in this accepted-rejected dance because of supposed COI (when there are zero commercial ties, let alone COI) and alluded to in terms of the priority of what gets published.

I see this often.

There is good research that goes unpublished because editors decide not to prioritize it (aka do not allow it to get published). There are many such factors in play affecting what gets published.

There are also systemic barriers.

  • Many journals require fees (called article processing charges or “APC”s) if your article is accepted for publication. If you don’t have funding, that means you can’t publish there unless you want to pay $2500 (or more) out of pocket. Some journals even have submission fees of hundreds of dollars, just to submit! (At least APCs are usually only levied if your article is accepted, but you won’t submit to these journals if you know you can’t pay the APC). That means the few journals in your field that don’t require APCs or fees are harder to get published in, because many more articles are submitted (thus, influencing the “prioritization” problem at the editor level) to the “free” journals.
  • Journals often require, as previously described, your organization to be part of a verified list (maintained by a third party org) in order for your article to be moved through the queue once submitted. Instead of n/a, I started listing “OpenAPS” as my affiliation and proactively writing to admin teams to let them know that my affiliation won’t be Ringgold-verified, explaining that it’s not an org/I’m not at any institution, and then my article can (usually) get moved through the queue ok. But as I wrote in this peer-reviewed article with a lot of other details about barriers to publishing citizen science and other patient-driven work, it’s one of many barriers involved in the publication process. It’s a little hard, every journal and submission system is a little different, and it’s a lot harder for us than it is for people who have staff/support to help them get articles published in journals.

I’ve seen grant funders say no to funding researchers who haven’t published yet; but editors also won’t prioritize them to publish on a topic in a field where they haven’t been funded yet or aren’t well known. Or they aren’t at a prestigious organization. Or they don’t have the “right” credentials. (Ahem, ahem, ahem). It can be a vicious cycle for even traditional (aka day job) researchers and clinicians. Now imagine that for people who are not inside those systems of academia or medical organizations.

Yet, think about where much of knowledge is captured, created, translated, studied – it’s not solely in these organizations.

Thus, the mismatch. What’s in journals isn’t always right, and the process of peer review can’t catch everything. It’s not a perfect system. But what I want you to take away, if you didn’t already have this context, is an understanding that what’s NOT in a journal is not because the information is not fact or does not exist. It may have not been studied yet; or it may have been blocked from publication by the systemic forces in play.

As I said at the end of my LTE:

It is also critical to update the knowledge base of EPI beyond the sub-populations of cystic fibrosis and chronic pancreatitis that are currently over-represented in the EPI-related literature. Building upon this updated research base will enable future guidelines, including those like the AGA Clinical Practice Update on EPI, to be clearer, more evidence-based, and truly patient-centric ensuring that every individual living with exocrine pancreatic insufficiency receives optimal care.

PS – want to read my LTE that was accepted then rejected, meaning it won’t be present in the journal? Here it is on a preprint server with a DOI, which means it’s still easily citable! Here’s an example citation:

Lewis, D. Navigating Ambiguities in Exocrine Pancreatic Insufficiency. OSF Preprints. 2023. DOI: 10.31219/osf.io/xcnf6

New Survey For Everyone (Including You – Yes, You!) To Help Us Learn More About Exocrine Pancreatic Insufficiency

If you’ve ever wanted to help with some of my research, this is for you. Yes, you! I am asking people in the general public to take a survey (https://bit.ly/GI-Symptom-Survey-All) and share their experiences.

Why?

Many people have stomach or digestion problems occasionally. For some people, these symptoms happen more often. In some cases, the symptoms are related to exocrine pancreatic insufficiency (known as EPI or PEI). But to date, there have been few studies looking at the frequency of symptoms – or the level of their self-rated severity – in people with EPI or what symptoms may distinguish EPI from other GI-related conditions.

That’s where this survey comes in! We want to compare the experiences of people with EPI to people without EPI (like you!).

Will you help by taking this survey?

Your anonymous participation in this survey will help us understand the unique experiences individuals have with GI symptoms, including those with conditions like exocrine pancreatic insufficiency (EPI). In particular, data contributed by people without EPI will help us understand how the EPI experience is different (or not).

A note on privacy:

  • The survey is completely anonymous; no identifying information will be collected.
  • You can stop the survey at any point.

Who designed this survey:

Dana Lewis, an independent researcher, developed the survey and will manage the survey data. This survey design and the choice to run this survey is not influenced by funding from or affiliations with any organizations.

What happens to the data collected in this survey:

The aggregated data will be analyzed for patterns and shared through blog posts and academic publications. No individual data will be shared. This will help fill some of the documented gaps in the EPI-related medical knowledge and may influence the design of targeted research studies in the future.

Have Questions?
Feel free to reach out to Dana+GISymptomSurvey@OpenAPS.org.

How else can you help?
Remember, ANYONE can take this survey. So, feel free to share the link with your family and friends – they can take it, too!

Here’s a link to the survey that you can share (after taking it yourself, of course!): https://bit.ly/GI-Symptom-Survey-All

You (yes you!) can help us learn about exocrine pancreatic insufficiency by taking the survey linked on this page.

MacrosOnTheRun: an iOS app for tracking activity fuel consumption

Last year, I built a spreadsheet template (and shared it here) to use while training and running ultramarathons to track my fuel consumption. It was helpful for me, as a person with exocrine pancreatic insufficiency, to see and decide based on macronutrient counts for each snack how many enzyme pills I needed to take each time I fueled, which is every 30 minutes.

This year, I got tired of messing with the spreadsheet while running. I don’t mind the data entry, but because of the iterative calculations updating with the hourly and overall totals of carbs, sodium, calories per hour etc, the Google Sheet would get bogged down over time, especially when I was running for 16 hours (like during my 100k in March). That would cause the Google Sheets app to crash and reload, or kick me out of the sheet and require me to click back in, wait for it to catch up, before entering my fuel item. It only took a couple of seconds, but it was annoying to have that delay while I was running.

I thought about not logging my fueling while running, especially because I had switched to a slightly more expensive but also larger over-the-counter (OTC) enzyme pill that basically covers every single snack I take with one single pill. That requires less mid-run decision making about how many to take, so it’s less important during the run to see each snack’s composition: I simply swallow a pill each time I do fuel.

Yet, after 1-2 runs of 2-3 hours where I didn’t log my intake, I still found myself missing the data from the run. Although the primary use case of in-run decision making wasn’t there for enzyme dosing, the secondary use case of making sure I was consuming enough sodium per hour and calories per hour relative to my goals was still there. I still wanted to offload that hourly tracking so I didn’t have to remember how much I had had in the last hour. Plus, the post-run data summary was nice, because it helped me evaluate my fueling overall in the grand scheme of my daily nutritional intake, which is particularly helpful for me in making sure I’m consuming enough protein to match my ultra-running activities.

And, I had figured out last year how to develop iOS apps (check out PERT Pilot if you have EPI, and Carb Pilot if you’re someone who’d like to simply use AI to generate estimates of how many carbs or macronutrients are in what you’re eating) with the help of an LLM. So I decided to try to build a custom, just for me app to mimic my spreadsheet in order to easily track my fueling on the run.

Tada! I made MacrosOnTheRun.Macros on the run logo showing "on the run" below the word Macros, stylized to look like 'on the run' is a drop down menu, reminiscent of the fuel list drop down in the app

It’s pretty simple: I open the app, hit ‘start run’, and then click the drop down and tap the fuel item (or electrolyte) that I’m consuming. I hit “add fuel”, and the items drops into the list on the screen and is added to the hourly and overall estimates shown above the drop down.

Screenshot of MacrosOnTheRun showing a pre-populated fuel list to select from and on the right, a screenshot at the end of a 9 hour run with fuel totals and individual fuel items entered
An example during a long run where after the run I open the app to export my in-run data. This is after the run, so you’ll see it’s been 97 minutes since the last fuel when I took that screenshot, and thus the sodium per hour and calories per hour calculation shows 0 given that it’s been >60 minutes since the last fuel. Below that is the total run stats, including enzymes and electrolytes counts. Given that I fuel like clockwork every 30 minutes, you can infer this was a 9 hour run since I took 18 enzymes!

When I’m done with the run, I tap the “stop and export” button at the bottom, which opens the iOS share sheet and enables me to email the CSV file to myself, so I can copy/paste the data back into the same spreadsheet template I was using before. It’s useful because I have all my runs stored as individual tabs in the sheet, and the template (same one I was using last year) autopopulates the pivot table with hourly summaries so I can see across each hour whether I was meeting my sodium and fueling goals. (Check out the 27 hour summary table in my 100 mile recap if you’re curious to see an example!)

Right now, I haven’t bothered to add a feature to edit in-app what the fuel list is – mine is programmed in via the code of the app itself, since I’m the only one using it – and I haven’t published it to the iOS App Store because I didn’t think anyone else would want to use it.

But, if I’m wrong, and this is something you’d like to use – let me know by commenting here or emailing me (Dana+MacrosOnTheRun@OpenAPS.org) and letting me know. If there’s interest, I can modify the app to allow in-app fuel list entry and modifications of the fuel list and then share it via TestFlight or in the App Store for other people to download and use.