Ferramentas do usuário

Ferramentas do site


05_curso_antigo:r2013:alunos:trabalho_final:pamela.san:start

75950_573735455976273_1643884411_n.jpg

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")

Função Poliflu

HELP

Exercícios

05_curso_antigo/r2013/alunos/trabalho_final/pamela.san/start.txt · Última modificação: 2020/08/12 06:04 (edição externa)