Accuracy Analyses for Learning Session
Data Files
#Libraries
library(itsadug)
library(sciplot)
library(gplots)
library(boot)
library(parallel)
library(dplyr)
library(mgcv)
#Data are in two files, one for the category-learning group, and one for the paired-associate-learning group
#Category learning
dat1<-read.table("train_cat.txt", header=T)
#convert to factor
dat1$sbj<-as.factor(dat1$sbj); dat1$group<-as.factor(dat1$group);dat1$sub<-as.factor(dat1$sub);
dat1$stim<-as.factor(dat1$stim);dat1$corr_resp<-as.factor(dat1$corr_resp);
dat1$cnd<-as.factor(dat1$cnd); dat1$item<-as.factor(dat1$item)
#change name of "stim" to "shape"
names(dat1)[names(dat1) == "stim"] <- "shape"
#re-order based on trial
dat1<-dat1[order(dat1$sbj,dat1$trial),]
#in the DMDX scipt, no response is coded as -10000. Make necessary conversions
dat1$rt<-ifelse(dat1$rt==-10000,NA, dat1$rt)
str(dat1)
## 'data.frame': 6912 obs. of 11 variables:
## $ sbj : Factor w/ 24 levels "aggfyt95","agkxri94",..: 1 1 1 1 1 1 1 1 1 1 ...
## $ trial : int 1 2 3 4 5 6 7 8 9 10 ...
## $ item : Factor w/ 288 levels "11013124","11021423",..: 5 78 222 77 73 2 147 220 145 74 ...
## $ rt : num -4741 -2159 -2570 -3123 2215 ...
## $ group : Factor w/ 1 level "CAT": 1 1 1 1 1 1 1 1 1 1 ...
## $ sub : Factor w/ 8 levels "s1","s2","s3",..: 4 4 4 4 4 4 4 4 4 4 ...
## $ acc : int 0 0 0 0 1 0 0 0 0 1 ...
## $ shape : Factor w/ 4 levels "rand21","rand22",..: 2 3 4 3 3 2 1 4 1 3 ...
## $ stim_ : chr "s4rand22" "s4rand23" "s4rand30" "s4rand23" ...
## $ corr_resp: Factor w/ 4 levels "ideo1","ideo2",..: 2 1 3 1 1 2 4 3 4 1 ...
## $ cnd : Factor w/ 2 levels "ideo","pseudo": 1 1 2 1 1 1 2 2 2 1 ...
# Paired-associate learning
dat2<-read.table("train_pa.txt", header=T)
#convert to factor
dat2$sbj<-as.factor(dat2$sbj); dat2$group<-as.factor(dat2$group);dat2$sub<-as.factor(dat2$sub);
dat2$stim<-as.factor(dat2$stim);dat2$corr_resp<-as.factor(dat2$corr_resp);
dat2$cnd<-as.factor(dat2$cnd); dat2$item<-as.factor(dat2$item)
#change name of "stim" variable to "shape"
names(dat2)[names(dat2) == "stim"] <- "shape"
#re-order based on trial
dat2<-dat2[order(dat2$sbj,dat2$trial),]
#in the DMDX scipt, no response is coded as -10000. Make necessary conversions
dat2$rt<-ifelse(dat2$rt==-10000,NA, dat2$rt)
str(dat2)
## 'data.frame': 6912 obs. of 11 variables:
## $ sbj : Factor w/ 24 levels "agkart97","anakou97",..: 1 1 1 1 1 1 1 1 1 1 ...
## $ trial : int 1 2 3 4 5 6 7 8 9 10 ...
## $ item : Factor w/ 288 levels "11013124","11021423",..: 5 78 222 77 73 2 147 220 145 74 ...
## $ rt : num -1092 -2465 -1631 -1894 699 ...
## $ group : Factor w/ 1 level "PA": 1 1 1 1 1 1 1 1 1 1 ...
## $ sub : Factor w/ 8 levels "s1","s2","s3",..: 3 3 3 3 3 3 3 3 3 3 ...
## $ acc : int 0 0 0 0 1 0 0 0 0 1 ...
## $ shape : Factor w/ 4 levels "rand21","rand22",..: 2 3 4 3 3 2 1 4 1 3 ...
## $ stim_ : chr "s3rand22" "s3rand23" "s3rand30" "s3rand23" ...
## $ corr_resp: Factor w/ 4 levels "ideo1","ideo2",..: 2 1 4 1 1 2 3 4 3 1 ...
## $ cnd : Factor w/ 2 levels "ideo","pseudo": 1 1 2 1 1 1 2 2 2 1 ...
#Combine data into one data frame
dat<-rbind(dat1, dat2)
str(dat)
## 'data.frame': 13824 obs. of 11 variables:
## $ sbj : Factor w/ 48 levels "aggfyt95","agkxri94",..: 1 1 1 1 1 1 1 1 1 1 ...
## $ trial : int 1 2 3 4 5 6 7 8 9 10 ...
## $ item : Factor w/ 288 levels "11013124","11021423",..: 5 78 222 77 73 2 147 220 145 74 ...
## $ rt : num -4741 -2159 -2570 -3123 2215 ...
## $ group : Factor w/ 2 levels "CAT","PA": 1 1 1 1 1 1 1 1 1 1 ...
## $ sub : Factor w/ 8 levels "s1","s2","s3",..: 4 4 4 4 4 4 4 4 4 4 ...
## $ acc : int 0 0 0 0 1 0 0 0 0 1 ...
## $ shape : Factor w/ 4 levels "rand21","rand22",..: 2 3 4 3 3 2 1 4 1 3 ...
## $ stim_ : chr "s4rand22" "s4rand23" "s4rand30" "s4rand23" ...
## $ corr_resp: Factor w/ 4 levels "ideo1","ideo2",..: 2 1 3 1 1 2 4 3 4 1 ...
## $ cnd : Factor w/ 2 levels "ideo","pseudo": 1 1 2 1 1 1 2 2 2 1 ...
Preprocessing
#Count Non-Available Data (missing data points)
#Category learning
sum(is.na(dat[dat$group=="CAT",]$rt))
## [1] 3
#Paired-Associate Learning
sum(is.na(dat[dat$group=="PA",]$rt))
## [1] 4
#Calculate Percentage
(sum(is.na(dat[dat$group=="CAT",]$rt)) + sum(is.na(dat[dat$group=="PA",]$rt)))/length(dat$rt)
## [1] 0.0005063657
#Calculate number of trials with |rt|<250.
# (In DMDX, an incorrect response has a negative rt. Thus, RTs may be positive or negative)
#Category Learning
sum(ifelse((dat[dat$group=="CAT",]$rt<250)&(dat[dat$group=="CAT",]$rt>-250),1,0), na.rm=TRUE)
## [1] 0
#Paired-Associate Learning
sum(ifelse((dat[dat$group=="PA",]$rt<250)&(dat[dat$group=="PA",]$rt>-250),1,0), na.rm=TRUE)
## [1] 5
#Calculate Percentage
sum(ifelse((dat[dat$group=="PA",]$rt<250)&(dat[dat$group=="PA",]$rt>-250),1,0), na.rm=TRUE)/length(dat$rt)
## [1] 0.0003616898
#Convert trials with |rt|<250 to NA
dat$rt<-ifelse(((dat$rt<250)&(dat$rt>-250)),NA, dat$rt)
#... and accordingly adjust the acc column
dat$acc<-NA
dat$acc<-ifelse(dat$rt>0, 1,0)
Descriptive Statistics
#Calculate average performance by participant and group
temp2<-aggregate(acc~sbj+group, data=dat, mean, na.rm=T)
temp2<-temp2[order(temp2$sbj, temp2$group),]
#Category Learning
mean(temp2[temp2$group=='CAT',]$acc)
## [1] 0.8882482
sd(temp2[temp2$group=='CAT',]$acc)
## [1] 0.0574847
#Calculate average performance by condition (label or ideogram categories)
t1<-aggregate(acc~sbj+cnd, data=dat1, mean, na.rm=T)
#Label Categories
mean(t1[t1$cnd=='pseudo',]$acc)
## [1] 0.9050926
sd(t1[t1$cnd=='pseudo',]$acc)
## [1] 0.05728976
#Ideogram Categories
mean(t1[t1$cnd=='ideo',]$acc)
## [1] 0.8706597
sd(t1[t1$cnd=='ideo',]$acc)
## [1] 0.06760277
#Paired-Associate Learning
mean(temp2[temp2$group=='PA',]$acc)
## [1] 0.8826085
sd(temp2[temp2$group=='PA',]$acc)
## [1] 0.0556735
#Calculate average performance by condition (label or ideogram pairings)
t2<-aggregate(acc~sbj+cnd, data=dat2, mean, na.rm=T)
#Label pairs
mean(t2[t2$cnd=='pseudo',]$acc)
## [1] 0.8790509
sd(t2[t2$cnd=='pseudo',]$acc)
## [1] 0.06468979
#Ideogram pairs
mean(t2[t2$cnd=='ideo',]$acc)
## [1] 0.8842593
sd(t2[t2$cnd=='ideo',]$acc)
## [1] 0.06564698
#Create new data frames, average performance by block of trials, for graphs
#12 blocks of 24 trials
n_blocks<-12
n_parts<-length(levels(dat$sbj))
n_cnds<-2
n_trials_in_block<-24
n_trials_in_block_per_cnd<-n_trials_in_block/n_cnds
block<-rep(1:n_blocks,n_parts)
sbjs<-dat[dat$trial<(n_blocks+1),]$sbj
groups<-dat[dat$trial<(n_blocks+1),]$group
perf_ps<-0; perf_ps[1:(n_parts*n_blocks)]<-0
perf_id<-0; perf_id[1:(n_parts*n_blocks)]<-0
for (i in 1:(n_parts*n_blocks)){
perf_ps[i]<-mean(dat[dat$cnd=="pseudo",]$acc[((i-1)*n_trials_in_block_per_cnd+1):(i*n_trials_in_block_per_cnd)], na.rm=TRUE)
perf_id[i]<-mean(dat[dat$cnd=="ideo",]$acc[((i-1)*n_trials_in_block_per_cnd+1):(i*n_trials_in_block_per_cnd)], na.rm=TRUE)
}
data_bl<-data.frame(sbj=sbjs, block=block, group=groups, perf_ps= perf_ps, perf_id= perf_id)
#First calculate average
with(data_bl,aggregate(perf_ps,list(block,group),mean, na.rm=TRUE, na.action=NULL))->data_gr_ps
with(data_bl,aggregate(perf_id,list(block,group),mean, na.rm=TRUE, na.action=NULL))->data_gr_id
names(data_gr_ps)<-c("block","group", "perf_ps")
names(data_gr_id)<-c("block", "group", "perf_id")
#Then calculate se
with(data_bl,aggregate(perf_ps,list(block, group),se))->data_gr_ps_se
with(data_bl,aggregate(perf_id,list(block, group),se))->data_gr_id_se
names(data_gr_ps_se)<-c("block","group", "perf_ps_se")
names(data_gr_id_se)<-c("block","group", "perf_id_se")
#Data frames for graphs
data_gr<-data.frame(block=data_gr_ps$block, group=data_gr_ps$group, perf_ps=data_gr_ps$perf_ps, perf_id=data_gr_id$perf_id, perf_ps_se=data_gr_ps_se$perf_ps_se, perf_id_se=data_gr_id_se$perf_id_se )
data_gr_CAT<-droplevels(data_gr[data_gr$group=="CAT",])
data_gr_PA<-droplevels(data_gr[data_gr$group=="PA",])
Inferential Statistics - Model Comparison
data<-dat
data$igc <- as.factor(paste(as.character(data$group),as.character(data$cnd),sep=".")) # create variable, "treatment coding".
data$igc<-relevel(data$igc, ref="CAT.pseudo")
levels(data$igc)
## [1] "CAT.pseudo" "CAT.ideo" "PA.ideo" "PA.pseudo"
nc <- detectCores()
cl <- makeCluster(nc-1) # change to nc to use all the cores
m1<- bam(acc~ 1 + group*cnd + s(trial) + s(trial, sbj, bs="fs", m=1), data=data, family=binomial )
## Warning in gam.side(sm, X, tol = .Machine$double.eps^0.5): model has repeated 1-
## d smooths of same variable.
gam.check(m1)
##
## Method: fREML Optimizer: perf newton
## full convergence after 4 iterations.
## Gradient range [-3.267317e-09,2.161951e-10]
## (score 17944.47 & scale 1).
## Hessian positive definite, eigenvalue range [1.342041,27.68244].
## Model rank = 445 / 445
##
## Basis dimension (k) checking results. Low p-value (k-index<1) may
## indicate that k is too low, especially if edf is close to k'.
##
## k' edf k-index p-value
## s(trial) 9.00 5.06 0.97 0.20
## s(trial,sbj) 432.00 149.60 0.97 0.19
#edf is not close to k', so we are ok. we do not need to increase k
#plot.gam(m1,pages=1)
summary(m1)
##
## Family: binomial
## Link function: logit
##
## Formula:
## acc ~ 1 + group * cnd + s(trial) + s(trial, sbj, bs = "fs", m = 1)
##
## Parametric coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 3.19532 0.19491 16.394 < 2e-16 ***
## groupPA 0.14304 0.25359 0.564 0.573
## cndpseudo 0.54797 0.09699 5.650 1.61e-08 ***
## groupPA:cndpseudo -0.63026 0.13402 -4.703 2.57e-06 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Approximate significance of smooth terms:
## edf Ref.df Chi.sq p-value
## s(trial) 5.06 5.954 339.3 <2e-16 ***
## s(trial,sbj) 149.60 430.000 757.6 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## R-sq.(adj) = 0.376 Deviance explained = 42.3%
## fREML = 17944 Scale est. = 1 n = 13812
# add a term modeling four smooth terms of trial, one for each igc level
m2 <- bam(acc~ 1 + group*cnd + s(trial) + s(trial,by=igc,m=1) + s(trial, sbj, bs="fs", m=1), data=data, family=binomial )
## Warning in gam.side(sm, X, tol = .Machine$double.eps^0.5): model has repeated 1-
## d smooths of same variable.
gam.check(m2)
##
## Method: fREML Optimizer: perf newton
## full convergence after 13 iterations.
## Gradient range [-1.294104e-05,4.240583e-08]
## (score 17976.23 & scale 1).
## Hessian positive definite, eigenvalue range [1.015973e-05,27.59699].
## Model rank = 477 / 477
##
## Basis dimension (k) checking results. Low p-value (k-index<1) may
## indicate that k is too low, especially if edf is close to k'.
##
## k' edf k-index p-value
## s(trial) 9.00e+00 5.04e+00 0.96 0.32
## s(trial):igcCAT.pseudo 8.00e+00 1.26e+00 0.96 0.28
## s(trial):igcCAT.ideo 8.00e+00 1.39e-02 0.96 0.28
## s(trial):igcPA.ideo 8.00e+00 3.48e-05 0.96 0.33
## s(trial):igcPA.pseudo 8.00e+00 3.70e-05 0.96 0.29
## s(trial,sbj) 4.32e+02 1.50e+02 0.96 0.37
#edf is not close to k', and p is not low, so we are ok. we do not need to increase k
#plot.gam(m2,pages=1)
summary(m2)
##
## Family: binomial
## Link function: logit
##
## Formula:
## acc ~ 1 + group * cnd + s(trial) + s(trial, by = igc, m = 1) +
## s(trial, sbj, bs = "fs", m = 1)
##
## Parametric coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 3.1642 0.1967 16.083 < 2e-16 ***
## groupPA 0.1582 0.2548 0.621 0.535
## cndpseudo 0.6894 0.1515 4.552 5.32e-06 ***
## groupPA:cndpseudo -0.7717 0.1774 -4.349 1.37e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Approximate significance of smooth terms:
## edf Ref.df Chi.sq p-value
## s(trial) 5.040e+00 5.928 318.903 <2e-16 ***
## s(trial):igcCAT.pseudo 1.259e+00 8.000 2.500 0.0788 .
## s(trial):igcCAT.ideo 1.393e-02 8.000 0.014 0.1487
## s(trial):igcPA.ideo 3.477e-05 8.000 0.000 0.7328
## s(trial):igcPA.pseudo 3.702e-05 8.000 0.000 0.8275
## s(trial,sbj) 1.496e+02 430.000 756.025 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## R-sq.(adj) = 0.376 Deviance explained = 42.3%
## fREML = 17976 Scale est. = 1 n = 13812
compareML(m1,m2)
## m1: acc ~ 1 + group * cnd + s(trial) + s(trial, sbj, bs = "fs", m = 1)
##
## m2: acc ~ 1 + group * cnd + s(trial) + s(trial, by = igc, m = 1) +
## s(trial, sbj, bs = "fs", m = 1)
##
## Model m1 preferred: lower fREML score (31.763), and lower df (4.000).
## -----
## Model Score Edf Difference Df
## 1 m2 17976.23 12
## 2 m1 17944.47 8 31.763 -4.000
##
## AIC difference: -2.53, model m1 has lower AIC.
fm<-m1
# to check the difference in accuracy between the label and ideogram pairings we need to re-level the group factor
levels(data$group)
## [1] "CAT" "PA"
data$group_<-relevel(data$group, ref="PA")
levels(data$group_)
## [1] "PA" "CAT"
m1_<- bam(acc~ 1 + group_*cnd + s(trial) + s(trial, sbj, bs="fs", m=1), data=data, family=binomial )
## Warning in gam.side(sm, X, tol = .Machine$double.eps^0.5): model has repeated 1-
## d smooths of same variable.
summary(m1_)
##
## Family: binomial
## Link function: logit
##
## Formula:
## acc ~ 1 + group_ * cnd + s(trial) + s(trial, sbj, bs = "fs",
## m = 1)
##
## Parametric coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 3.33837 0.19066 17.509 < 2e-16 ***
## group_CAT -0.14304 0.25359 -0.564 0.573
## cndpseudo -0.08230 0.09248 -0.890 0.374
## group_CAT:cndpseudo 0.63026 0.13402 4.703 2.57e-06 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Approximate significance of smooth terms:
## edf Ref.df Chi.sq p-value
## s(trial) 5.06 5.954 339.3 <2e-16 ***
## s(trial,sbj) 149.60 430.000 757.6 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## R-sq.(adj) = 0.376 Deviance explained = 42.3%
## fREML = 17944 Scale est. = 1 n = 13812
gam.check(m1)
##
## Method: fREML Optimizer: perf newton
## full convergence after 4 iterations.
## Gradient range [-3.267317e-09,2.161951e-10]
## (score 17944.47 & scale 1).
## Hessian positive definite, eigenvalue range [1.342041,27.68244].
## Model rank = 445 / 445
##
## Basis dimension (k) checking results. Low p-value (k-index<1) may
## indicate that k is too low, especially if edf is close to k'.
##
## k' edf k-index p-value
## s(trial) 9.00 5.06 1.02 1.00
## s(trial,sbj) 432.00 149.60 1.02 0.99
Graph
par(mfrow=c(1,2), oma = c(0, 0, 2, 0))
offs<-1
color<-c("red", "blue", "red" ,"blue"); colorsmooth<-c("#D0A0A0","#A0A0D0","#D0A0A0","#A0A0D0")
lintyp<-c("solid", "solid", "solid", "solid"); linwid=c(2,2, 2,2);pchar=c(15,17,15,17)
#CAT
#model estimates
plot_smooth(fm, view="trial", cond=list(group="CAT",cnd="pseudo"), rm.ranef=c("s(trial,sbj)"),shade=T,se=1.96,#1.96,#0
print.summary=F, ylim=c(0,1),transform=inv.logit, xlab="Trial", ylab="Proportion Correct", lwd=2, las=2, rug=FALSE, col=colorsmooth[1], lty=lintyp[1], add=F, hide.label=T, main="Category Learning", yaxs="i",xaxt="n", yaxt="n")
plot_smooth(fm, view="trial", cond=list(group="CAT",cnd="ideo"), rm.ranef=c("s(trial,sbj)"),shade=T, se=1.96,#1.96,#0,
print.summary=F,ylim=c(0,1),transform=inv.logit, xlab="Trial", ylab="Proportion Correct",xaxt="n",lwd=2, las=2, rug=FALSE, col=colorsmooth[2], lty=lintyp[2], add=T )
axis(side = 2, at = 0:10/10, labels = c("0.0", 1:9/10.0, "1.0"), las=2, cex.axis = 0.8)
axis(side = 1, at= c(0, 50,100,150,200,250, 288), cex.axis=0.8)
leg<-c("Label Categories", "Ideogram Categories")
legend(x=80, y=0.65, legend=leg, lty=lintyp, bty="n", col=colorsmooth, lwd=linwid, seg.len=2.0)
legend(x=70, y=0.65, legend=c("", ""), bty="n", col=color, pch=pchar)
#Data
plotCI(data_gr_CAT$block*24-12-offs, data_gr_CAT$perf_ps, uiw=data_gr_CAT$perf_ps_se, gap=0, col=color[1], pch=pchar[1],add=T)
plotCI(data_gr_CAT$block*24-12+offs, data_gr_CAT$perf_id, uiw=data_gr_CAT$perf_id_se, gap=0, col=color[2], pch=pchar[2],add=T)
#PA
#model estimates
plot_smooth(fm, view="trial", cond=list(group="PA",cnd="pseudo"), rm.ranef=c("s(trial,sbj)"),shade=T,se=1.96,#1.96,#0
print.summary=F, ylim=c(0,1),transform=inv.logit, xlab="Trial", ylab="Proportion Correct", lwd=2, las=2, rug=FALSE, col=colorsmooth[3], lty=lintyp[1], add=F, hide.label=T, main="Paired-Associate Learning", yaxs="i", xaxt="n", yaxt="n")
plot_smooth(fm, view="trial", cond=list(group="PA",cnd="ideo"), rm.ranef=c("s(trial,sbj)"),shade=T, se=1.96,#1.96,#0,
print.summary=F,ylim=c(0,1),transform=inv.logit, xlab="Trial", ylab="Proportion Correct",xaxt="n",lwd=2, las=2, rug=FALSE, col=colorsmooth[4], lty=lintyp[2], add=T )
axis(side = 2, at = 0:10/10, labels = c("0.0", 1:9/10.0, "1.0"), las=2, cex.axis = 0.8)
axis(side = 1, at= c(0, 50,100,150,200,250, 288), cex.axis=0.8)
leg<-c("Label Pairings", "Ideogram Pairings")
legend(x=80, y=0.65, legend=leg, lty=lintyp, bty="n", col=colorsmooth, lwd=linwid, seg.len=2.0)
legend(x=70, y=0.65, legend=c("", ""), bty="n", col=color, pch=pchar)
#Data
plotCI(data_gr_PA$block*24-12-offs, data_gr_PA$perf_ps, uiw=data_gr_PA$perf_ps_se, gap=0, col=color[3], pch=pchar[3],add=T)
plotCI(data_gr_PA$block*24-12+offs, data_gr_PA$perf_id, uiw=data_gr_PA$perf_id_se, gap=0, col=color[4], pch=pchar[4],add=T)
mtext('Learning Session, Accuracy', outer = TRUE, cex = 1.2, font =2)

