library(ERP);require(mnormt);require(fdrtool);library(ggplot2);library(dplyr);
library(gridExtra);library(erpR);require(akima);library(reshape2);library(boot);
library(plotly);library(ggmap);library(SCBmeanfd);library(png);library(grid)
dta <- readRDS("erpt.Rdata")
dta <- dta[,-c(4:5)]
dta$Subject <- factor(dta$Subject,levels=c(paste("subj",1:20,sep="")))
data_select <- function(data,frames,datacol,subjcol=NULL,chancol=NULL,othvarcol=NULL,
select_subj=NULL,
select_chan=NULL,...){
# some check function
subj_select <- function(data,frames,datacol,subjcol,chancol=NULL,othvarcol=NULL,
select_subj,...){
dta <- data
num <- length(select_subj)
data_list <- list()
for (i in 1:num){
data_new <- subset(dta,dta[,subjcol]==select_subj[i])
data_list[[i]] <- data_new
}
data_select <- data_list[[1]]
if (num != 1) {
for (i in 2:num) {
data_select <- rbind(data_select,data_list[[i]])
}
}
data_select <- data_select[order(data_select[,subjcol]),]
rownames(data_select) <- 1:dim(data_select)[1]
return (data_select)
}
#data_select(data = dtasum,timepoint2,datacol = 3:108,NULL,1,c(2,109:110),NULL,"PZ")
chan_select <- function(data,frames,datacol,subjcol=NULL,chancol,othvarcol=NULL,
select_chan,...){
dta <- data
num <- length(select_chan)
data_list <- list()
for (i in 1:num){
data_new <- subset(dta,dta[,chancol]==select_chan[i])
data_list[[i]] <- data_new
}
data_select <- data_list[[1]]
if (num != 1){
for (i in 2:num){
data_select <- rbind(data_select,data_list[[i]])
}
}
#data_select <- data_select[order(data_select[,subjcol]),]
rownames(data_select) <- 1:dim(data_select)[1]
return (data_select)
}
joint_select <- function(data,frames,datacol,subjcol,chancol,othvarcol=NULL,
select_subj,
select_chan,...){
dta <- data
ind_data <- subj_select(dta,frames,datacol,subjcol,chancol,othvarcol,
select_subj = select_subj)
ind_ele_data <- chan_select(ind_data,frames,datacol,subjcol,chancol,othvarcol,
select_chan = select_chan)
ind_ele_data <- ind_ele_data[order(ind_ele_data[,subjcol]),]
rownames(ind_ele_data) <- 1 :dim(ind_ele_data)[1]
return(ind_ele_data)
}
if (is.null(select_subj)==FALSE & is.null(select_chan)==FALSE){
dta <- joint_select(data = data,frames = frames,
datacol,subjcol,chancol,othvarcol,
select_subj=select_subj,
select_chan=select_chan)
} else if (is.null(select_subj)==FALSE & is.null(select_chan)== TRUE) {
dta <- subj_select(data=data,frames=frames,
datacol,subjcol,chancol,othvarcol,
select_subj=select_subj)
} else if (is.null(select_chan)==FALSE & is.null(select_subj)== TRUE) {
dta <- chan_select(data,frames,
datacol,subjcol,chancol,othvarcol,
select_chan=select_chan)
} else {
dta <- data
}
return(dta)
}
data_summarize <- function(data,frames,datacol,subjcol=NULL,chancol=NULL,othvarcol=NULL,
summarycol,
fun=mean,
select_subj=NULL,
select_chan=NULL,...){
#some check function
options(warn=-1) # should close the warnings?
# selection
dta <- data_select(data,frames,datacol,subjcol,chancol,othvarcol,
select_subj,
select_chan)
# process
agglength <- length(summarycol)
aggvar_list <- list(dta[,summarycol[1]])
if (agglength > 1){
for (i in 2:agglength ){
aggvar_list <- append(aggvar_list,list(dta[,summarycol[i]]))
}
}
aggdata <- aggregate(dta[,datacol],by=aggvar_list,
fun,...)
aggdata <- aggdata[,1:(agglength+length(datacol))]
for (i in 1: agglength){
colnames(aggdata)[i] <- colnames(dta)[summarycol[i]]
}
rownames(aggdata) <- 1:dim(aggdata)[1]
return(aggdata)
}
downsample <- function(data,
datacol,
binwidth=10,
movinginterval=NULL) {
if (is.null(movinginterval) == FALSE) {
if (movinginterval >= binwidth){stop("movinginterval should not bigger than binwidth!")}
dta <- data
dta_signal <- dta[,datacol]
dta_othvar <- dta[,-datacol]
num1 <- (dim(dta_signal)[2] - (dim(dta_signal)[2] %% binwidth)) /binwidth
num2 <- dim(dta_signal)[2] %% binwidth
dta_downsample <- data.frame(melt(apply(dta_signal[,1:binwidth],1,mean)))
i = movinginterval - 1
while ((binwidth+i) <= dim(dta_signal)[2]){
dta_downsample <- cbind(dta_downsample,melt(apply(dta_signal[,(1+i):(binwidth+i)],1,mean)))
i = i + movinginterval -1
}
if (num2 >= 1) {
dta_downsample <- cbind(dta_downsample,
value=melt(apply(dta_signal[,(1+i):dim(dta_signal)[2]],1,mean)))
}
colnames(dta_downsample) <- paste("value",1:dim(dta_downsample)[2],sep=".")
dta_final <- cbind(dta_othvar,dta_downsample)
} else {
dta <- data
dta_signal <- dta[,datacol]
dta_othvar <- dta[,-datacol]
num1 <- (dim(dta_signal)[2] - (dim(dta_signal)[2] %% binwidth))/binwidth
num2 <- dim(dta_signal)[2] %% binwidth
dta_downsample <- data.frame(melt(apply(dta_signal[,1:binwidth],1,mean)))
for (i in 1 : num1-1){
dta_downsample <- cbind(dta_downsample,
melt(apply(dta_signal[,(i*binwidth+1):((i+1)*binwidth)],
1,mean)))
}
if (num2 == 1) {
dta_downsample <- cbind(dta_downsample,
value=dta_signal[,(num1*binwidth+num2)])
###### notice
}
if (num2 > 1) {
dta_downsample <- cbind(dta_downsample,
melt(apply(dta_signal[,(num1*binwidth+1):(num1*binwidth+num2)],
1,mean)))
}
dta_downsample <- dta_downsample[,-1]
colnames(dta_downsample) <- paste("value",1:dim(dta_downsample)[2],sep=".")
dta_final <- cbind(dta_othvar,dta_downsample)
}
return(dta_final)
}
edaplot <- function(data,frames=NULL,datacol,subjcol=NULL,chancol=NULL,othvarcol=NULL,
outlinesub=NULL,outcolor="red",
select_subj=c(NULL),
select_chan=c(NULL),...){
#some check functions
#if (is.null(frames) == FALSE)
# if (length(frames) != (ncol(data)-1-length(othvarcol)))
# stop(paste("frames should be either null or of length",
# (ncol(data)-1-length(othvarcol))))
#if (is.null(frames) == FALSE) {
# if (any(frames != sort(frames)))
# stop("frames should be an ascending sequence of integers")
# }
#if (is.null(frames))
# frames = 1:(ncol(data)-1-length(othvarcol))
#selection
dta <- data_select(data,frames,datacol,subjcol,chancol,othvarcol,
select_subj,
select_chan)
# plot
subvar <- variable.names(dta)[subjcol]
#dta$groupvar <- rownames(dta)
#########
dta$Info <- NA
for (i in 1 : dim(dta)[1]){
info1 <- paste0(as.character(dta[i,othvarcol]),collapse=";")
dta$Info[i] <- paste(dta[i,chancol],dta[i,subjcol],info1,sep=";")
}
###########
datalong <- melt(dta,
id=c(variable.names(dta)[c(subjcol,chancol,othvarcol)],
"Info"))
datalong <- datalong[order(datalong$Info),]
datalongorder <- datalong
datalongorder$frames <- rep(frames,length(datalongorder[,1])/length(frames))
if (is.null(outlinesub) == FALSE){ # how to outline several subjects (and color)
data2 <- subset(datalongorder,datalongorder[,1]==outlinesub)
plot <- ggplot(datalongorder,
aes(x=frames,y=value,group=Info,...))+
geom_line()+
geom_line(data=data2,aes(x=frames,y=value),col=outcolor)
# need warning for covering geom_line()
} else {
plot <- ggplot(datalongorder,
aes(x=frames,y=value,group=Info))+
geom_line()
}
return(plot)
}
scalp_plot <- function(chan_data,frames,
datacol,chancol,cpvarcol=NULL,
ylim=c(-10,10),color = c("blue","red")){
if ((dim(chan_data)[2]) > length(datacol)+length(chancol)+length(cpvarcol)){
stop("input object must only contain Data, Channel and Compare_variable!")
}
get_legend<-function(myggplot){
tmp <- ggplot_gtable(ggplot_build(myggplot))
leg <- which(sapply(tmp$grobs, function(x) x$name) == "guide-box")
legend <- tmp$grobs[[leg]]
return(legend)
}
erplay <- rbind(c(NA,NA,NA,NA,"Fp1","Fpz","Fp2",NA,NA,NA,NA),
c(NA,NA,NA,"AF7","AF3","AFz","AF4","AF8",NA,NA,NA),
c(NA,"F7","F5","F3","F1","Fz","F2","F4","F6","F8",NA),
c("FT9","FT7","FC5","FC3","FC1","FCz","FC2","FC4","FC6","FT8","FT10"),
c("T9","T7","C5","C3","C1","CZ","C2","C4","C6","T8","T10"),
c("TP9","TP7","CP5","CP3","CP1","CPz","CP2","CP4","CP6","TP8","TP10"),
c("P9","P7","P5","P3","P1","PZ","P2","P4","P6","P8","P10"),
c(NA,NA,"PO9","PO7","PO3","POz","PO4","PO8","PO10",NA,NA),
c(NA,NA,NA,NA,"O1","Oz","O2",NA,NA,NA,NA),
c(NA,NA,NA,NA,"I1","Iz","I2",NA,NA,NA,NA))
dtaall <- chan_data
names(dtaall)[chancol] <- "Channel"
plotlist <- list()
if (is.null(cpvarcol)){
for (i in 1:length(levels(dtaall[,chancol]))){
dta <- subset(dtaall,dtaall[,chancol] == levels(dtaall[,chancol])[i])
dta2 <- melt(dta,id = "Channel")
dta2 <- dta2[order(dta2$Channel),]
dta2$frames <- rep(frames,dim(dta2)[1]/length(frames))
plotlist[[i]] <- ggplot(dta2,aes(x = frames, y = value))+
geom_line(col = color[1])+
ylim(ylim[1],ylim[2])+
theme_bw()+
theme(legend.position="none")+
labs(list(title=levels(dtaall[,chancol])[i]))+
theme(axis.title.y = element_blank(),axis.title.x = element_blank(),
axis.text = element_text(size = 5),
axis.text.x = element_blank(),
axis.line = element_blank(),
axis.ticks = element_blank(),
panel.border =element_blank())
names(plotlist)[i] <-levels(dtaall[,chancol])[i]
}
for (i in 1 : 10 ){
for (j in 1:11){
if (!toupper(erplay[i,j]) %in% toupper(dtaall$Channel)){
erplay[i,j] = NA
}
}
}
print("The following electrodes will not be plotted :")
print(as.character(dtaall$Channel[!toupper(dtaall$Channel) %in% toupper(erplay)]))
printlist <- plotlist[which(toupper(names(plotlist)) %in% toupper(erplay))]
erplaynum <- matrix(NA,10,11)
for (i in 1:10){
for (j in 1:11){
if (toupper(erplay[i,j]) %in% toupper(dtaall$Channel)){
erplaynum[i,j] = which(toupper(names(printlist)) %in% toupper(erplay[i,j]))
}
}
}
# printlist[[length(printlist)+1]] <- legend
# erplaynum[1,11] <- length(printlist)
plot <- do.call("grid.arrange", list(grobs=printlist,layout_matrix=erplaynum))
} else {
names(dtaall)[cpvarcol] <- "Condition"
condlevel <- levels(as.factor(dtaall$Condition))
if (length(color) != length(condlevel)){
stop("Color object must only be same as levels of compare varaible")
}
colvalue <- color[1:length(condlevel)]
dta <- subset(dtaall,dtaall[,chancol] == levels(dtaall[,chancol])[2])
dta2 <- melt(dta,id = c("Condition","Channel"))
dta2 <- dta2[order(dta2$Condition),]
dta2$Condition <- as.factor(dta2$Condition)
dta2$frames <- rep(frames,dim(dta2)[1]/length(frames))
flegend <- ggplot(dta2,aes(x=frames, y=value))+
geom_line(aes(col=Condition))+
ylim(ylim[1],ylim[2])+
theme_bw()+
theme_minimal()+
theme(legend.position="left")+
labs(list(title=levels(levels(dtaall[,chancol])[1])))+
theme(axis.title.y = element_blank(),
axis.title.x = element_blank(),
axis.text = element_text(size = 3),
axis.ticks = element_blank(),
axis.line = element_blank())+
scale_colour_manual(values= colvalue,name = names(chan_data)[cpvarcol])
legend <- get_legend(flegend)
for (i in 1:length(levels(dtaall[,chancol]))){
dta <- subset(dtaall,dtaall[,chancol] == levels(dtaall[,chancol])[i])
dta2 <- melt(dta,id = c("Condition","Channel"))
dta2 <- dta2[order(dta2$Condition),]
dta2$Condition <- as.factor(dta2$Condition)
dta2$frames <- rep(frames,dim(dta2)[1]/length(frames))
plotlist[[i]] <- ggplot(dta2,aes(x = frames, y = value,group=Condition))+
geom_line(aes(col=Condition))+
ylim(ylim[1],ylim[2])+
scale_colour_manual(values= colvalue,name = names(chan_data)[cpvarcol])+
theme_bw()+
theme(legend.position="none")+
labs(list(title=levels(dtaall[,chancol])[i]))+
theme(axis.title.y = element_blank(),axis.title.x = element_blank(),
axis.text = element_text(size = 5),
axis.text.x = element_blank(),
axis.line = element_blank(),
axis.ticks = element_blank(),
panel.border =element_blank() )
names(plotlist)[i] <-levels(dtaall[,chancol])[i]
}
for (i in 1 : 10 ){
for (j in 1:11){
if (!toupper(erplay[i,j]) %in% toupper(dtaall$Channel)){
erplay[i,j] = NA
}
}
}
print("The following electrodes will not be plotted :")
print( as.character(dtaall$Channel[!toupper(dtaall$Channel) %in% toupper(erplay)])[duplicated(as.character(dtaall$Channel[!toupper(dtaall$Channel) %in% toupper(erplay)]))])
printlist <- plotlist[which(toupper(names(plotlist)) %in% toupper(erplay))]
erplaynum <- matrix(NA,10,11)
for (i in 1:10){
for (j in 1:11){
if (toupper(erplay[i,j]) %in% toupper(dtaall$Channel)){
erplaynum[i,j] = which(toupper(names(printlist)) %in% toupper(erplay[i,j]))
}
}
}
printlist[[length(printlist)+1]] <- legend
erplaynum[1,11] <- length(printlist)
plot <- do.call("grid.arrange", list(grobs=printlist,layout_matrix=erplaynum))
}
return(plot)
}
ciplot <- function(data,frames,datacol,subjcol=NULL,chancol=NULL,othvarcol=NULL,
cpvarcol=NULL, signal_line_col="black",
# general argument
level = 0.95,
ci.alpha = 0.3,
# select type
type = "boot", # or "scb"
# choose scb
cv.degree,
cv.interval = NULL,
scbtype = "normal", # or "bootstrap"
# choose boot
fun=samplemean <- function(x, d){return(mean(x[d]))},
bootnum=500,
# data_selection
select_subj = NULL,
select_chan = NULL,...){
# need some check function
# data selection
dta <- data_select(data,frames,datacol,subjcol,chancol,othvarcol,
select_subj,
select_chan,...)
if (!is.null(cpvarcol)){dta[,cpvarcol] = as.factor(as.character(dta[,cpvarcol]))}
if (! type %in% c("boot","scb"))
stop("type should be 'boot' or 'scb' !")
if (type == "scb"){
if (! scbtype %in% c("normal", "bootstrap")){stop("scbtype should be 'normal' or 'bootstrap'")}
if (is.null(cpvarcol)){
dtalist <- list()
for (i in 1:length(levels(dta[,chancol]))){
dtachan <- subset( dta,dta[,chancol] == levels(dta[,chancol])[i])
h <- cv.select(frames,dtachan[,datacol],
degree = cv.degree, interval = cv.interval)
scbchan <- scb.mean(frames, dtachan[,datacol],
bandwidth = h, level = level,
scbtype = scbtype,...)
dtalist[[i]] <- data.frame(FUN = scbchan$nonpar)
if (scbtype == "bootstrap"){
dtalist[[i]]$Q1 <- scbchan$bootscb[,1]
dtalist[[i]]$Q2 <- scbchan$bootscb[,2]
}
if (scbtype == "normal"){
dtalist[[i]]$Q1 <- scbchan$normscb[,1]
dtalist[[i]]$Q2 <- scbchan$normscb[,2]
}
dtalist[[i]]$Channel <- levels(dta[,chancol])[i]
dtalist[[i]]$frames <- frames
}
plotdata <- dtalist[[1]]
for (i in 2:length(dtalist)){plotdata <- rbind(plotdata,dtalist[[i]])}
plot <- ggplot(plotdata,aes(x=frames))+
geom_ribbon(aes(x=frames, ymax=Q2, ymin=Q1),
fill=signal_line_col,alpha=ci.alpha)+ # set alpha
geom_line(aes(y = FUN),col=signal_line_col)+
labs(y="Signal")+# Need some changes ?
facet_wrap(~Channel)+
theme(legend.position="none")
} else {
dtalist <- list()
for (i in 1:length(levels(dta[,chancol]))){
dtacplist <- list()
for (j in 1 : length(levels(dta[,cpvarcol]))){
dtachan <- subset(dta,
dta[,chancol] == levels(dta[,chancol])[i] & dta[,cpvarcol] == levels(dta[,cpvarcol])[j])
h <- cv.select(frames,dtachan[,datacol],
degree = cv.degree, interval = cv.interval)
scbchan <- scb.mean(frames, dtachan[,datacol],
bandwidth = h, level = level,
scbtype = scbtype)
dtacplist[[j]] <- data.frame(FUN = scbchan$nonpar)
if (scbtype == "bootstrap"){
dtacplist[[j]]$Q1 <- scbchan$bootscb[,1]
dtacplist[[j]]$Q2 <- scbchan$bootscb[,2]
}
if (scbtype == "normal"){
dtacplist[[j]]$Q1 <- scbchan$normscb[,1]
dtacplist[[j]]$Q2 <- scbchan$normscb[,2]
}
dtacplist[[j]]$Channel <- levels(dta[,chancol])[i]
dtacplist[[j]]$frames <- frames
dtacplist[[j]]$Condition <- levels(dta[,cpvarcol])[j]
}
dtalist[[i]] <- dtacplist[[1]]
for (k in 2:length(dtacplist)){dtalist[[i]] <- rbind(dtalist[[i]],dtacplist[[k]])}
}
plotdata <- dtalist[[1]]
for (i in 2:length(dtalist)){plotdata <- rbind(plotdata,dtalist[[i]])}
plot <- ggplot(plotdata,aes(x=frames,group=Condition))+
geom_ribbon(aes(x=frames, ymax=Q2, ymin=Q1,fill=Condition),
alpha=0.5)+ # set alpha
geom_line(aes(y = FUN,col=Condition))+
labs(y="Signal")+# Need some changes ?
facet_wrap(~Channel)+
scale_color_manual(values = c("red","blue"),name = colnames(dta)[cpvarcol])+
scale_fill_manual(values = c("red","blue"),name = colnames(dta)[cpvarcol])
}
} else {
bootstrap <- function(x,bootnum,bootfun,bootintval,quantilenum,...){
boot_result <- boot(x,statistic = bootfun,R = bootnum,...) #fun
return(quantile(boot_result$t,bootintval,na.rm = T)[quantilenum])
}
bootintval <- c((0.5-level/2),(level/2+0.5))
bootalpha <- ci.alpha
# Do you want to compare between variable ?
if (is.null(cpvarcol)==TRUE){
data_fun <- data_summarize(dta,frames,datacol,subjcol,chancol,othvarcol,
summarycol = c(chancol),fun=fun)
data_Q1 <- data_summarize(dta,frames,datacol,subjcol,chancol,othvarcol,
summarycol = c(chancol),
fun=bootstrap,bootnum=bootnum,bootfun=fun,
bootintval=bootintval,quantilenum=1)
data_Q2 <- data_summarize(dta,frames,datacol,subjcol,chancol,othvarcol,
summarycol = c(chancol),
fun=bootstrap,bootnum=bootnum,bootfun=fun,
bootintval=bootintval,quantilenum=2)
data_fun_long <- melt(data_fun,id=c(colnames(dta)[chancol]))
data_fun_long <- data_fun_long[order(data_fun_long[,1],
data_fun_long[,2],
data_fun_long[,3]),]
colnames(data_fun_long)[3] <- "FUN"
data_Q1_long <- melt(data_Q1,id=c(colnames(dta)[chancol]))
data_Q1_long <- data_Q1_long[order(data_Q1_long[,1],
data_Q1_long[,2],
data_Q1_long[,3]),]
data_Q2_long <- melt(data_Q2,id=c(colnames(dta)[chancol]))
data_Q2_long <- data_Q2_long[order(data_Q2_long[,1],
data_Q2_long[,2],
data_Q2_long[,3]),]
data_fun_long$Q1 <- data_Q1_long[,3]
data_fun_long$Q2 <- data_Q2_long[,3]
data_fun_long$frames <- c(rep(frames,(dim(data_fun_long)[1]/length(frames)))) #change
colnames(data_fun_long)[1] <- c("Channel")
plot <- ggplot(data_fun_long,aes(x=frames))+
geom_ribbon(aes(x=frames, ymax=Q2, ymin=Q1),
fill=signal_line_col,
alpha=bootalpha)+
geom_line(aes(y = FUN),
col=signal_line_col)+
labs(y="Signal")+# Need some changes ?
facet_wrap(~Channel)+
theme(legend.position="none")
} else {
dta[,cpvarcol] <- as.factor(dta[,cpvarcol])
dta[,chancol] <- as.factor(dta[,chancol])
data_fun <- data_summarize(dta,frames,datacol,subjcol,chancol,othvarcol,
summarycol = c(chancol,cpvarcol),fun=fun)
data_Q1 <- data_summarize(dta,frames,datacol,subjcol,chancol,othvarcol,
summarycol = c(chancol,cpvarcol),
fun=bootstrap,bootnum=bootnum,bootfun=fun,
bootintval=bootintval,quantilenum=1)
data_Q2 <- data_summarize(dta,frames,datacol,subjcol,chancol,othvarcol,
summarycol = c(chancol,cpvarcol),
fun=bootstrap,bootnum=bootnum,bootfun=fun,
bootintval=bootintval,quantilenum=2)
data_fun_long <- melt(data_fun,id=c(colnames(dta)[chancol],colnames(dta)[cpvarcol]))
data_fun_long <- data_fun_long[order(data_fun_long[,1],
data_fun_long[,2],
data_fun_long[,3]),]
colnames(data_fun_long)[4] <- "FUN"
data_Q1_long <- melt(data_Q1,id=c(colnames(dta)[chancol],colnames(dta)[cpvarcol]))
data_Q1_long <- data_Q1_long[order(data_Q1_long[,1],
data_Q1_long[,2],
data_Q1_long[,3]),]
data_Q2_long <- melt(data_Q2,id=c(colnames(dta)[chancol],colnames(dta)[cpvarcol]))
data_Q2_long <- data_Q2_long[order(data_Q2_long[,1],
data_Q2_long[,2],
data_Q2_long[,3]),]
data_fun_long$Q1 <- data_Q1_long[,4]
data_fun_long$Q2 <- data_Q2_long[,4]
data_fun_long$frames <- c(rep(frames,(dim(data_fun_long)[1]/length(frames))))
colnames(data_fun_long)[1:2] <- c("Channel","Condition")
plot <- ggplot(data_fun_long,aes(x=frames,group=Condition))+
geom_ribbon(aes(x=frames, ymax=Q2, ymin=Q1,fill=Condition),
alpha=bootalpha)+
geom_line(aes(y = FUN,col=Condition))+
labs(y="Signal")+# Need some changes ?
facet_wrap(~Channel)
}
}
return(plot)
}
chan_test <- function(data,datacol,chancol,
testtype="erpfatest",
# do not specify model.matrix like original test function###
design_model,
# do not specify model.matrix like original test function
design0_model=NULL,...){
dta <- data
dta[,chancol]=as.factor(dta[,chancol])
levelnum <- length(levels(dta[,chancol]))
if (levelnum == 1) {
design <- model.matrix(design_model,data=data)
if (is.null(design0_model)==F){
design0 <- model.matrix(design0_model,data=data)
}
if ( testtype == "erpavetest" ){
test_list <- erpavetest(dta[,datacol],design,design0,...)
}
if (testtype == "erpfatest") {
test_list <- erpfatest(dta[,datacol],design,design0,...)
}
if (testtype == "erptest") {
test_list <- erptest(dta[,datacol], design, design0,...)
}
if (testtype == "gbtest") {
test_list <- gbtest(dta[,datacol], design, design0,...)
}
} else {
test_list=list()
dta_list=list()
for (i in 1:levelnum) {
dta_list[[i]] <- subset(dta,dta[,chancol]==(levels(dta[,chancol])[i]))
design <- model.matrix(design_model,data=dta_list[[i]])
if (is.null(design0_model)==F){
design0 <- model.matrix(design0_model,data=dta_list[[i]])
}
if ( testtype == "erpavetest" ){
test_list[[i]] <- erpavetest(dta_list[[i]][,datacol],
design,design0,...)
}
if (testtype == "erpfatest") {
test_list[[i]] <- erpfatest(dta_list[[i]][,datacol],
design,design0,...)
}
if (testtype == "erptest") {
test_list[[i]] <- erptest(dta_list[[i]][,datacol],
design, design0,...)
}
if (testtype == "gbtest") {
test_list[[i]] <- gbtest(dta_list[[i]][,datacol],
design, design0,...)
}
names(test_list)[i] <- levels(dta[,chancol])[i]
}
}
return(test_list)
}
coord_plot <- function(tests_rst,frames,show,
elect_coord=readRDS("Elect_Location.Rdata"),
type = "test", logscale = T,
point_size = 18,show_na_ele = F,
text = T,text_size = 3,text_col = "black",
circle = T,nose = T,cir_nose_col="black"){
# some check function
if (!type %in% c("test","pval","correctedpval","signal","r2")) {
stop("Available projectios are: test,pval,correctedpval,signal,r2, \n\t\tThe projection specified is: ",
type, call. = F)
}
num <- length(tests_rst)
rstlist <- list()
for (i in 1:num){
rstlist[[i]] <- data.frame(pval = tests_rst[[i]]$pval)
rstlist[[i]]$correctedpval <- tests_rst[[i]]$correctedpval
rstlist[[i]]$test <- tests_rst[[i]]$test
rstlist[[i]]$signal <- as.numeric(tests_rst[[i]]$signal)
rstlist[[i]]$r2 <- tests_rst[[i]]$r2
rstlist[[i]]$frame <- frames
}
for (i in 1:num) {
names(rstlist)[i] <- names(tests_rst)[i]
rstlist[[i]]$Electrode <- names(rstlist)[i]
}
sum_rstlist <- list()
for (i in 1:num){
sum_rstlist[[i]] <- rstlist[[i]][rstlist[[i]]$frame %in% show,]
}
sum_rstlist_fun <- list()
sum_rstlist_fun <- sum_rstlist
plotdta <- data.frame(sum_rstlist_fun[[1]])
for (i in 2:num){
plotdta <- rbind(plotdta,as.data.frame(sum_rstlist_fun[[i]]))
}
print("The following electrodes will not be plot :")
print(as.character(plotdta$Electrode[!toupper(plotdta$Electrode) %in% toupper(elect_coord$Electrode)]))
currdta <- subset(plotdta,toupper(plotdta$Electrode) %in% toupper(elect_coord$Electrode))
currdta$Electrode <- toupper(currdta$Electrode)
currele <- elect_coord
currele$Electrode <- toupper(currele$Electrode)
currdtaele <- merge(currele,currdta,all=T)
circleFun <- function(center = c(0,0),diameter = 1, npoints = 100){
r = diameter / 2
tt <- seq(0,2*pi,length.out = npoints)
xx <- center[1] + r * cos(tt)
yy <- center[2] + r * sin(tt)
return(data.frame(x = xx, y = yy))
}
diameter <- max(dist(currdtaele[,2:3]))+point_size*0.03
datcir <- circleFun(c(mean(as.numeric(currdtaele$x)),
mean(as.numeric(currdtaele$y))),
diameter,npoints = 100)
datnose <- data.frame(x=c(datcir[23,1],0,-datcir[23,1]),
y=c(datcir[23,2],datcir[23,2]+0.3,datcir[23,2]))
currdtaele <- as.data.frame(currdtaele)
currdtaele$x <- as.numeric(currdtaele$x)
currdtaele$y <- as.numeric(currdtaele$y)
if (show_na_ele == F){
currdtaele = na.omit(currdtaele)
}
if (type == "pval"){
if (logscale == T){
plot <- ggplot(currdtaele,aes(x=x,y=y))+
geom_point(aes(fill= -log(pval)),
col=cir_nose_col,size=point_size,pch=21)+
geom_text(aes(label=Electrode),
size=text_size,
alpha = ifelse(text==T,1,0),
col=text_col)+
geom_path(data=datcir,aes(x,y),
alpha = ifelse(circle==T,1,0),
col = cir_nose_col)+
geom_path(data=datnose,aes(x,y),
alpha = ifelse(nose==T,1,0),
col = cir_nose_col)+
scale_fill_gradient2(high="red",low = "blue",midpoint = -log(0.05),
na.value = "grey50",
limit=c(0,-log(min(currdtaele$pval))))
}
if (logscale == F){
plot <- ggplot(currdtaele,aes(x=x,y=y))+
geom_point(aes(fill= pval),
col=cir_nose_col,size=point_size,pch=21)+
geom_text(aes(label=Electrode),
size=text_size,
alpha = ifelse(text==T,1,0),
col=text_col)+
geom_path(data=datcir,aes(x,y),
alpha = ifelse(circle==T,1,0),
col = cir_nose_col)+
geom_path(data=datnose,aes(x,y),
alpha = ifelse(nose==T,1,0),
col = cir_nose_col)+
scale_fill_gradient2(low="red",high = "blue",midpoint = 0.05,
na.value = "grey50",
limit=c(0,max(currdtaele$pval)),
guide = guide_colorbar(reverse = T))
}
}
if (type == "correctedpval"){
if (logscale == T){
plot <- ggplot(currdtaele,aes(x=x,y=y))+
geom_point(aes(fill= -log(correctedpval)),
col=cir_nose_col,size=point_size,pch=21)+
geom_text(aes(label=Electrode),
size=text_size,
alpha = ifelse(text==T,1,0),
col=text_col)+
geom_path(data=datcir,aes(x,y),
alpha = ifelse(circle==T,1,0),
col = cir_nose_col)+
geom_path(data=datnose,aes(x,y),
alpha = ifelse(nose==T,1,0),
col = cir_nose_col)+
scale_fill_gradient2(high="red",low = "blue",midpoint = -log(0.05),
na.value = "grey50",
limit=c(0,-log(min(currdtaele$correctedpval))))
}
if (logscale == F){
plot <- ggplot(currdtaele,aes(x=x,y=y))+
geom_point(aes(fill= correctedpval),
col=cir_nose_col,size=point_size,pch=21)+
geom_text(aes(label=Electrode),
size=text_size,
alpha = ifelse(text==T,1,0),
col=text_col)+
geom_path(data=datcir,aes(x,y),
alpha = ifelse(circle==T,1,0),
col = cir_nose_col)+
geom_path(data=datnose,aes(x,y),
alpha = ifelse(nose==T,1,0),
col = cir_nose_col)+
scale_fill_gradient2(low="red",high = "blue",midpoint = 0.05,
na.value = "grey50",
limit=c(0,max(currdtaele$correctedpval)),
guide = guide_colorbar(reverse = T))
}
}
if (type == "test"){
if (logscale == T){
plot <- ggplot(currdtaele,aes(x=x,y=y))+
geom_point(aes(fill=log(test)),
col=cir_nose_col,size=point_size,pch=21)+
geom_text(aes(label=Electrode),
size=text_size,alpha = ifelse(text==T,1,0),col=text_col)+
geom_path(data=datcir,aes(x,y),
alpha = ifelse(circle==T,1,0),col = cir_nose_col)+
geom_path(data=datnose,aes(x,y),
alpha = ifelse(nose==T,1,0),
col = cir_nose_col)+
scale_fill_gradient2(high="red",low = "blue",
midpoint = median(log(currdtaele$test)),
na.value = "grey50",
limit=c(min(log(currdtaele$test)),
max(log(currdtaele$test))))
}
if (logsclae == F){
plot <- ggplot(currdtaele,aes(x=x,y=y))+
geom_point(aes(fill=test),
col=cir_nose_col,size=point_size,pch=21)+
geom_text(aes(label=Electrode),
size=text_size,
alpha = ifelse(text==T,1,0),
col=text_col)+
geom_path(data=datcir,aes(x,y),
alpha = ifelse(circle==T,1,0),
col = cir_nose_col)+
geom_path(data=datnose,aes(x,y),
alpha = ifelse(nose==T,1,0),
col = cir_nose_col)+
scale_fill_gradient2(high="red",low = "blue",
midpoint = median(currdtaele$test),
na.value = "grey50",
limit=c(min(currdtaele$test),
max(currdtaele$test)))
}
}
if (type == "signal"){
plot <- ggplot(currdtaele,aes(x=x,y=y))+
geom_point(aes(fill=signal),col=cir_nose_col,size=point_size,pch=21)+
geom_text(aes(label=Electrode),
size=text_size,
alpha = ifelse(text==T,1,0),
col=text_col)+
geom_path(data=datcir,aes(x,y),
alpha = ifelse(circle==T,1,0),
col = cir_nose_col)+
geom_path(data=datnose,aes(x,y),
alpha = ifelse(nose==T,1,0),
col = cir_nose_col)+
scale_fill_gradient2(high="red",low = "blue",
midpoint = median(currdtaele$signal),
na.value = "grey50",
limit=c(min(currdtaele$signal),
max(currdtaele$signal)))
}
if (type == "r2"){
plot <- ggplot(currdtaele,aes(x=x,y=y))+
geom_point(aes(fill=r2),col=cir_nose_col,size=point_size,pch=21)+
geom_text(aes(label=Electrode),
size=text_size,
alpha = ifelse(text==T,1,0),
col=text_col)+
geom_path(data=datcir,aes(x,y),
alpha = ifelse(circle==T,1,0),
col = cir_nose_col)+
geom_path(data=datnose,aes(x,y),
alpha = ifelse(nose==T,1,0),
col = cir_nose_col)+
scale_fill_continuous(high="yellow",low = "red",
na.value = "grey50",
limit=c(0,1))
}
return(plot)
}
mcplot <- function(tests_rst,
type = "test", # type = "test" or "signal"
multi = F, # IMPORTANT : depend on your tests rst
# IMPORTANT : Work only if type = test
cor = FALSE,
# IMPORTANT : depend on your tests rst and data
data,frames,datacol,subjcol=NULL,chancol=NULL,othvarcol=NULL,cpvarcol=NULL,
significant_col = "pink" , significant_alpha = 0.2,
# IMPORTANT : work only if type = signal
ci.type = "No", #c("scb","boot","no"),
level = 0.95,
ci.alpha = 0.3,
# sub
cv.degree,
cv.interval = NULL,
scbtype = "normal",
# boot
fun = samplemean <- function(x, d){return(mean(x[d]))},
bootnum = 10,... ) {
options(warn=-1)
# some check functions
if (type == "test") {
if (multi==FALSE){
data <- data.frame(signal=as.numeric(tests_rst$signal))
data$frames = frames
data$significant <-
ifelse(data$frames %in% data$frames[tests_rst$significant],
"sig","non-sig")
data$sign_frames <-
ifelse(data$frames %in% data$frames[tests_rst$significant],
data$frames,NA)
data$group <- rep(0,length(data$signal))
data$r2 <- tests_rst$r2
if (cor == TRUE){
plot <- ggplot(data,
aes(x=frames,y=sign(signal)*sqrt(r2),group=group))+
geom_vline(data=data,
aes(xintercept = sign_frames,
col=significant_col),
alpha=significant_alpha)+
geom_line()+
labs(y = "Correlation")+
theme(legend.position="none")
} else {
plot <- ggplot(data,aes(x=frames,y=signal,group=group))+
geom_vline(data=data,
aes(xintercept = sign_frames),
col=significant_col,
alpha=significant_alpha)+
geom_line()+
labs(y = "Signal")+
theme(legend.position="none")
}
} else {
listlen <- length(tests_rst)
data_list <- list()
for (k in 1:listlen){
data_list[[k]] <- data.frame(signal=as.numeric(tests_rst[[k]]$signal))
data_list[[k]]$frames = frames
data_list[[k]]$significant<-ifelse(data_list[[k]]$frames %in% data_list[[k]]$frames[tests_rst[[k]]$significant],"sig","non-sig")
data_list[[k]]$sign_frames <- ifelse(data_list[[k]]$frames %in% data_list[[k]]$frames[tests_rst[[k]]$significant],data_list[[k]]$frames,NA)
data_list[[k]]$group <- rep(0,length(data_list[[k]]$signal))
data_list[[k]]$r2 <- tests_rst[[k]]$r2
data_list[[k]]$Channel <- names(tests_rst)[k]
}
data_plot <- data_list[[1]]
for (j in 2 : listlen){
data_plot <- rbind(data_plot,data_list[[j]])
}
if (cor == TRUE){
plot <- ggplot(data_plot,aes(x=frames,y=sign(signal)*sqrt(r2),group=group))+
geom_vline(data=data_plot,
aes(xintercept = sign_frames),
col=significant_col,
alpha=significant_alpha)+
geom_line()+
facet_wrap(~Channel)+
labs(y = "Correlation")+
theme(legend.position="none")
} else {
plot <- ggplot(data_plot,aes(x=frames,y=signal,group=group))+
geom_vline(data=data_plot,
aes(xintercept = sign_frames),
col=significant_col,
alpha=significant_alpha)+
geom_line()+
labs(y="Signal")+
facet_wrap(~Channel)+
theme(legend.position="none")
}
}
}
if (type == "signal") {
dta <- data
if (!ci.type %in% c("scb","boot","No")){stop(" ci.type should be 'scb','boot' or 'No'")}
if (multi == F ){
data_sign <- data.frame(frames=frames)
data_sign$significant <-
ifelse(data_sign$frames %in% data_sign$frames[tests_rst$significant],"sig","non-sig")
data_sign$sign_frames <-
ifelse(data_sign$frames %in% data_sign$frames[tests_rst$significant],data_sign$frames,NA)
data_sign$group <- rep(0,length(frames))
if (ci.type == "boot"){
plot <- ciplot(dta,frames,
datacol,subjcol,chancol,othvarcol=othvarcol,
cpvarcol,level = level,ci.alpha = ci.alpha,type=ci.type,
fun = fun,bootnum=bootnum,...)+
geom_vline(data=data_sign,
aes(xintercept = sign_frames),
col=significant_col,
alpha=significant_alpha)+
labs(y="Signal")
}
if (ci.type == "scb"){
plot <- ciplot(dta,frames,
datacol,subjcol,chancol,othvarcol=othvarcol,
cpvarcol,level = level,ci.alpha = ci.alpha,type=ci.type,
cv.degree = cv.degree,
cv.interval = cv.interval,
scbtype = scbtype,...)+
geom_vline(data=data_sign,
aes(xintercept = sign_frames),
col=significant_col,
alpha=significant_alpha)+
labs(y="Signal")
}
if (ci.type == "No"){
###
}
}
if (multi == T) {
if (ci.type == "boot"){
bootintval <- c((0.5-level/2),(level/2+0.5))
bootalpha <- ci.alpha
bootstrap <- function(x,bootnum,bootfun,bootintval=c(0.025,0.975),quantilenum,...){
boot_result <- boot(x,statistic = bootfun,R = bootnum,...) #fun
return(quantile(boot_result$t,bootintval,na.rm = T)[quantilenum])}
listlen <- length(tests_rst)
test_list = list()
for (i in 1: listlen){
test_list[[i]] <- data.frame(frames=frames)
test_list[[i]]$significant <-
ifelse(test_list[[i]]$frames %in% test_list[[i]]$frames[tests_rst[[i]]$significant],"sig","non-sig")
test_list[[i]]$sign_frames <-
ifelse(test_list[[i]]$frames %in% test_list[[i]]$frames[tests_rst[[i]]$significant],test_list[[i]]$frames,NA)
test_list[[i]]$group <- rep(0,length(frames))
test_list[[i]]$Channel <- names(tests_rst)[i]
}
test_plot <- test_list[[1]]
for (k in 2:listlen){
test_plot <- rbind(test_plot,test_list[[k]])
}
if (is.null(cpvarcol)){
data_fun <- data_summarize(dta,frames,
datacol,subjcol,chancol,othvarcol,
summarycol = c(chancol),fun=fun)
data_Q1 <- data_summarize(dta,frames,
datacol,subjcol,chancol,othvarcol,
summarycol = c(chancol),
fun=bootstrap,
bootnum=bootnum,bootfun=fun,
bootintval=bootintval,quantilenum=1)
data_Q2 <- data_summarize(dta,frames,
datacol,subjcol,chancol,othvarcol,
summarycol = c(chancol),
fun=bootstrap,bootnum=bootnum,bootfun=fun,
bootintval=bootintval,quantilenum=2)
data_fun_long <- melt(data_fun,id=c(colnames(dta)[chancol]))
data_fun_long <- data_fun_long[order(data_fun_long[,1],
data_fun_long[,2],
data_fun_long[,3]),]
colnames(data_fun_long)[3] <- "FUN"
data_Q1_long <- melt(data_Q1,id=c(colnames(dta)[chancol]))
data_Q1_long <- data_Q1_long[order(data_Q1_long[,1],
data_Q1_long[,2],
data_Q1_long[,3]),]
data_Q2_long <- melt(data_Q2,id=c(colnames(dta)[chancol]))
data_Q2_long <- data_Q2_long[order(data_Q2_long[,1],
data_Q2_long[,2],
data_Q2_long[,3]),]
data_fun_long$Q1 <- data_Q1_long[,3]
data_fun_long$Q2 <- data_Q2_long[,3]
data_fun_long$frames <- c(rep(frames,
(dim(data_fun_long)[1]/length(frames))))
colnames(data_fun_long)[1] <- c("Channel")
data_plot <- merge(data_fun_long,
test_plot,
by =c("Channel","frames"))
plot <- ggplot(data_plot,aes(x=frames))+
geom_vline(aes(xintercept = sign_frames),
col=significant_col,
alpha=significant_alpha)+
geom_ribbon(aes(x=frames, ymax=Q2, ymin=Q1),
alpha=ci.alpha)+
geom_line(aes(y = FUN))+
facet_wrap(~Channel)+
labs(y="Signal")+
theme(legend.position="none")
} else {
dta[,cpvarcol] <- as.factor(dta[,cpvarcol])
dta[,chancol] <- as.factor(dta[,chancol])
data_fun <- data_summarize(dta,frames,
datacol,subjcol,chancol,othvarcol,
summarycol = c(chancol,cpvarcol),fun=fun)
data_Q1 <- data_summarize(dta,frames,
datacol,subjcol,chancol,othvarcol,
summarycol = c(chancol,cpvarcol),
fun=bootstrap,bootnum=bootnum,bootfun=fun,
bootintval=bootintval,quantilenum=1)
data_Q2 <- data_summarize(dta,frames,
datacol,subjcol,chancol,othvarcol,
summarycol = c(chancol,cpvarcol),
fun=bootstrap,bootnum=bootnum,bootfun=fun,
bootintval=bootintval,quantilenum=2)
data_fun_long <- melt(data_fun,
id=c(colnames(dta)[chancol],
colnames(dta)[cpvarcol]))
data_fun_long <- data_fun_long[order(data_fun_long[,1],
data_fun_long[,2],
data_fun_long[,3]),]
colnames(data_fun_long)[4] <- "FUN"
data_Q1_long <- melt(data_Q1,
id=c(colnames(dta)[chancol],
colnames(dta)[cpvarcol]))
data_Q1_long <- data_Q1_long[order(data_Q1_long[,1],
data_Q1_long[,2],
data_Q1_long[,3]),]
data_Q2_long <- melt(data_Q2,
id=c(colnames(dta)[chancol],
colnames(dta)[cpvarcol]))
data_Q2_long <- data_Q2_long[order(data_Q2_long[,1],
data_Q2_long[,2],
data_Q2_long[,3]),]
data_fun_long$Q1 <- data_Q1_long[,4]
data_fun_long$Q2 <- data_Q2_long[,4]
data_fun_long$frames <-
c(rep(frames,(dim(data_fun_long)[1]/length(frames))))
colnames(data_fun_long)[1:2] <- c("Channel","Condition")
data_plot <- merge(data_fun_long,
test_plot,
by =c("Channel","frames"))
plot <- ggplot(data_plot,aes(x=frames,group=Condition))+
geom_vline(aes(xintercept = sign_frames),
col=significant_col,
alpha=significant_alpha)+
geom_ribbon(aes(x=frames, ymax=Q2, ymin=Q1,fill=Condition),
alpha=ci.alpha)+
geom_line(aes(y = FUN,col=Condition))+
labs(y="Signal")+# Need some changes ?
facet_wrap(~Channel)+
theme(legend.position="none")
}
}
if (ci.type == "scb"){
listlen <- length(tests_rst)
test_list = list()
for (i in 1: listlen){
test_list[[i]] <- data.frame(frames=frames)
test_list[[i]]$significant <-
ifelse(test_list[[i]]$frames %in% test_list[[i]]$frames[tests_rst[[i]]$significant],"sig","non-sig")
test_list[[i]]$sign_frames <-
ifelse(test_list[[i]]$frames %in% test_list[[i]]$frames[tests_rst[[i]]$significant],test_list[[i]]$frames,NA)
test_list[[i]]$group <- rep(0,length(frames))
test_list[[i]]$Channel <- names(tests_rst)[i]
}
test_plot <- test_list[[1]]
for (k in 2:listlen){
test_plot <- rbind(test_plot,test_list[[k]])
}
if (is.null(cpvarcol)){
dtalist <- list()
for (i in 1:length(levels(dta[,chancol]))){
dtachan <- subset( dta,dta[,chancol] == levels(dta[,chancol])[i])
h <- cv.select(frames,dtachan[,datacol],
degree = cv.degree, interval = cv.interval)
scbchan <- scb.mean(frames, dtachan[,datacol],
bandwidth = h, level = level,
scbtype = scbtype,...)
dtalist[[i]] <- data.frame(FUN = scbchan$nonpar)
if (scbtype == "bootstrap"){
dtalist[[i]]$Q1 <- scbchan$bootscb[,1]
dtalist[[i]]$Q2 <- scbchan$bootscb[,2]
}
if (scbtype == "normal"){
dtalist[[i]]$Q1 <- scbchan$normscb[,1]
dtalist[[i]]$Q2 <- scbchan$normscb[,2]
}
dtalist[[i]]$Channel <- levels(dta[,chancol])[i]
dtalist[[i]]$frames <- frames
}
plotdata <- dtalist[[1]]
for (i in 2:length(dtalist)){plotdata <- rbind(plotdata,dtalist[[i]])}
data_plot <- merge(plotdata,
test_plot,
by =c("Channel","frames"))
plot <- ggplot(data_plot,aes(x=frames))+
geom_vline(aes(xintercept = sign_frames),
col=significant_col,
alpha=significant_alpha)+
geom_ribbon(aes(x=frames, ymax=Q2, ymin=Q1),
fill=signal_line_col,alpha=ci.alpha)+ # set alpha
geom_line(aes(y = FUN),col=signal_line_col)+
facet_wrap(~Channel)+
labs(y="Signal")+
theme(legend.position="none")
} else {
dtalist <- list()
for (i in 1:length(levels(dta[,chancol]))){
dtacplist <- list()
for (j in 1 : length(levels(dta[,cpvarcol]))){
dtachan <- subset(dta,
dta[,chancol] == levels(dta[,chancol])[i] & dta[,cpvarcol] == levels(dta[,cpvarcol])[j])
h <- cv.select(frames,dtachan[,datacol],
degree = cv.degree, interval = cv.interval)
scbchan <- scb.mean(frames, dtachan[,datacol],
bandwidth = h, level = level,
scbtype = scbtype)
dtacplist[[j]] <- data.frame(FUN = scbchan$nonpar)
if (scbtype == "bootstrap"){
dtacplist[[j]]$Q1 <- scbchan$bootscb[,1]
dtacplist[[j]]$Q2 <- scbchan$bootscb[,2]
}
if (scbtype == "normal"){
dtacplist[[j]]$Q1 <- scbchan$normscb[,1]
dtacplist[[j]]$Q2 <- scbchan$normscb[,2]
}
dtacplist[[j]]$Channel <- levels(dta[,chancol])[i]
dtacplist[[j]]$frames <- frames
dtacplist[[j]]$Condition <- levels(dta[,cpvarcol])[j]
}
dtalist[[i]] <- dtacplist[[1]]
for (k in 2:length(dtacplist)){dtalist[[i]] <- rbind(dtalist[[i]],dtacplist[[k]])}
}
plotdata <- dtalist[[1]]
for (i in 2:length(dtalist)){plotdata <- rbind(plotdata,dtalist[[i]])}
data_plot <- merge(plotdata,
test_plot,
by =c("Channel","frames"))
plot <- ggplot(data_plot,aes(x=frames,group=Condition))+
geom_vline(aes(xintercept = sign_frames),
col=significant_col,
alpha=significant_alpha)+
geom_ribbon(aes(x=frames, ymax=Q2, ymin=Q1,fill=Condition),
alpha=ci.alpha)+ # set alpha
geom_line(aes(y = FUN,col=Condition))+
labs(y="Signal")+# Need some changes ?
facet_wrap(~Channel)+
scale_color_manual(values = c("red","blue"),name = colnames(dta)[cpvarcol])+
scale_fill_manual(values = c("red","blue"),name = colnames(dta)[cpvarcol])
}
}
if (ci.type == "No"){
listlen <- length(tests_rst)
test_list = list()
for (i in 1: listlen){
test_list[[i]] <- data.frame(frames=frames)
test_list[[i]]$significant <-
ifelse(test_list[[i]]$frames %in% test_list[[i]]$frames[tests_rst[[i]]$significant],"sig","non-sig")
test_list[[i]]$sign_frames <-
ifelse(test_list[[i]]$frames %in% test_list[[i]]$frames[tests_rst[[i]]$significant],test_list[[i]]$frames,NA)
test_list[[i]]$group <- rep(0,length(frames))
test_list[[i]]$Channel <- names(tests_rst)[i]
}
test_plot <- test_list[[1]]
for (k in 2:listlen){
test_plot <- rbind(test_plot,test_list[[k]])
}
if (is.null(cpvarcol)){
data_fun <- data_summarize(dta,frames,
datacol,subjcol,chancol,othvarcol,
summarycol = c(chancol),fun=fun)
data_fun_long <- melt(data_fun,id=c(colnames(dta)[chancol]))
data_fun_long <- data_fun_long[order(data_fun_long[,1],
data_fun_long[,2],
data_fun_long[,3]),]
colnames(data_fun_long)[3] <- "FUN"
colnames(data_fun_long)[1] <- c("Channel")
data_plot <- merge(data_fun_long,
test_plot,
by =c("Channel","frames"))
plot <- ggplot(data_plot,aes(x=frames))+
geom_vline(aes(xintercept = sign_frames),
col=significant_col,
alpha=significant_alpha)+
geom_line(aes(y = FUN))+
facet_wrap(~Channel)+
labs(y="Signal")+
theme(legend.position="none")
} else {
dta[,cpvarcol] <- as.factor(dta[,cpvarcol])
dta[,chancol] <- as.factor(dta[,chancol])
data_fun <- data_summarize(dta,frames,
datacol,subjcol,chancol,othvarcol,
summarycol = c(chancol,cpvarcol),fun=fun)
data_fun_long <- melt(data_fun,
id=c(colnames(dta)[chancol],
colnames(dta)[cpvarcol]))
data_fun_long <- data_fun_long[order(data_fun_long[,1],
data_fun_long[,2],
data_fun_long[,3]),]
colnames(data_fun_long)[4] <- "FUN"
data_fun_long$frames <-
c(rep(frames,(dim(data_fun_long)[1]/length(frames))))
colnames(data_fun_long)[1:2] <- c("Channel","Condition")
data_plot <- merge(data_fun_long,
test_plot,
by =c("Channel","frames"))
plot <- ggplot(data_plot,aes(x=frames,group=Condition))+
geom_vline(aes(xintercept = sign_frames),
col=significant_col,
alpha=significant_alpha)+
geom_line(aes(y = FUN,col=Condition))+
labs(y="Signal")+# Need some changes ?
facet_wrap(~Channel)+
theme(legend.position="none")
}
}
}
return(plot)
}
}
head(dta[,1:8])
Subject Channel Condition value.1 value.2 value.3 value.4
1 subj1 Fp1 nonword -1.545226 -1.889412 -1.463414 -1.335739
2 subj1 Fp2 nonword -1.373787 -1.853133 -1.751572 -1.913380
3 subj1 F3 nonword -2.856959 -2.690639 -0.926768 -0.168384
4 subj1 F4 nonword -2.302168 -2.675416 -1.816674 -1.546154
5 subj1 C3 nonword -4.778307 -4.948525 -2.399150 -1.290970
6 subj1 C4 nonword -1.423518 -1.694514 -1.484223 -1.729665
value.5
1 -1.0099440
2 -1.5702070
3 0.7674268
4 -0.8345606
5 0.5188065
6 -1.4330980