Bias, meditation and the pursuit of clarity

Quick summary: In this post, I evaluate the effect of the “anchoring heuristic” on my meditation data by dabbling with Bayesian(ish?) model fitting. I also find that my perceived clarity is not improving with time. I ask for your favourite explanations. Markdown code for the analysis can be found here: [link]

For a while now, I’ve been collecting data to keep me motivated with my daily meditation practice. This is the first time I took a sneak peek into it, just to see how much my assessments depend on the so-called anchoring effect.

Roughly speaking, the anchoring effect is said to be a cognitive bias, where people base (“anchor”) their estimates on unrelated previous information. For example, in one classic study, people were asked for the proportion of African countries in the United Nations after spinning a wheel of fortune to obtain a random number. Those who got a big number guessed a high proportion, and those who got a low number went for a low proportion.

My meditation practice is 120 minutes a day, broken down into a combination of 30/60/90 minute blocks. One of the 30 minute blocks is a 20 minute Headspace session (the extra 10 minutes come from the time it takes to feel out and log the variables I’m interested in).

This is how my spreadsheet begins every day (there are ~45 columns total).

Column A is the date, column B is the “package”, or type of meditation, column C is the day within the package. There are 30 days per package, so column C is a number that runs from 1 to 30 for each package number. Finally, column D is my subjective sense of clarity, from 1 (completely unclear) through 5 (not clear nor unclear) to 10 (completely clear).

Now, because I jot down the clarity assessment right after the day number, I would expect higher day numbers to boost my clarity assessment because of the anchoring effect. Why? Because Kahneman, in his famous book Thinking Fast and Slow, proclaims:

[D]isbelief is not an option. […] You have no choice but to accept that the major conclusions of these studies are true. More important, you must accept that they are true about you. - Daniel Kahneman

Without going too deep into the sorry state of replicability in priming effects (anchoring seems robust, though), let’s see how this particular effect may have affected my assessments:

# Put the data (all days which contain both the day number and clarity assessment for the day) into a data frame:

daynum <- c(2, 6, 7, 8, 9, 10, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 1, 2, 3, 4, 5, 6, 7, 8, 9, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 1, 2, 4, 5, 6, 7, 8, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 , 12, 13, 14, 15, 16, 17 , 18, 19, 20, 21, 22, 23, 7, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 1, 2, 3, 4, 5, 6, 7, 7, 8, 9, 10, 11, 12, 13, 14, 15 , 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 1, 2, 3, 4, 5)

clarity <- c(7, 3.5, 5.25, 4, 4.75, 4, 3.75, 7, 8, 6.75, 4, 4.75, 3.5, 3.75, 4.5, 5, 3.75, 4.75, 3, 5.5, 4.25, 4, 3.75, 5, 4.5, 4.75, 5.25, 7.25, 4.75, 3.5, 6.25, 6, 5.75, 3.75, 3, 6, 3.75, 6.75, 7, 6, 6, 7.75, 6, 5.5, 3.75, 4, 4, 6, 5, 4, 5, 6.75, 5.5, 5, 4, 3, 4, 6.25, 3.25, 5, 4, 4, 5, 4, 6, 3.25, 4, 5, 4, 6.5, 5.75, 3, 5, 7.5, 5, 6.5, 6.25, 6.75, 5.25, 7, 3.75, 7, 3.25, 4.5, 6.5, 7.5, 4, 6, 6, 6, 4, 5, 6, 4, 4.5, 6, 4, 4, 7, 4, 6, 7, 6.25, 4, 4, 4.5, 6, 7.5, 4.25, 4, 3, 5, 5, 5.25, 4.5, 6, 5.5, 4.75, 5, 5, 6.75, 4.75, 7, 4.75, 5, 4.75, 6, 5.25, 6, 6.75, 7, 5.5, 3.5, 6, 5, 5, 5.75, 5, 6, 6, 5, 7, 5.25, 4, 6.5, 7.75, 5.25, 4, 6.75, 6.25, 4, 5, 5.25, 5.25, 5.25, 6.75, 6, 4, 5.75, 4, 6, 6, 6, 6.5, 5.75, 6.75, 5.5, 5.75, 6, 5, 5, 4, 6, 6.5, 5.75, 5.5, 6.5, 5, 6, 6.25, 6, 6, 6, 4.5, 5.5, 6.25, 5, 5, 3.75, 6, 4.75, 4.75, 6.25, 5, 6, 6, 5, 6, 6, 5, 6, 4.75, 6, 6, 5, 4.5, 6.75, 5, 5, 4, 6, 3.75, 4, 3.5, 6, 6, 3.25, 4, 3.75, 5, 4.5, 3.75, 4, 5, 5, 5, 5.5, 4.5, 4, 3.75, 6.75, 6.25, 4, 4, 4, 4.5, 7, 4, 6.75, 4, 4.5, 5.5, 6.5, 6, 4, 6, 5, 5, 6.25, 4.75, 6.25, 6.75, 6, 7.5, 5.5, 5.75, 5.5, 5.75, 4.75, 4.75, 4, 5, 5, 7.5, 5, 6.25, 5.25, 6, 6.25, 4.75, 5.5, 6, 6, 3.75, 3.75, 4, 3.75, 6.5, 5, 5, 5.75, 4.25, 6.25, 6, 4, 5.25, 4, 4.75, 5, 5.75, 4.75, 5, 5, 4.75, 6, 4.75, 5.5, 4, 6, 6, 4, 5, 4.5, 3.75, 6, 4, 4.75, 6.5, 6.75, 6.25, 6, 6.25, 6, 5.5, 5, 3, 5, 6, 4, 6, 4.75, 5.5, 4.5, 5, 4, 6, 6.25, 4.75, 5.25, 4.5, 5, 5.5, 5, 6, 6, 4.75, 4, 5.5, 3.75, 4, 3.75, 5, 5.5, 4.5, 3.5, 6, 5.75, 5.25, 5.75, 4.75, 6, 5, 6, 6, 7, 5.25, 5.75, 5.5, 5, 5, 4.75, 5.25, 5.5, 6, 5, 6, 3, 6, 3.75, 5.75, 6, 5, 4.25, 6, 4.5, 6.5, 5, 3.75, 4, 6, 5, 4, 6.25, 5.75, 4.75, 4.5, 6.25, 6, 3, 5, 5.25, 4, 4.5, 4, 4.5, 6, 6, 5.25, 6, 3.75, 5.25, 6, 6, 6, 6.25, 4.75, 4.5, 6, 4.75, 4.25, 5, 5, 4, 5.5, 5.25, 4, 4.75, 5.5, 6, 6.75, 4.25, 5.75, 6, 5.5, 5.75, 6.5, 4.75, 5, 6, 5, 5.75, 5.5, 5.25, 5, 5.5, 4.75, 6.25, 6.5, 6.5, 6, 5.5, 6.25, 5.5, 4.5, 5.25, 5, 7, 5.75, 6.75, 5.25, 6, 6, 5, 6.75, 5, 5, 5, 4, 4, 5, 6.5, 5, 4, 6, 5, 7.5, 5.5, 6.25, 5.5, 6.25, 4, 6, 5.5, 5.25, 6.25, 6.25, 4.75, 5.75, 7.25, 5.5, 4, 6.5, 6.25, 5.75, 4.75, 5.75, 5.25, 6, 5.75, 6.75, 4.5, 5.5, 4.5, 5.5, 4.75, 4.5)

