• No results found

4.4 Results: Visual Search

4.4.4 Predicting search performance

#Carga de librerías library(fda) library(fda.usc) library(car) library(gridExtra) library(ggplot2)

#Carga de las listas de datos

load("~/TFG 3.0/Datos_R/PedaSinc.RData") load("~/TFG 3.0/Datos_R/Pedaleo100.RData") #Creación de la base de Fourier

daybasis35 <- create.fourier.basis(rangeval=c(0, 100), nbasis=35) #Fucnión Error cuadrático medio

Error<-function(y_i,t_i,objetofd){

funcion=eval.fd(t_i,objetofd, returnMatrix=TRUE) ECM=sum((y_i-funcion)^2)/length(funcion)

return(ECM) }

#Sacamos el ECM para sujeto y creamos una lista ECMsujeto1<-numeric(11)

for(i in 1:11){ECMsujeto1[i]<-Error(Pedaleo100$Angulo[,,3,1][,i], seq(1,100),MetA.fd[i])}

#Suma total sum(ECMsujeto1)

#ECM por sujeto Método B derecha ECMsujeto2<-numeric(11)

for(i in 1:11){ECMsujeto2[i]<-Error(Pedaleo100$Angulo[,,3,2][,i], seq(1,100),MetB.fd[i])} #Suma total

sum(ECMsujeto2)

#ECM por sujeto Método A izqda ECMsujeto3<-numeric(11)

for(i in 1:11){ECMsujeto3[i]<-Error(Pedaleo100$Angulo[,,12,1][,i], seq(1,100),MetA.fi[i])} #Suma total

58 Apéndice A. Código R

sum(ECMsujeto3)

#ECM por sujeto Método B izqda ECMsujeto4<-numeric(11) for(i in 1:11){ECMsujeto4[i]<-Error(Pedaleo100$Angulo[,,12,2][,i], seq(1,100),MetB.fi[i])} #Suma total sum(ECMsujeto4) #Gráfico de barras de CM leg <- c("S1","S2","S3","S4","S5","S6","S7","S8","S9","S10","S11") par(mfrow=c(2,2),mai=c(.39,.39,.39,.39)) barplot(ECMsujeto3,col=rainbow(11),main="", ylab="MSE",xlab="", names.arg=leg, border="blue",las = 3) barplot(ECMsujeto1,col=rainbow(11),main="", ylab="MSE",xlab="", names.arg=leg, border="blue",las = 3) barplot(ECMsujeto4,col=rainbow(11),main="", ylab="MSE",xlab="", names.arg=leg, border="blue",las = 3) barplot(ECMsujeto2,col=rainbow(11),main="", ylab="MSE",xlab="", names.arg=leg, border="blue",las = 3) par(mfrow=c(1,1))

#Creación rejilla de tiempo y rango Pedatime <- as.matrix((0:99)+0.5) Pedarange <- c(0,100)

#Selección de variables

Peda <- PedaSinc$Angulo[,,c(10,13),1] #Obtención de los rangos

apply(Peda,3,range)

#Creación acelerador armónico

harmaccelLfd <- vec2Lfd(c(0, (2*pi/100)^2, 0), rangeval=Pedarange) #Creación de in objeto funcional que contiene las curvas suavizadas Pedafd <- smooth.basisPar(Pedatime, Peda,daybasis35,

Lfdobj=harmaccelLfd, lambda=1)$fd names(Pedafd$fdnames) <- c("t", "Sujeto", "Variable") Pedafd$fdnames[[3]] <- c('FRIA', 'FTIA')

#Representación gráfica de las curvas

par(mfrow=c(2,1), oma=c(.5,.3,.1,.1),mai=c(.4,.3,.3,0)) plot(Pedafd, cex=1.2,ylab="fcd")

#Medias

Pedameanfd <- mean.fd(Pedafd)

# Gráficos de las medias de las curvas y de las medias de las #dos primeras drivadas de las curvas

op <- par(mfcol=2:3)

plot(Pedameanfd[1],col="blue",lwd=3)

plot(Pedameanfd, Lfdobj=1,col="darkorange",lwd=3) plot(Pedameanfd, Lfdobj=2,col="magenta",lwd=3) par(op)

59

# Varianzas y correlaciones Pedavarbifd <- var.fd(Pedafd)

#class(Pedavarbifd)-> "bifd", objeto funcional bivariable #str(Pedavarbifd)

#convierte el bifd en un array

Pedavararray <- eval.bifd((0:99)+0.5, (0:99)+0.5, Pedavarbifd) #Gráficos de suprficie de covarianzas y gráficos de contornos par(mfrow=c(1,1))

persp(Pedatime, Pedatime, Pedavararray[,,1,1], theta = 300, phi = 30, ticktype = "detailed", axes=T, cex=1.2, xlab="t1",ylab="t2",zlab="Cov") title()

