{{: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|}}