Chapter 37 NPSsimulation
Q. Within pain task, Does stimulus intenisty level and cue level significantly predict NPS dotproducts?
37.0.4 get pain relationship, controlling for cue, cuetype, expect
<- lmer(event04_actual_angle ~
model.stim +
STIM_linear + STIM_quadratic+ EXPECT_demean +
CUE_high_gt_low +
EXPECT_cmc +
ses 1|sub), data = df
(
) # CUE_high_gt_low+STIM+EXPECT_demean
::tab_model(model.stim,
sjPlottitle = "Multilevel-modeling: \nlmer(NPSpos ~ CUE + STIM + EXPECT_demean + SES + (1| sub), data = pvc)",
CSS = list(css.table = '+font-size: 12;'))
event04_actual_angle | |||
---|---|---|---|
Predictors | Estimates | CI | p |
(Intercept) | 71.33 | 68.56 – 74.10 | <0.001 |
STIM linear | 29.89 | 28.43 – 31.34 | <0.001 |
CUE high gt low | -2.04 | -3.55 – -0.53 | 0.008 |
STIM quadratic | 1.34 | 0.07 – 2.62 | 0.039 |
EXPECT demean | 0.30 | 0.28 – 0.33 | <0.001 |
EXPECT cmc | 0.93 | 0.84 – 1.02 | <0.001 |
sesses-03 | -7.22 | -8.86 – -5.59 | <0.001 |
sesses-04 | -7.45 | -9.07 – -5.83 | <0.001 |
Random Effects | |||
σ2 | 366.84 | ||
τ00 sub | 157.35 | ||
ICC | 0.30 | ||
N sub | 96 | ||
Observations | 4004 | ||
Marginal R2 / Conditional R2 | 0.645 / 0.751 |
# re.beta <- coef(model.stim)$unit[,"x"]
<-as.data.frame(fixef(model.stim))
fixEffect_expect <-as.data.frame(ranef(model.stim)) randEffect_expect
= 12
ntrials = 48;
lowintens = 49;
medintens = 50;
highintens <- 48:50
stim = 30 # average pain; arbitrary, on a 0 - 100 scale
painmean = fixEffect_expect['STIM_linear',1] # rise in pain per unit change in stim (per degree)
painslope = 0.33621048
painslope_stan <- function(object) {
stdCoef.merMod <- sd(getME(object,"y"))
sdy <- apply(getME(object,"X"), 2, sd)
sdx <- fixef(object)*sdx/sdy
sc <- coef(summary(object))[,"Std. Error"]
se.fixef <- se.fixef*sdx/sdy
se return(data.frame(stdcoef=sc, stdse=se))
}stdCoef.merMod(model.stim)
## stdcoef stdse
## (Intercept) 0.00000000 0.000000000
## STIM_linear 0.31648413 0.007848709
## CUE_high_gt_low -0.02640086 0.009953683
## STIM_quadratic 0.01621649 0.007849931
## EXPECT_demean 0.22157672 0.009947333
## EXPECT_cmc 0.69471095 0.034434185
## sesses-03 -0.08777975 0.010153298
## sesses-04 -0.09126342 0.010120143
# # library(limma)
# S <- rep(stim,times=ntrials) # stim
# C <- rep(rep(c(1,-1), each = 3), times = 6) #cue
# E <- painslope * (C + rnorm(length(C))) + painmean # pseudo nociception
# Szscore <- (S - mean(S)) / sd(S)
$S <- as.numeric(mapvalues(df$stimintensity,
dffrom = c("low", "med", "high"), c(48, 49, 50)))
$C <- as.numeric(mapvalues(df$cuetype,
dffrom = c("cuetype-low", "cuetype-high"), c(-1, 1)))
$E <- painslope * (df$C + rnorm(length(df$C))) + painmean
df
$Szscore <- (df$S - mean(df$S, na.rm = TRUE)) / sd(df$S)
df
$Pcalib = df$Szscore * painslope + painmean + rnorm(length(df$C))
df
<- lmer(Pcalib ~ S + (1|sub), df) model.stim2pain
## boundary (singular) fit: see help('isSingular')
= fixef(model.stim2pain)[2] #0.4126089 #36.5757
b_stim2pain
$Sprime = df$Szscore * b_stim2pain + painmean
df
<- df %>%
df group_by(sub) %>%
mutate(E = as.numeric(E)) %>%
mutate(avg_E = mean(E, na.rm = TRUE)) %>%
mutate(E_demean = E - avg_E) %>%
mutate(E_cmc = avg_E - mean(avg_E))
37.1 simulation **
= 0.5
w
= rnorm(length(df$C))
error
$P.assim <- w * df$Sprime + (1 - w) * df$E + error
df
$P.pe = df$Sprime - df$E + error
df
$P.adapt <- 1
df<- abs(df$Sprime - df$E)/std(df$Sprime) < b_stim2pain
minimal.diff <- abs(df$Sprime - df$E)/std(df$Sprime) > b_stim2pain
large.diff $P.adapt[minimal.diff] <- w * df$Sprime[minimal.diff] + (1 - w) * df$E[minimal.diff] + error[minimal.diff]
df$P.adapt[large.diff] <- w * df$Sprime[large.diff] + error[large.diff] df