persp(Pedatime, Pedatime, Pedavararray[,,1,2],expand = 1, theta = 110, phi = 30, cex=1.2, xlab="t1",ylab="t2",zlab="Cov") title("Cadera - Cadera")

persp(Pedatime, Pedatime, Pedavararray[,,1,3], cex=1.2, xlab="t",ylab="t",zlab="Cov")

title("Rodilla - Rodilla") #Gráficos de contornos

filled.contour(Pedatime, Pedatime, Pedavararray[,,1,1], cex=1.0) title("Cadera - Cadera")

filled.contour(Pedatime, Pedatime, Pedavararray[,,1,2], cex=1.2) title("Cadera - Rodilla")

filled.contour(Pedatime, Pedatime, Pedavararray[,,1,3], cex=1.2) title("Rodilla - Rodilla")

# Gráficos de contornos de las autocorrelaciones PedaCorArray <- cor.fd((0:99)+0.5, Pedafd) quantile(PedaCorArray)

contour(Pedatime, Pedatime, PedaCorArray[,,1,1], cex=1.2) title("Cadera - Cadera")

contour(Pedatime, Pedatime, PedaCorArray[,,1,2], cex=1.2,labcex = 1.5) title("FCDA - FRDA")

contour(Pedatime, Pedatime, PedaCorArray[,,1,3], cex=1.2) title("Rodilla - Rodilla")

#Componentes principales con Rotación VARIMAX #obtnción de las components principales funcionales AiPCA <- pca.fd(MetA.fi, nharm=3)

60 Apéndice A. Código R

par(mfrow=c(1,1))

plot(1:6,(AiPCA[[2]][1:6]), type="b",

xlab="Número Autovalor", ylab="Autovalor",col="blue",lwd=2) abline(lsfit(3:20, AiPCA[[2]][3:20]), lty=2,lwd=2,col="red") #Rotacion de las componentes

AiPCAVM <- varmx.pca.fd(AiPCA,nharm=3) # str(FleCadDerMetAPCAVM)

# dimnames(daytemppcaobjVM$scores)[[2]] <- paste("PCA", 1:4, sep=".") # round(daytemppcaobjVM$scores)

#Perturbaciones Componentes principales (mean +- 0.2sqrt(di)PCi) par(mfrow=c(2,2),oma=c(.1,.7,.5,.1),mai=c(.3,.7,.6,.1))

plot(MetA.fi, axes=T, main="Curvas suavizadas",xlab="")

plot.pca.fd(AiPCA, xlab="",pointplot = F, cex.main=.9,col="darkorange" ,lwd=3, expand = 40 )

#Perturbaciones Componentes principales rotadas

par(mfrow=c(2,2),oma=c(.1,.7,.5,.1),mai=c(.3,.7,.6,.1)) plot(MetA.fi, axes=T, main="Curvas suavizadas",xlab="")

plot.pca.fd(AiPCAVM, xlab="",pointplot = F, cex.main=.9,col="darkorange lwd=3, expand = 40 ) #Gráficos con los armónicos

par(mfrow=c(1,1),oma=c(.1,.7,.1,.1),mai=c(.4,.9,.1,.1))

plot.fd(AiPCA$harmonics[1], ylim = c(-0.2,0.17), main ='MetAizq') legend(0,-0.05, c("PC1","PC2","PC3"), bty='n',fill=c('darkorange', 'red','cyan'), cex=.9) lines(AiPCA$harmonics[1], lwd=2, col="darkorange") lines(AiPCA$harmonics[2], lwd=2, col="red") lines(AiPCA$harmonics[3], lwd=2, col="cyan") abline(h=0, lty=3)

#Gráficos con los armónicos rotados

par(mfrow=c(1,1),oma=c(.1,.7,.1,.1),mai=c(.4,.9,.1,.1))

plot.fd(AiPCAVM$harmonics[1], ylim = c(-0.3,0.22), main ='MetAizq') legend(0,-0.05, c("PC1","PC2","PC3"), bty='n',fill=c('darkorange', 'red','cyan'), cex=.9) lines(AiPCAVM$harmonics[1], lwd=2, col="darkorange") lines(AiPCAVM$harmonics[2], lwd=2, col="red") lines(AiPCAVM$harmonics[3], lwd=2, col="cyan") abline(h=0, lty=3)

#Puntuaciones en los armónicos harmscrAi <- AiPCA[[3]]

harmscrAiVM <- AiPCAVM[[3]] # Gráficos screeplot sin rotar

par(mfrow=c(1,1),oma=c(.1,.7,.1,.1),mai=c(.9,.9,.1,.1))

61

,xlab="PC1", ylab="PC2", main="")

