assoc = function (file, INDEX) # Cria a fun????o { #### INDICES DE ASSOCIACAO OBSERVADOS file = na.omit(file) #Retira quaisquer NAs dos dados file2 = file[,1] #Transforma a primeira coluna do dataframe em um objeto separado file = file[,-1] #Retira a primeira columa do dataframe, deixando apenas as observa??es de presen?a e ausencia dos individuos indices=matrix(NA, ncol=ncol(file), nrow=ncol(file)) # Criar uma matriz para guardar os indices de associacao observados for(a in 1:(ncol(file)-1))# Repeticoes para cada par de individuos { for(b in (a+1):ncol(file))# Repeticoes para cada par de individuos { x = length(file[,a][file[,a]==1 & file[,b]==1]) #numero de vezes a e b estavam no mesmo grupo x indjuntos = aggregate(file, list(c(file2)), sum) # Juntando as observacoes de cada repeti??o para averiguar depois os indiv?duos observados na mesma repeticao yab = (length(indjuntos[,a][indjuntos[,a]>=1 | indjuntos[,b]>=1])) - x #numero de vezes que os dois indiv?duos foram observados, por?m em grupos diferentes yab ya = length(file[,a][file[,a]==1 & file[,b]==0]) #numero de vezes em que o individuo a foi observado em um grupo, mas nao b ya yb = length(file[,a][file[,b]==1 & file[,a]==0])#numero de vezes em que o individuo b foi observado em um grupo, mas nao a yb if (INDEX == "sri") #escolha do usuario { index = x/(x + yab + ya + yb) #simple ratio index } if (INDEX == "hwi") #escolha do usuario { index = x/(x + yab + 1/2*(ya + yb)) #half weight index } if (INDEX == "twi") #escolha do usuario { index = x/(x + (2*yab) + ya + yb) #twice weight index } if(INDEX!="sri"&INDEX!="hwi"& INDEX!="twi") #Parar a funcao se o usuario nao escolheu um indice { stop("Nenhum indice de associacao escolhido") # Aviso de erro } indices[a,b] = index #Salvar os resultados em uma matriz } } indices ##### HISTOGRAMA DE FREQUENCIAS OBSERVADAS hist(indices, main="Histograma dos Indices de Associacao \n Observados", xlab="Valor do Indice de Associacao",ylab="Frequencia", col = "purple") #Cria histograma dos valores do indice de associacao observados ##### TESTE DE SIGNIFIC?NCIA - PERMUTACAO pmontecarlo=matrix(NA, ncol=ncol(file), nrow=ncol(file)) # Criar uma matriz para guardar os resultados de p depois do teste de significancia for(i in 1:(ncol(file)-1)) # Repeticoes para cada par de individuos { for(j in (i+1):ncol(file)) # Repeticoes para cada par de individuos { simulaab = rep(NA, 1000) #Vetor para guardar os valores de cada simula??o. simulaab[1] = indices[i,j] #Valor observado na primeira posicao do vetor da simulacao for (v in 2:1000) #Ciclo com contador (v) que vai de 2 a 1000 para as simulacoes { filemc = apply(file, 1, sample) # Aqui os dados sao embaralhados, mantendo o mesmo numero de individuos em cada grupo filemc = data.frame(t(filemc)) #Transpor o resultado do apply com o sample que inverte a posicao de linhas e coluna dos dados indicesmc=matrix(NA, ncol=ncol(file), nrow=ncol(file)) # Matriz para guardar os indices gerados aleatoriamente for(c in 1:(ncol(file)-1)) # Repeticoes para cada par de indiv?duos { for(d in (c+1):ncol(file)) # Repeticoes para cada par de indiv?duos { x = length(filemc[,c][filemc[,c]==1 & filemc[,d]==1]) #numero de vezes a e b estavam no mesmo grupo x indjuntos = aggregate(filemc, list(c(file2)), sum) # Juntando as observacoes de cada repeticao para averiguar depois os individuos observados na mesma repeticao yab = (length(indjuntos[,c][indjuntos[,c]>=1 | indjuntos[,d]>=1])) - x #numero de vezes que os dois individuos foram observados, porem em grupos diferentes yab ya = length(filemc[,c][filemc[,c]==1 & filemc[,d]==0]) #numero de vezes em que o individuo a foi observado em um grupo, mas nao b ya yb = length(filemc[,c][filemc[,c]==1 & filemc[,d]==0])#numero de vezes em que o indiv?duo b foi observado em um grupo, mas n?o a yb if (INDEX == "sri") #escolha do usuario { indexmc = x/(x + yab + ya + yb) #simple ratio index } if (INDEX == "hwi")#escolha do usuario { indexmc = x/(x + yab + 1/2*(ya + yb)) #half weight index } if (INDEX == "twi")#escolha do usuario { indexmc = x/(x + (2*yab) + ya + yb) #twice weight index } indicesmc[c,d] = indexmc #Salvar os resultados em uma matriz } } simulaab[v] = indicesmc[i,j] #Salvar os resultados em um vetor } obsXesp=sum(simulaab>=simulaab[1]) #Separar os indices formados aleatoriamente que est?o acima do valor observado p=obsXesp/length(simulaab) #Qual a proporcaoo de valores aleatorios sao maiores do que o valor observado pmontecarlo [i,j] = p # Guardar esse valor em uma matriz } } listaassoc = list(c(indices,pmontecarlo)) # Criando lista com o objeto indices e o objeto pmontecarlo return(listaassoc) # O que a fun????o vai retornar para o usuario }# Fechar a funcao