====== Wataru ====== ====== Proposta de trabalho final ====== Os objetivos do programa são: 1- organizar as informações contidas em uma tabela produzida por um computador que registra as informações de uma tarefa envolvendo ratos. Cada linha da tabela representa uma tentativa. As colunas representam: tentativa, lado da apresentação do estímulo 1 (direita ou esquerda), lado da apresentação do estímulo 2 (direita ou esquerda), intervalo entre as apresentações dos estímulos ( 100, 400 e 600ms), tempo de resposta do animal ao estímulo e outras (sem importância para as minhas análises). As combinações entre os lados de apresentação dos estímulos será resumido em válidas (estímulo 1 e 2 aparecem do mesmo lado) e inválidas (estímulos 1 e 2 aparecem em lados opostos) Assim, os dados de saída para cada tabela será a mediana do tempo de reação em: válida 100, inválida 100, válida 400, inválida 400 e válida 600, inválida 600. Cada um dos arquivos de saída pode conter registros de mais de uma sessão; para cada sessão será produzida um conjunto de dados de saída. Ao final do processo será produzida uma matriz com as medianas (ou média das medianas caso exista mais de uma sessão por rato) de cada animal. 2- em seguida o programa construirá um ou mais gráficos a partir das informações contidas na matriz de saída. 3- finalmente, com a matriz de saida, o programa realizará o teste de análise de variância comparando tempo de reação entre tentativas válidas e inválidas em cada um dos intervalos. {{:bie5782:01_curso_atual:alunos:trabalho_final:wataru.sumi:b14in4b.xls|DADOS}} ====== Conjunto de dados no formato para utlização da função====== {{:bie5782:01_curso_atual:alunos:trabalho_final:wataru.sumi:1.dat.txt|1}} {{:bie5782:01_curso_atual:alunos:trabalho_final:wataru.sumi:2.dat.txt|2}} {{:bie5782:01_curso_atual:alunos:trabalho_final:wataru.sumi:3.dat.txt|3}} {{:bie5782:01_curso_atual:alunos:trabalho_final:wataru.sumi:4.dat.txt|4}} {{:bie5782:01_curso_atual:alunos:trabalho_final:wataru.sumi:5.dat.txt|5}} {{:bie5782:01_curso_atual:alunos:trabalho_final:wataru.sumi:6.dat.txt|6}} {{:bie5782:01_curso_atual:alunos:trabalho_final:wataru.sumi:7.dat.txt|7}} {{:bie5782:01_curso_atual:alunos:trabalho_final:wataru.sumi:8.dat.txt|8}} {{:bie5782:01_curso_atual:alunos:trabalho_final:wataru.sumi:9.dat.txt|9}} ===== Código Trabalho Final ===== analise.geral=function(comprimento, sessao){ saidafinal=matrix(NA,nrow = length(dir(pattern=".DAT")), ncol = 6, byrow = T)# cria matriz linhas=numero de arquivos compfinal=matrix(NA,nrow = length(dir(pattern=".DAT")), ncol = 6, byrow = T) # idem for(i in 1:length(dir(pattern=".DAT"))){ ## cada uma das iterações lê um dos arquivos tabela=read.table(dir(pattern=".DAT")[i], sep="\t", dec=".") #"tabela" recebe dados do arquivo lido tabela$V12=as.numeric(paste(tabela$V2,tabela$V4, sep="")) #insere no data.frame combinação de V2(estimulo 1) e V4(estimulo 2) tabela$V13=rep(seq(from=1,to=(length(tabela$V1)/comprimento)), each=comprimento) # insere em cada linha da tabela a sessao ao qual ela pertence saida1=saida2=saida3=saida4=saida5=saida6=NA #cria vetores comp1=comp2=comp3=comp4=comp5=comp6=NA #idem for(j in 1 :(length(tabela$V1)/comprimento)){ ##de 1 a numero de sessoes, calcula as medianas das condicoes: saida1[j]=median(tabela$V10[tabela$V9==10&tabela$V8==100&(tabela$V12==321|tabela$V12==644)&tabela$V13==j]) #tempo de reação(V10)das ###tentativas corretas(V9=10)das tentativas validas(V12=321 ou 644) no SOA 100ms (V8=100) da corrente sessao(V13=j) saida2[j]=median(tabela$V10[tabela$V9==10&tabela$V8==100&(tabela$V12==324|tabela$V12==641)&tabela$V13==j])# invalida soa 100 saida3[j]=median(tabela$V10[tabela$V9==10&tabela$V8==400&(tabela$V12==321|tabela$V12==644)&tabela$V13==j])# valida soa 400 saida4[j]=median(tabela$V10[tabela$V9==10&tabela$V8==400&(tabela$V12==324|tabela$V12==641)&tabela$V13==j])#... saida5[j]=median(tabela$V10[tabela$V9==10&tabela$V8==600&(tabela$V12==321|tabela$V12==644)&tabela$V13==j]) saida6[j]=median(tabela$V10[tabela$V9==10&tabela$V8==600&(tabela$V12==324|tabela$V12==641)&tabela$V13==j]) } if(sessao>0){ ##calcula uma sessao isoladamente saidafinal[i,1]=saida1[sessao] saidafinal[i,2]=saida2[sessao] saidafinal[i,3]=saida3[sessao] saidafinal[i,4]=saida4[sessao] saidafinal[i,5]=saida5[sessao] saidafinal[i,6]=saida6[sessao] } else{ ##calcula com base na media das sessoes saidafinal[i,1]=mean(na.omit(saida1)) saidafinal[i,2]=mean(na.omit(saida2)) saidafinal[i,3]=mean(na.omit(saida3)) saidafinal[i,4]=mean(na.omit(saida4)) saidafinal[i,5]=mean(na.omit(saida5)) saidafinal[i,6]=mean(na.omit(saida6)) } for(l in 1 :(length(tabela$V1)/comprimento)){ ##calcula o numeros de acertos em cada condicao comp1[l]=length(tabela$V10[tabela$V9==10&tabela$V8==100&(tabela$V12==321|tabela$V12==644)&tabela$V13==l]) comp2[l]=length(tabela$V10[tabela$V9==10&tabela$V8==100&(tabela$V12==324|tabela$V12==641)&tabela$V13==l]) comp3[l]=length(tabela$V10[tabela$V9==10&tabela$V8==400&(tabela$V12==321|tabela$V12==644)&tabela$V13==l]) comp4[l]=length(tabela$V10[tabela$V9==10&tabela$V8==400&(tabela$V12==324|tabela$V12==641)&tabela$V13==l]) comp5[l]=length(tabela$V10[tabela$V9==10&tabela$V8==600&(tabela$V12==321|tabela$V12==644)&tabela$V13==l]) comp6[l]=length(tabela$V10[tabela$V9==10&tabela$V8==600&(tabela$V12==324|tabela$V12==641)&tabela$V13==l]) } if(sessao>0){ ##calcula uma sessao isoladamente compfinal[i,1]=comp1[sessao]/length(tabela$V10[tabela$V8==100&(tabela$V12==321|tabela$V12==644)&tabela$V13==l]) compfinal[i,2]=comp2[sessao]/length(tabela$V10[tabela$V8==100&(tabela$V12==324|tabela$V12==641)&tabela$V13==l]) compfinal[i,3]=comp3[sessao]/length(tabela$V10[tabela$V8==400&(tabela$V12==321|tabela$V12==644)&tabela$V13==l]) compfinal[i,4]=comp4[sessao]/length(tabela$V10[tabela$V8==400&(tabela$V12==324|tabela$V12==641)&tabela$V13==l]) compfinal[i,5]=comp5[sessao]/length(tabela$V10[tabela$V8==600&(tabela$V12==321|tabela$V12==644)&tabela$V13==l]) compfinal[i,6]=comp6[sessao]/length(tabela$V10[tabela$V8==600&(tabela$V12==324|tabela$V12==641)&tabela$V13==l]) } else{ ##calcula com base na media das sessoes compfinal[i,1]=mean(na.omit(comp1))/length(tabela$V10[tabela$V8==100&(tabela$V12==321|tabela$V12==644)&tabela$V13==l]) compfinal[i,2]=mean(na.omit(comp2))/length(tabela$V10[tabela$V8==100&(tabela$V12==324|tabela$V12==641)&tabela$V13==l]) compfinal[i,3]=mean(na.omit(comp3))/length(tabela$V10[tabela$V8==400&(tabela$V12==321|tabela$V12==644)&tabela$V13==l]) compfinal[i,4]=mean(na.omit(comp4))/length(tabela$V10[tabela$V8==400&(tabela$V12==324|tabela$V12==641)&tabela$V13==l]) compfinal[i,5]=mean(na.omit(comp5))/length(tabela$V10[tabela$V8==600&(tabela$V12==321|tabela$V12==644)&tabela$V13==l]) compfinal[i,6]=mean(na.omit(comp6))/length(tabela$V10[tabela$V8==600&(tabela$V12==324|tabela$V12==641)&tabela$V13==l]) } } cont1=col=1 #contadores v=i=vp=ip=soa=NA #cria vetores for(t in 1:3){ #3 = numero de SOAs(100, 400, 600) for(u in 1:length(dir(pattern=".DAT"))){ # para cada uma das linhas das matrizes "saidafinal" e "compfinal" if(compfinal[u,col+1]!="NaN"){ # copia apenas quando ha tentativas invalidas pareando com uma tentativa valida v[cont1]=saidafinal[u,col] ## grava em vetores separados o tempo de reacao (val e inv) e a porcentagem de acertos e o SOA i[cont1]=saidafinal[u,col+1] vp[cont1]=compfinal[u,col] ip[cont1]=compfinal[u,col+1] soa[cont1]=col cont1=cont1+1 ## soma 1 ao contador que determina a posicao de gravacao dos dados nos vetores } } col=col+2 ## soma 2 ao contador para testar apenas as colunas da matriz com tentativas invalidas } resumo=data.frame(c(v,i),c(vp,ip),c(rep("val", length(v)), rep("inv", length(i))),c(soa,soa)) ## constroi um unico data frame contendo o TR e porcentagem de acertos indexados por validade e pelo SOA names(resumo)= c("TR","Porcent", "Validade", "SOA") ### parte grafica library(graphics) par(mfrow=c(1,2)) #constroi grafico para o tempo de reacao interaction.plot(resumo$SOA,resumo$Validade,resumo$TR,fun=mean,ylab="Média Tempo de Reação", xlab="SOA", trace.label="Validade", ylim=c(250,500)) # o calculo das medias e dos desvios considera a existencia de ate tres soas media=c(mean(resumo$TR[resumo$SOA=="1"&resumo$Validade=="val"]),mean(resumo$TR[resumo$SOA=="1"&resumo$Validade=="inv"]), mean(resumo$TR[resumo$SOA=="3"&resumo$Validade=="val"]),mean(resumo$TR[resumo$SOA=="3"&resumo$Validade=="inv"]), mean(resumo$TR[resumo$SOA=="5"&resumo$Validade=="val"]),mean(resumo$TR[resumo$SOA=="5"&resumo$Validade=="inv"])) mediaf=na.omit(media) # remove "NaN caso os dados analisados contenham apenas 2 ou 1 soa desv=c(sd(resumo$TR[resumo$SOA=="1"&resumo$Validade=="val"]),sd(resumo$TR[resumo$SOA=="1"&resumo$Validade=="inv"]), sd(resumo$TR[resumo$SOA=="3"&resumo$Validade=="val"]),sd(resumo$TR[resumo$SOA=="3"&resumo$Validade=="inv"]), sd(resumo$TR[resumo$SOA=="5"&resumo$Validade=="val"]),sd(resumo$TR[resumo$SOA=="5"&resumo$Validade=="inv"])) desvf=na.omit(desv) # remove "NaN caso os dados analisados contenham apenas 2 ou 1 soa arrows(rep(1:((length(mediaf))/2), each=2),mediaf[1:length(mediaf)]+desvf[1:length(desvf)], #desenha as barras de desvio no grafico rep(1:((length(mediaf))/2), each=2),mediaf[1:length(mediaf)]-desvf[1:length(desvf)],code=3,angle=90) #constroi grafico para porcentagem de acertos...idem ao anterior interaction.plot(resumo$SOA,resumo$Validade,resumo$Porcent,fun=mean,ylab="Média porcentagem de acertos", xlab="SOA", trace.label="Validade",ylim=c(0.2,0.5)) mediap=c(mean(resumo$Porcent[resumo$SOA=="1"&resumo$Validade=="val"]),mean(resumo$Porcent[resumo$SOA=="1"&resumo$Validade=="inv"]), mean(resumo$Porcent[resumo$SOA=="3"&resumo$Validade=="val"]),mean(resumo$Porcent[resumo$SOA=="3"&resumo$Validade=="inv"]), mean(resumo$Porcent[resumo$SOA=="5"&resumo$Validade=="val"]),mean(resumo$Porcent[resumo$SOA=="5"&resumo$Validade=="inv"])) mediafp=na.omit(mediap) desvp=c(sd(resumo$Porcent[resumo$SOA=="1"&resumo$Validade=="val"]),sd(resumo$Porcent[resumo$SOA=="1"&resumo$Validade=="inv"]), sd(resumo$Porcent[resumo$SOA=="3"&resumo$Validade=="val"]),sd(resumo$Porcent[resumo$SOA=="3"&resumo$Validade=="inv"]), sd(resumo$Porcent[resumo$SOA=="5"&resumo$Validade=="val"]),sd(resumo$Porcent[resumo$SOA=="5"&resumo$Validade=="inv"])) desvfp=na.omit(desvp) arrows(rep(1:((length(mediafp))/2), each=2),mediafp[1:length(mediafp)]+desvfp[1:length(desvfp)], rep(1:((length(mediafp))/2), each=2),mediafp[1:length(mediafp)]-desvfp[1:length(desvfp)],code=3,angle=90) par(mfrow=c(1,1)) Anova.TR=summary(aov(resumo$TR~resumo$Validade*resumo$SOA)) #teste anova para tempo de reacao Anova.Pc=summary(aov(resumo$Porcent~resumo$Validade*resumo$SOA)) #teste anova para porcentagem de acertos return(resumo, Anova.TR, Anova.Pc) #retorna tabela com as medianas do tempo de reacao nas tentativas com pista valida e invalida, #a porcentagem de acertos para tentativas validadas e invalidas, um indexador para a validade e outro para o soa } ====== Help ====== analise.geral package:unknown R Documentation analise.geral(comprimento, sessao) Description: A funcao retorna a análise dos dados obtidos pelo programa 090327 produzido em nosso laboratorio para coleta de dados em uma tarefa para avaliar a atencao em ratos. Lê todos os arquivos gravados em uma pasta e retorna uma tabela resumida, representação gráfica e os resultados de testes estatisticos. Usage: funcao(comprimento, sessao) Arguments: comprimento inteiro representado numeros total de tentativas por sessao sessao a sessao de interesse para a análise (e.g. 1[1ª sessao], 2[2ª sessao], etc.) sessao=0 retorna a media das sessões Details: Não há argumento para carregar arquivo de dados. Isso é feito automaticamente pelo programa que lê os arquivo com extensão ".DAT" ou como parte do nome contidos na mesma pasta onde está salvo a área de trabalho do R. Não deve haver uma linha de cabeçalho ou separações entres as sessões(se houver mais de uma sessão). o formato do arquivo deve ser: coluna 2 : estímulo 1 (pista) (32 ou 64) coluna 4 : estímulo 2 (alvo) (1 ou 4) coluna 8 : SOA (100, 400 ou 600) coluna 9 : Tipo de erro (1 a 10) coluna 10 : Tempo de reação(ms) As demais colunas não são utilizadas para fins de análise nesse programa. Value: A função retorna: 1: tabela com as medianas do tempo de reação e porcentagem de acertos indexadas por validade ("val" e "inv") e SOA. 2: sumário do teste análise de variancia do tempo de reação em funçaõ de validade e SOA 3: sumário do teste análise de variancia da porcentagem de acertos em função de validade e SOA Author(s): Wataru Sumi Examples: ##utilize setwd(endereço da pasta onde estão os arquivos a serem analisados) ##para os dados utilizados como exemplo: analise.geral(comprimento=480, sessao=0)