{{:bie5782:01_curso_atual:alunos:trabalho_final:pamela.san:75950_573735455976273_1643884411_n.jpg?200}} ====== Pamela C. Santana ====== Mestranda em Ecologia: Ecossistemas terrestres e aquáticos, pelo departamento de Ecologia no Instituto de Biociências da Universidade de São Paulo. Meu projeto está com o título inicial de "Adaptação local de Rhipsalis crispata e R. oblonga: transplantes recíprocos em um gradiente altitudinal" e será desenvolvido sob a orientação da Prof. Dr. Silvana Buzato. Nele testaremos a viabilidade populacional das espécies, buscando as possíveis evidências da adaptação para habitats distintos em áreas de diferentes altitudes, e ainda, investigaremos as barreiras de isolamento reprodutivo pré e pós - zigóticos entre as espécies. ====== Propostas para o trabalho final ====== ===== Proposta A ===== Sabe-se que o fluxo gênico possui papel fundamental no processo de especiação e um dos quesitos necessários para que um determinado conjunto de indivíduos seja considerado de outra espécie é a ausência de fluxo gênico. Os polinizadores são considerados essenciais para que ocorra o fluxo gênico entre plantas, mas também podem atuar como barreira ao fluxo, já que ao visitarem somente um conjunto de plantas que possuem características específicas, deixam de transferir pólen à outros indivíduos, selecionando em quais será possível a troca gênica. Diversas espécies possuem alguma sobreposição em sua área de distribuição com espécies irmãs, de maneira que caso o polinizador visite flores de ambas as espécies, poderá ocorrer uma troca de genes entre elas. No entanto, ainda dentro de uma mesma espécie, populações podem ficar isoladas caso a distância que seu polinizador percorra não seja suficiente para realizar a troca entre as populações. Neste contexto, proponho estruturar uma função que calcule a probabilidade de que ocorra fluxo gênico entre duas populações,ou entre duas espécies aparentadas de plantas que tenham sua distância conhecida. Tal função seria estruturada nos conhecimentos de distância de isolamento entre as populações e em qual é considerado o polinizador principal da espécie, além do número de indivíduos presentes, em média, em cada população, não só de planta, mas também do polinizador e a distribuição das populações(agregada; uniforme; aleatória). Com o auxílio da literatura, padrões que determinam a distância que cada tipo de polinizador é capaz de percorrer, e o tempo que este demora, serão estipulados à função. O output será uma probabilidade da troca de genes entre as populações. Para chegar a essa probabilidade pensei em realizar simulações que permitam verificar a possibilidade de interação planta x polinizador. ===== Proposta B ===== Alunos que vivem de bolsa em uma cidade como São Paulo precisam planejar cada centavo de seu orçamento, para que não tenham que comer apenas miojo no fim do mês. Na Universidade existem estruturas importantes à permanência dos alunos, como o Restaurante Universitário, conhecido como bandejão. Na Universidade de São Paulo, é possível tomar o café da manhã por 0,60 centavos e almoçar e jantar por 1,90 cada refeição. Diante desta situação, uma função, que automatize os cálculos necessários para saber quanto de dinheiro é preciso para se alimentar por determinada quantidade de dias, poderia ser muito útil. Desda forma, proponho criar uma função que trabalharia com diferentes argumentos, como comportamento do estudante (somente almoça no bandejão; almoça e janta no bandejão; somente janta no bandejão; faz as três refeições no bandejão, ou; somente toma o café da manhã no bandejão), frequência semanal que o aluno come no bandejão e o dinheiro que resta após pagar as contas mensais. Pensei em fazer uma análise combinatória que relacione o comportamento e a frequência do aluno e que me retorne em uma matriz, na qual será comparado o valor que o estudante dispõe para refeições e a grana que ele gastará para se alimentar no bandejão, e desta comparação, quem estiver usando a função, receberá um valor referente a quantidade de dinheiro que lhe restará, após discriminar o gasto do bandejão. Se o valor for negativo: Atenção! Precisa economizar, pois o dinheiro não será suficiente! Se o valor for positivo: Eba! Hoje podemos comer pizza! Ainda, um dos argumentos que proponho para esta função é o valor de cada refeição, de maneira que estudantes de outras universidades poderão se utilizar dela também. Portanto, a ideia desta função é que o aluno possa, no meio do mês, calcular, com a quantia que tiver de dinheiro, se ele pode extrapolar, e dar uma saidinha, comer em um restaurante no fim de semana ou, se ele terá que economizar pois senão faltará dinheiro. ===== Comentário ===== Oi Pamela, seu plano A parece bastante interessante, ainda mais se você incorporar as simulações. Apesar de seu plano B ser também bastante útil, ele seria bem fácil de ser implementado. Sugiro continuar com o plano A. =) Marília ===== Resposta ===== Oi Marília! Estava esquecendo de te responder! m( Estou trabalhando no plano A, de acordo com a sua sugestão! :-D Pamela ====== Trabalho Final (Proposta A) ====== Alguns detalhes foram mudados da ideia proposta inicialmente. Primeiramente, ao invés de entrar com uma distância média entre duas populações como input, preferi entrar com uma matriz de distância pois percebi que poderia oferecer informações mais precisas e mais completas, além de ampliar o uso da função, uma vez que, caso o input fosse a distância entre duas populações, necessariamente elas teriam que estar separadas e, com uma matriz de distâncias não. Ainda, não coloquei valores de distância média percorrida por polinizadores como default, pois, novamente, a função se torna mais flexível, já que o próprio usuário da função pode colocar este valor, de acordo com a interação que observa. Ainda, como output, adicionei a matriz de probabilidades individuais, pois ela trás informações mais precisas e detalhadas. ===== Código da Função ===== #######Funcao Poliflu####### poliflu<-function(x,y,dy,n,disty,nsim=100) {#conferindo os dados e premissas if(missing(x)|missing(y)|missing(dy)|missing(n)) { stop("\t", "Existem argumentos faltantes.","\n","Consulte o help para saber os argumentos necessarios.") } if(any(is.na(x)==TRUE)) { n.NA=sum(is.na(x)==TRUE) stop("\t","Existe(m) ",n.NA, " valor(es) NA(s) em sua matriz.\n") } if(class(x)!="matrix") { stop("\t","O primeiro argumento deve ser uma matrix.\n") } if (class(y)!="numeric") { stop("\t","O segundo argumento deve ser da classe 'numeric'.\n") } if (class(dy)!="numeric") { stop("\t","O terceiro argumento deve ser da classe 'numeric'.\n") } if (class(n)!="numeric") { stop("\t","O terceiro argumento deve ser da classe 'numeric'.\n") } if (length(y)!=1) { stop("\t", "O segundo argumento deve ser um unico valor.") } if (length(dy)!=1) { stop("\t", "O terceiro argumento deve ser um unico valor.") } if (length(n)!=1) { stop("\t", "O quarto argumento deve ser um unico valor.") } #####Simulando para comparar##### simula<-rep(NA,nsim) #Argumento disty faltando if(disty=="disty") { sim<-y simula<-(1/(nrow(x)-1)) } #Distribuicao aleatoria if (disty=="aleatoria") { sim<-matrix((rpois(length(x),3)),nrow(x),ncol(x)) #Criando ciclo de eventos for(i in 1:nsim) { simula[i]<-mean(ppois(sample(sim,replace=T),3)) } } #Distribuicao uniforme if (disty=="uniforme") { sim<-matrix(runif(length(x),(y-dy),(y+dy)),nrow(x),ncol(x)) for(i in 1:nsim) { simula[i]<-mean(punif((sample(sim,replace=T)), min(sim), max(sim))) } } #Distribuicao agregada if (disty=="agregada") { sim<-matrix((c(runif((length(x)/2),((y-dy)/2),((y+dy)/2)),runif((length(x)/2),(y-dy)*2,(y+dy)*2))),nrow(x),ncol(x)) for(i in 1:nsim) { simula[i]<-mean(punif((sample(sim,replace=T)), min(sim), max(sim))) } } dist.rel<-y/x#Relativizando as distancias entre os individuos a capacidade do polinizador dist.rel[dist.rel==Inf]<-0 # Restirando os Infs. prob.dist.ind<-dist.rel/(sum(dist.rel))#Encontrando as probs. em relacao a distancia do individuo prob.dd<-round(prob.dist.ind*(mean(simula)),3)#Adicionando a prob. do polinizador ir ate aquela planta, independente da dist. pop1<-sum(factorial(as.vector(prob.dd[1:n,1:n])))#Prob. do fluxo genico ficar somente na pop. 1. pop2<-sum(factorial(as.vector(prob.dist.ind[n+1:(nrow(x)-n),n+1:(ncol(x)-n)])))#Prob. do fluxo genico ficar somente na pop. 2. popt<-sum(factorial(as.vector(prob.dist.ind)))#Todas as combinacoes de fluxo genico probt<-round(1-(pop1/popt)-(pop2/popt),3)#Prob. de fluxo entre as pop. cat("\t","Atencao: as unidades de medida dos argumentos x e y devem ser as mesmas!\n") #lembrete resulta<-(list("\n\tMatriz de probabilidades individuais de ocorrencia do fluxo genico\n"=prob.dd,"\tProbabilidade de ocorrer fluxo genico entre as duas populacoes, com relacao a distancia\n"=probt)) return(resulta) } ===== Página de Ajuda ===== poliflu pacote:interacoes R Documentacao Probabilidade de fluxo genico entre duas populacoes de plantas, mediado pelos polinizadores Descricao: Esta funcao calcula a probabilidade de ocorrencia de fluxo genico entre duas populacoes, da mesma especie, ou de especies irmas (que, portanto, sao capazes de trocar genes), baseando-se na distancia entre os individuos, na distancia media que os polinizadores sao capazes de percorrer, e em seu desvio padrao, no padrao de distribuicao dos polinizadores e no tamanho das populacoes de plantas. Uso: poliflu<-function(x,y,dy,n, disty="disty", nsim=100) Argumentos: x matriz contendo a distancia entre os individuos em que se quer saber a probabilidade de ocorre fluxo genico y distancia media percorrida pelo polinizador dy desvio padrao da distancia media percorrida pelo polinizador n quantidade de individuos na primeira populacao disty padrao de distribuicao da populacao do polinizador. Pode ser agregado, aleatorio ou uniforme. nsim=100 numero de simulacoes que serao realizadas. Default sao 100 simulacoes. Detalhes: Probabilidade e a chance de determinada situacao ou evento ocorrer, dentre outras possibilidades. Esta funcao utiliza de alguns dados que sao conhecidos de populacoes de plantas e de polinizadores para estimar uma probabilidade. Sao realizadas simulacoes, a partir da distancia media percorrida pelo polinizador e, a partir destas, obtem-se a distribuicao de probabilidades, a qual e utilizada para retirar uma media e obter a probabilidade de um polinizador visitar uma flor qualquer naquela populacao. A partir da matriz de distancias entre os individuos e da distancia percorrida pelo polinizador, as distancias sao relativizadas e transformadas em probabilidades. Como resultado, obtem-se as probabilidades individuais e tambem uma probabilidade geral da ocorrencia de fluxo genico. Valores: Retorna uma lista contendo: comp1 : Matriz de probabilidades individuais de fluxo genico comp2 : Um valor que representa a probabilidade de ocorrencia de fluxo genico entre as duas populacoes. Advertências: A funcao nao esta preparada para lidar com matrizes que contenham individuos de mais de duas populacoes. Caso nao seja estipulado padrao de distribuicao do polinizador, a funcao rodara como se nao houvesse padrao. Ainda, caso nao seja estipulado a quantidade de simulacoes a serem feitas, a funcao sera rodada com o valor default. E importante estar atento a algumas premissas para que, de fato, os resultados possam ser representativos frente a realidade, como verificar se ha a possibilidade de troca de genes entre as populacoes, fazendo testes, por exemplo, de viabilidade polinica e se as especies ou populacoes compartilham o polinizador. Alem disso, ao entrar com os dados na funcao, nao se esqueca de verificar se eles estao na mesma unidade de medida. A probabilidade calculada por esta funcao representa o papel da distancia no fluxo genico, porem quando se busca avaliar de forma geral, deve-se procurar formas de inserir outras variaveis que tambem atuam no meio ambiente, interferindo na probabilidade. Autora: Pamela Cristina Santana Mestranda em Ecologia - IBUSP pcsantana@ib.usp.br References: http://www.khanacademy.org/math/probability See Also: runif,punif para saber mais sobre distruicao uniforme rpois,ppois para distribuicao de poison Examples: Qual a probabilidade de ocorrer fluxo genico entre estas populacoes? Exemplo 1 x<-matrix(data=c(0,2,3,6,4,2,2,0,2,5,7,4,3,2,0,4,7,2,6,5,4,0,3,2,4,7,7,3,0,2,2,4,2,2,2,0), nrow=6, ncol=6) y<-5 n<-3 dy<-1.2 disty<-"uniforme" nsim<-100 rownames(x)<-c(paste("P1-", 1:n, sep=""),(paste("P2-", n+1:(nrow(x)-n), sep=""))) colnames(x)<-c(paste("P1-", 1:n, sep=""),(paste("P2-", n+1:(nrow(x)-n), sep=""))) poliflu(x,y,dy,n,disty) Exemplo 2 genes<-matrix(ncol=16,nrow=16) valores<-rnorm(120) genes[lower.tri(genes)]=valores diag(genes)=0 tgenes<-t(genes) genes[upper.tri(genes)]<-tgenes[upper.tri(t(genes))] poliflu(genes, 2, 0.3, 8,"aleatoria",nsim=1000) Exemplo 3 amostra<-matrix(ncol=20,nrow=20) amostra[lower.tri(amostra)]=(sample(4:12,190,replace=T)) diag(amostra)=0 tamostra<-t(amostra) amostra[upper.tri(amostra)]<-tamostra[upper.tri(t(amostra))] poliflu(amostra, 10, 1, 10, "uniforme") {{:bie5782:01_curso_atual:alunos:trabalho_final:pamela.san:funcao_poliflu.r|Função Poliflu}} {{:bie5782:01_curso_atual:alunos:trabalho_final:pamela.san:help.funcaopoliflu.r|HELP}} ==== Exercícios ==== {{:bie5782:01_curso_atual:alunos:trabalho_final:pamela.san:exercício_1.r|}} {{:bie5782:01_curso_atual:alunos:trabalho_final:pamela.san:ex.4.r|}} {{:bie5782:01_curso_atual:alunos:trabalho_final:pamela.san:ex.5.r|}} {{:bie5782:01_curso_atual:alunos:trabalho_final:pamela.san:exs.6.r|}} {{:bie5782:01_curso_atual:alunos:trabalho_final:pamela.san:ex.7.2.r|}} {{:bie5782:01_curso_atual:alunos:trabalho_final:pamela.san:ex.8.2.r|}}