d <- data.frame(daynum, clarity)

# Load the Rethinking-package:
if(!require(rethinking)){install.packages('rethinking')}
library(rethinking)

# Make a Maximum A Posteriori (MAP) model with weakish priors:
m.data <- map(
    alist(
        clarity ~ dnorm(mu, sigma),
        mu <- a + b*daynum,
        a ~ dnorm(5, 2.5),
        b ~ dnorm(0.15, 0.3),
        sigma ~ dunif(0, 2)
    ),
    data = d
    )

# Plot the data and the regression line:

plot(jitter(clarity, 1.5) ~ jitter(daynum, 1.5), xlab = "Day #", ylab = "Clarity", xlim = c(0,30), data = d, col = col.alpha(rangi2, 0.8))
abline(a = coef(m.data)["a"], b = coef(m.data)["b"])

# Visualise HPDI:
post <- extract.samples(m.data)
seq <- -2:32

means <- sapply(seq, function(daynum) {
                        post$a + post$b * daynum
                        })
HPDI50 <- apply(means, 2, HPDI, prob = 0.50)
HPDI90 <- apply(means, 2, HPDI, prob = 0.90)

shade(HPDI50, seq)
shade(HPDI90, seq)

hpdiframe <- as.data.frame(HPDI(post$b, prob=0.9))

D’oh! If anchoring was affecting my clarity assessment, the line in the plot should have gone up from left to right. It clearly does not.

[In technical blahblah: The plot above shows (slightly jittered) values for clarity for each day number and the Maximum A Posteriori (MAP) line. It’s basically linear regression with priors, and with this much data the priors don’t matter much. Darker shade hugging the line shows the 50% highest probability density interval (top 50% of most probable lines) and the lighter shade shows the 90% interval. Read more about priors here and learn everything you ever need to know about making inferences here]

I would have expected the slope of the line to be positive, maybe something like 0.15. Instead, the most credible (90%) interval for the slope of the line is from -0.0152 to 0.

What if the magic hides in row numbering?

If you look again at the picture of my spreadsheet in the beginning of this post, you’ll notice that left to the date cell, there’s the row number. Perhaps that’s where I tend to anchor at?

So let’s see how clarity changes with the running number of the row:

d$obsnum <- 1:496

# Make a Maximum A Posteriori (MAP) model with weakish priors:
m.data2 <- map(
    alist(
        clarity ~ dnorm(mu, sigma),
        mu <- a + b*obsnum,
        a ~ dnorm(5, 2.5),
        b ~ dnorm(0.15, 0.3),
        sigma ~ dunif(0, 2)
    ),
    data = d
    )

# Plot the data and the regression line:

plot(jitter(clarity, 1.5) ~ jitter(obsnum, 1.5), xlab = "Observation #", ylab = "Clarity", xlim = c(0, 496), data = d, col = col.alpha(rangi2, 0.8))
abline(a = coef(m.data2)["a"], b = coef(m.data2)["b"])

# Visualise HPDI:
post2 <- extract.samples(m.data2)
seq2 <- -50:550

means2 <- sapply(seq2, function(obsnum) {
                        post2$a + post2$b * obsnum
                        })
HPDI50.2 <- apply(means2, 2, HPDI, prob = 0.50)
HPDI90.2 <- apply(means2, 2, HPDI, prob = 0.90)

shade(HPDI50.2, seq2)
shade(HPDI90.2, seq2)

hpdiframe2 <- as.data.frame(HPDI(post2$b, prob=0.9))

Yay! At least now the slope is positive. Although, upon closer inspection, the 90% interval is from 10^{-4} to 0.0011. Which is pretty much zero.

Another thing this plot reveals, is that my clarity assessment hasn’t gone up during the past 500+ days. This might be because there has not been an effect (I wasn’t exactly a meditation newbie when I started). Alternatively, I may unconsciously keep shifting the scale (what I would have considered “clear” a year ago, now seems less so). What do you think?

And why am I not seeing an anchoring effect here, what am I missing?

Any thoughts?