library(mixdist) ##################### CJKE ####################### pdf("Supplemental_figures_CJKE.pdf", paper="us", width=8, height=11) # load the data load("cjke.rda"); # use only first fixation duration ffd<-cjke$ffd # word length wlen<-cjke$wlen # landing position landpos<-cjke$llpos #type of next saccade, forward, refixation, or regression next_fixtype<-cjke$next_fixtype #set up graphs fitresult<-list() nrow<-9 ncol<-3 # ready, go for (wl in 3:8) { # windows() nf <- layout(matrix(1:(ncol*nrow),nrow,ncol,byrow = TRUE), widths =matrix(rep(2,ncol*nrow),nrow,ncol), heights=matrix(c(rep(1,ncol*(nrow-1)), rep(1.2, ncol)),nrow,ncol), respect=TRUE) #layout.show(nf) gr=1 for (s in seq(0,wl,1)) { for (ft in levels(next_fixtype)) { if(missing(ft)) next #par(mfrow = c(wl, 1)) gtitle=sprintf("CJKE SingleFD, WordLen= %i, LandPos=%i ",wl, s) print(gtitle) f<- ffd[!is.na(ffd) & ffd>0 & wlen==wl & landpos==s & next_fixtype==ft]; if(length(f)==0) next f<-f[!is.na(f)] # get data in shape, 10ms bin mixgroup(f[f>0],breaks=c(0,seq(60,600,20),10000)) ->fdt # clamp mean and 2 of 3 sigma # means for #1 and #3 are fixed, the mean for #2 is free, see fixmu parameter below # note the means are different from Dundee corpus; there are many differences between the 2 studies # see text for more details meanpara=c(85, 160, 200) # these sigmas are fixed, see fixsigma parameter below sigmapara=c(30, 30, 70) # proportions are NOT fixed, see fixpi parameter pipara=c(0.10, 0.10, 0.80) dump<- mix(fdt,mixparam(meanpara,sigmapara, pipara), dist="lnorm", emsteps=10, mixconstr(conpi="PFX", fixpi=c(F, F, F), conmu="MFX", fixmu=c(T,F,T), consigma="SFX", fixsigma=c(T,T, T)) ) # plot(dump, root=F, main=gtitle, ytop=0.01, xlab="Fixation Duration") par(mar=c(0,0,0,0)) if (gr%%ncol==1) par(mar=c(0,2,0,0)) if (gr%%(ncol*nrow)>ncol*(nrow-1) | gr%%(ncol*nrow)==0) par(mar=c(2,0,0,0)) if (gr%%ncol==1 & (gr%%(ncol*nrow)>ncol*(nrow-1) | gr%%(ncol*nrow)==0)) par(mar=c(2,2,0,0)) plot(dump, root=F, ytop=0.01, sub="", ylab="", xlab="", axes=FALSE) # add Y axis only if (gr%%ncol==1) Axis(side=2) #if (gr%%nrow==0) Axis(side=1) if (gr%%(ncol*nrow)>ncol*(nrow-1) | gr%%(ncol*nrow)==0) Axis(side=1) if (s==wl) Axis(side=1) gr=gr+1 # add kernal density estimate lines(density(f), col="blue", lty=2) # add verticle line to mark the C component, IF IT's >0 if (dump$parameters$pi[2]>0.02) lines(c(dump$parameters$mu[2], dump$parameters$mu[2]), c(0,1), col="red") text(100,0.009, sprintf("%i (%s)",s, ft), cex = .8) text(printloc[1],0.009, sprintf("N=%i, m=%5.2f, se=%5.2f",length(f), mean(f),stderr(f)), cex = .8) text(printloc[1],0.007, sprintf("C: m=%5.2f, w=%5.2f",dump$parameters$mu[2], dump$parameters$pi[2]), cex = .8) text(printloc[1],0.005, sprintf("R: m=%5.2f, w=%5.2f",dump$parameters$mu[3],dump$parameters$pi[3]), cex = .8) text(printloc[1],0.003, sprintf("E: m=%5.2f, w=%5.2f",dump$parameters$mu[1],dump$parameters$pi[1]), cex = .8) # summary(dump) # save data dump$wl <- wl dump$wdlp <-s dump$next_fixtype <-ft dump$N <-length(f) dump$mean <-mean(f) dump$se <-stderr(f) fitresult <-c(fitresult, list(dump)) } } } graphics.off() cjke200fixpi_fit_nextfixtype<-fitresult