Richard Sprague

My personal website


Rice Experiment 2020-11

Richard Sprague 11/19/2020

Summary

After six weeks of very low carb eating, (I believe) I’m fat-adapted enough to try re-introducing some carbs carefully to see if I can find optimal amounts and combinations that work for me.

Rice provides daily nourishment to billions of people, and for thousands of years it has supported the (genes) of people throughout the world. How could it not be good for me too?

Although freshly-made hot rice undeniably causes a sharp rise in blood glucose levels associated with ill health, could there be ways to tone it down through different preparation methods?

To find out, I did a multi-day experiment testing the affect rice has on my glucose levels. I tested rice-eating on an empty stomach at roughly the same time each morning, after measuring waking glucose and ketone levels, and then tracking myself with a continuous glucose monitor (CGM)

Methods

I tested the following preparation methods:

2020-11-16

At 9am, on an empty stomach and stable glucose readings:

1 cup (160g) short grain oriza sativa japanica rice (soaked overnight and cooked at 6am) = 53g carbs, 4g protein

Within 45 minutes, I could feel shakiness in my body as my blood glucose shot up 100 mg/dL higher (from 84 to 171)

max = 179 min = 88 (rise = 91)

2020-11-17 9:10 AM One cup (160g) reheated rice.

Max = 164 Min = 68 (rise = 96)

2020-11-18 9:00 AM

Reheated cooked rice

According to Cronometer, this meal was:


I measured glucose levels with an Abbott Freestyle Libre (see details) backed up with a Keto-Mojo blood glucose and ketone meter. The data is kept

Results

## I know, I know: The following code works but is not very elegant.  I'll try to clean it up someday.
## For now, the important thing is to keep it reproducible. You should be able to get the same results 
##   using the same raw data published here.


library(tidyverse)
library(lubridate)
library(cgmr) # https://github.com/richardsprague/cgm

librelink_raw_csv <- url("https://richardsprague.com/data/RichardSprague_glucose_11-18-2020.csv") 
# file.path("RichardSprague_glucose_11-18-2020.csv")



## This takes a "naked" CSV fie as downloadef from Abbot's Librelink site and returns a dataframe formatted for use by the cgmr package

read_librelink_csv <- function(file) {
  
  
  glucose_raw <-
    readr::read_csv(file, skip = 1, col_types = "cccdddddcddddcddddd") %>%
    transmute(
      timestamp = lubridate::mdy_hm(`Device Timestamp`) %>% force_tz(tzone = Sys.timezone()),
      record_type = `Record Type`,
      glucose_historic = `Historic Glucose mg/dL`,
      glucose_scan = `Scan Glucose mg/dL`,
      strip_glucose = `Strip Glucose mg/dL`,
      notes = Notes
    )
  
  
  glucose_df <- glucose_raw  %>% transmute(time = `timestamp`,
                                           scan = glucose_scan, 
                                           hist = glucose_historic, 
                                           strip = strip_glucose, 
                                           value = dplyr::if_else(is.na(scan),hist,scan),
                                           food = notes) #as.character(stringr::str_match(notes,"Notes=.*")))
  
  glucose_df %>% add_column(user_id = 1234)
  
}

glucose_records <- read_librelink_csv(file = librelink_raw_csv) %>% filter(time >= "2020-11-16")

glucose_raw <- glucose_records %>% filter(!(is.na(value) & is.na(food))) # &is.na(strip)))

activity_raw <- glucose_records %>% filter(!is.na(food) & time > "2020-11-01") %>% transmute(Start = time, 
                                                                          End = as_datetime(NA),
                                                                          Activity = "Food",
                                                                          Comment = food,
                                                                          Z = as.double(NA)) %>% 
  bind_rows(activity_raw)


foodlist <- c("Rice plain white", "Rice reheated", "Rice reheated with coconut chicken kimchi")


cgmr::cgm_display(start = as_datetime("2020-11-16"),
                  end = as_datetime("2020-11-19"), 
                  activity_df = activity_raw, 
                  glucose_df = glucose_raw,
                  title = "Glucose Levels 24x7")

g <- cgmr::food_compare_display(foodlist, 
                           timelength = 60 * 3,
                           activity_df = activity_raw,
                           glucose_df = glucose_raw, 
                           foodtype = "rice")

g+ scale_color_discrete(
                    name="Rice Preparation\nMethod",
                    labels = c("Plain",
                               "Reheated",
                               "w/Fat, Protein")) +
 labs(title = "Glucose Levels After Eating Rice") +
  theme(text = element_text(size = 18), plot.title = element_text(size = 24)) +
  annotate(geom="text", x = 60, y = 170, label = "AUC 352", color = "red") +
  annotate(geom="text", x = 125, y = 120, label = "AUC 329", color = "darkgreen") +
  annotate(geom="text", x = 140, y = 100, label = "AUC 336", color = "blue") 

Simply eyeballing the chart makes clear that plain, freshly-cooked rice causes the biggest, fasted spike, but to more precisely compare my three different preparation methods, I also measured the AUC (“Area Under the Curve”) for each of my trials.

t <- glucose_raw %>% filter(food %in% foodlist)

tibble(`Preparation Method`=c("Freshly Cooked", "Reheated", "Rehead with Coconut and Kimchi"),
       AUC = c(
glucose_raw %>% filter(time >= t[1,"time"]$time & time < t[1,"time"]$time+hours(3)) %>%
  filter(!is.na(value)) %>% cgmr::auc_calc(timelength = 60 * 3),
glucose_raw %>% filter(time >= t[2,"time"]$time & time < t[2,"time"]$time+hours(3)) %>%
  filter(!is.na(value)) %>% cgmr::auc_calc(timelength = 60 * 3),

glucose_raw %>% filter(time >= t[3,"time"]$time & time < t[3,"time"]$time+hours(3)) %>%
  filter(!is.na(value)) %>% cgmr::auc_calc(timelength = 60 * 3))) %>% knitr::kable(digits = 0)
Preparation Method AUC
Freshly Cooked 352
Reheated 329
Rehead with Coconut and Kimchi 336

Conclusion

Reheating the rice after refrigeration may decrease the glucose response a little, but adding additional fat and protein has little effect after that.


References

A 2016 study from Singapore measured glucose levels in 12 people as they ate rice and showed that the glycemic index is cut in half when eaten together with fat, chicken, and vegetables.

Note that glucose is measured in mmol/L instead of mg/dL that we use in the US. Roughly, a 4.0 mmol/L is about 72 mg/dL; 8.0 mmol/L is 144 mg/dL. Use an online calculator to do the conversion.