text(harmscrAi[,1], harmscrAi[,2]+2, Pedaleo100$sujeto, col="darkblue") abline(h=0,lty=3);abline(v=0,lty=3)

# Gráficos screeplot rotados

par(mfrow=c(1,1),oma=c(.1,.7,.1,.1),mai=c(.8,.9,.1,.1))

plot(harmscrAiVM[,1], harmscrAiVM[,2], xlim=c(-80,70), ylim=c(-90,90) ,xlab="PC1", ylab="PC2", main="") text(harmscrAiVM[,1], harmscrAiVM[,2]+2, Pedaleo100$sujeto, col="darkblue") abline(h=0,lty=3);abline(v=0,lty=3)

###Componentes principales bivariantescon Rotación VARIMAX PedafdPar <- fdPar(daybasis35, harmaccelLfd, lambda=2) class(PedafdPar)

Pedapca.fd <- pca.fd(Pedafd, nharm=3, PedafdPar)

#Gráficas de los componentes como perturbaciones de la media op <- par(mfrow=c(1,2),mai=c(1.2,.8,.6,.8))

plot.pca.fd(Pedapca.fd, cycle=F, pointplot=F, ylim=c(-20,120), expand = 200,lwd=3,col="darkblue") par(op) #Cálculo de autovalores Pedapca.fd$values[1]/sum(Pedapca.fd$values) Pedapca.fd$values[2]/sum(Pedapca.fd$values) Pedapca.fd$values[3]/sum(Pedapca.fd$values) #Cálculo de puntuaciones de las curvas Pedascores = Pedapca.fd$scores

#Evalua y representa la curva de medias de las variables

evalvar1 <-eval.fd(seq(1,100,4),Pedameanfd,returnMatrix = T)[,,1] evalvar2 <-eval.fd(seq(1,100,4),Pedameanfd,returnMatrix = T)[,,2] par(mfrow=c(1,2),mai=c(1.2,.8,.6,.8))

plot(evalvar1,evalvar2, col="darkblue", type='o', xlim=c(55,100), ylim=c(20,110) ,xlab='Angulo rodilla', ylab='Angulo tobillo') text(evalvar1,evalvar2+2, 1:25, col="darkblue")

abline(a=-53,b=1.56,col='red',lty=2)

#Construye un data.frame con las curvas medias y los vectores de #perturbación de las componentes

df <- data.frame(evalvar1,evalvar2,

arrow.x.start=NA,arrow.y.start=NA, arrow.x.end=NA,arrow.y.end=NA)

#Representación de los armónicos como perturbaciones de los pares de medias #Diagrama flechas primer armónico bidimensional

#par(mfrow=c(2,2)) for(i in 1:25){

df$arrow.x.start[i] <- df$evalvar1[i]

62 Apéndice A. Código R

df$arrow.y.start[i] <- df$evalvar2[i]

df$arrow.y.end[i] <- df$arrow.y.start[i] + 30*var2harmmat[i,1] }

v11 = sum(var1harmmat[,1]^2)/(sum(var1harmmat[,1]^2)+sum(var2harmmat[,1]^2)) v21 = sum(var2harmmat[,1]^2)/(sum(var1harmmat[,1]^2)+sum(var2harmmat[,1]^2)) #Gráfico del primer armónico bidimesional

g1 <- ggplot(df,aes(x=x,y=y), size=.5)+geom_point(x=evalvar1, y=evalvar2,col="red",size=2)+theme_minimal()+

geom_segment(aes(x=arrow.x.start,y=arrow.y.start,xend=arrow.x.end, yend=arrow.y.end),arrow=arrow(length=unit(0.20,"cm")))

#Diagrama flechas del segundo armónico for(i in 1:25){

df$arrow.x.start[i] <- df$evalvar1[i]

df$arrow.x.end[i] <- df$arrow.x.start[i] + 30*var1harmmat[i,2] df$arrow.y.start[i] <- df$evalvar2[i]

df$arrow.y.end[i] <- df$arrow.y.start[i] + 30*var2harmmat[i,2] }

v12 = sum(var1harmmat[,2]^2)/(sum(var1harmmat[,2]^2)+sum(var2harmmat[,2]^2)) v22 = sum(var2harmmat[,2]^2)/(sum(var1harmmat[,2]^2)+sum(var2harmmat[,2]^2)) #Gráfico del primer armónico bidimesional

g2 <-ggplot(df,aes(x=x,y=y),size=.5)+geom_point(x=evalvar1, y=evalvar2,col="blue",size=2)+theme_minimal()+

geom_segment(aes(x=arrow.x.start,y=arrow.y.start,xend=arrow.x.end, yend=arrow.y.end),arrow=arrow(length=unit(0.20,"cm"))) #Diagrama flechas tercer armónico