par(mfrow=c(1,1))
Session Information
sessionInfo()
## R version 4.0.4 (2021-02-15)
## Platform: x86_64-apple-darwin17.0 (64-bit)
## Running under: macOS Catalina 10.15.7
##
## Matrix products: default
## BLAS: /Library/Frameworks/R.framework/Versions/4.0/Resources/lib/libRblas.dylib
## LAPACK: /Library/Frameworks/R.framework/Versions/4.0/Resources/lib/libRlapack.dylib
##
## locale:
## [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
##
## attached base packages:
## [1] parallel stats graphics grDevices utils datasets methods
## [8] base
##
## other attached packages:
## [1] dplyr_1.0.5 boot_1.3-26 gplots_3.1.1 sciplot_1.2-0
## [5] itsadug_2.4 plotfunctions_1.4 mgcv_1.8-33 nlme_3.1-152
##
## loaded via a namespace (and not attached):
## [1] highr_0.8 compiler_4.0.4 pillar_1.5.1 bitops_1.0-7
## [5] tools_4.0.4 digest_0.6.27 evaluate_0.14 lifecycle_1.0.0
## [9] tibble_3.1.0 lattice_0.20-41 pkgconfig_2.0.3 rlang_0.4.10
## [13] Matrix_1.3-2 yaml_2.2.1 xfun_0.22 stringr_1.4.0
## [17] knitr_1.31 generics_0.1.0 vctrs_0.3.6 gtools_3.8.2
## [21] caTools_1.18.2 tidyselect_1.1.0 grid_4.0.4 glue_1.4.2
## [25] R6_2.5.0 fansi_0.4.2 rmarkdown_2.7 purrr_0.3.4
## [29] magrittr_2.0.1 htmltools_0.5.1.1 ellipsis_0.3.1 splines_4.0.4
## [33] KernSmooth_2.23-18 utf8_1.1.4 stringi_1.5.3 crayon_1.4.1