for(i in 1:25){

df$arrow.x.start[i] <- df$evalvar1[i]

df$arrow.x.end[i] <- df$arrow.x.start[i] + 30*var1harmmat[i,3] df$arrow.y.start[i] <- df$evalvar2[i]

df$arrow.y.end[i] <- df$arrow.y.start[i] + 30*var2harmmat[i,3] }

v13 = sum(var1harmmat[,3]^2)/(sum(var1harmmat[,3]^2)+sum(var2harmmat[,3]^2)) v23 = sum(var2harmmat[,3]^2)/(sum(var1harmmat[,3]^2)+sum(var2harmmat[,3]^2)) #Gráfico del tercer armónico bidimesional

g3 <- ggplot(df,aes(x=x,y=y),size=.5)+geom_point(x=evalvar1, y=evalvar2,col="green",size=2)+theme_minimal()+

geom_segment(aes(x=arrow.x.start,y=arrow.y.start,xend=arrow.x.end, yend=arrow.y.end),arrow=arrow(length=unit(0.20,"cm"))) # #diagrama flechas cuarto armónico

# for(i in 1:100){

# df$arrow.x.start[i] <- df$evalvar1[i]

# df$arrow.x.end[i] <- df$arrow.x.start[i] + 30*var1harmmat[i,4] # df$arrow.y.start[i] <- df$evalvar2[i]

# df$arrow.y.end[i] <- df$arrow.y.start[i] + 30*var2harmmat[i,4] # }

# g4 <-ggplot(df,aes(x=x,y=y))+geom_point(x=evalvar1,y=evalvar2)+theme_minimal()+ # geom_segment(aes(x=arrow.x.start,y=arrow.y.start,xend=arrow.x.end,

63

#Representaciones de los armónicos

plot(g1,xlim=c(55,100),ylim=c(20,115), xaxp='n',yaxp='n') plot(g2,xlim=c(50,120),ylim=c(50,100), xaxp='n',yaxp='n') plot(g3,xlim=c(50,120),ylim=c(50,100), xaxp='n',yaxp='n')

###############Análisis de correlaciones canónicas################# #Cración de los objetos de penalización

FCiA.fdPar <- fdPar(FCiA.fd, harmaccelLfd, 1e6) FRiA.fdPar <- fdPar(FRiA.fd, harmaccelLfd, 1e6) #Obtención de las correelaciones canónicas

ccafd <- cca.fd(FCiA.fd,FRiA.fd, ncan=2, FCiA.fdPar, FRiA.fdPar) class(ccafd)

# plot the canonical weight functions

# par(mfrow=c(1,2))#, mar=c(3,4,2,1), pty="m") # plot(ccafd, cex=1.2)

#Imprimir correlaciones y gráfico de las mismas par(mfrow=c(1,1))

round(ccafd$ccacorr[1:6],3)

plot(1:6, ccafd$ccacorr[1:6], type="b") #Representar las funciones de peso

par(mfrow=c(1,2),oma=c(1,1,1,1),mar=c(3,4,2,1)) plot(1:100,eval.fd(1:100,ccafd$ccawtfd1[1], returnMatrix=TRUE), type="l",col="blue", lwd=1.5, ylab="", xlab="Componentes_CCA_1",ylim=c(-0.2,0.2)) lines(1:100,eval.fd(1:100,ccafd$ccawtfd2[1], returnMatrix=TRUE), col="green",lwd=1.5) abline(h=0,lty=3) plot(1:100,eval.fd(1:100,ccafd$ccawtfd1[2], returnMatrix=TRUE), type="l",col="blue", lwd=1.5, ylab="", xlab="Componentes_CCA_2",ylim=c(-0.2,0.2)) lines(1:100,eval.fd(1:100,ccafd$ccawtfd2[2], returnMatrix=TRUE), col="green",lwd=1.5) abline(h=0,lty=3)

#gráfico de puntuaciones en las coordenadas canónicas par(mfrow=c(1,2),oma=c(1,1,1,1),mar=c(4,4,2,1))

plot(ccafd$ccavar1[,1], ccafd$ccavar2[,1], xlim=c(-15,13), ylim=c(-26,30),xlab="Cadera", ylab="Rodilla", main="") text(ccafd$ccavar1[,1], ccafd$ccavar2[,1]-.15, cex=.9,

PedaSinc$sujeto, col='darkblue') abline(h=0,lty=3);abline(v=0,lty=3)

plot(ccafd$ccavar1[,2], ccafd$ccavar2[,2], xlim=c(-12,10), ylim=c(-22,18), xlab="Cadera", ylab="Rodilla", main="") text(ccafd$ccavar1[,2], ccafd$ccavar2[,2]-.15, cex=.9,

PedaSinc$sujeto, col='darkblue') abline(h=0,lty=3);abline(v=0,lty=3)