Traduções desta página:

Ferramentas do usuário

Ferramentas do site


05_curso_antigo:r2016:alunos:trabalho_final:pedrodias888:start

Pedro Dias

img-20160406-wa0003.jpg

Graduando de bacharelado em Ciências Biológicas pela Universidade Federal de São Carlos, campus Sorocaba. Tem experiência na área de Ecologia, com ênfase em Microbiologia Ambiental e Ictiologia e na área de Zoologia, com ênfase em Taxonomia de Grupos Recentes. Atualmente, desenvolve um projeto sobre a dinâmica da comunidade de peixes da zona de arrebentação na ilha do Prumirim em Ubatuba, SP.

pedrodias888@icloud.com


exec


Proposta final com as alterações sugeridas pela Dra. Sara Mortara

Função Cohort Life Table Calculations

colife.calc(x,y,colifeout=c(“all”,“null”,“mortality”,“survivor”))

O objetivo da função é produzir uma tabela de vida de coorte (dataframe) para uma espécie anual. Dessa forma, o usuário colocaria no argumento x da função um vetor com o número de sobreviventes (ax) referentes as classes de idade (x-x’) da espécie analisada em seu projeto e, no argumento y, outro vetor com o número total de descendentes produzidos durante cada período (Fx). A partir do número de sobreviventes, será calculado a) a proporção da coorte original sobrevivente no dia x (lx), b) a proporção da coorte original morta durante o intervalo (dx), c) a taxa de mortalidade por dia (qx), d) o log na base 10 de lx e e) a força diária de morte (kx). A partir do número de descendentes produzidos durante cada período (Fx), será calculado g) o número médio de sementes produzidas por cada indivíduo sobrevivente (mx) e h)lxmx. Esses vetores calculados serão organizados em um dataframe como o representado pela imagem a seguir e, através do comando return ( ), será retornado o dataframe e a taxa reprodutiva líquida (Ro) através da equação

Ro=∑lxmx.

Por fim, serão elaborados dois gráficos plot( ): i) a taxa de mortalidade diária específica por idade (qx) e a intensidade de mortalidade (kx) serão representadas por duas retas segundo a classe de idade (eixo x) e ii) a curva de sobrevivência: variação loglx (eixo y) em relação a classe de idade (eixo x). O usuário da função, através do argumento colifeout, poderá escolher como output todos os gráficos (“all”), nenhum (“null”), apenas o gráfico i (“mortality”) ou apenas o gráfico ii (“survivor”), sendo que ele poderá escrever o argumento por extenso ou apenas a primeira letra.


Proposta A

Função Cohort Life Table Calculations

colife.calc(x,y)

O objetivo da função é produzir uma tabela de vida de coorte (dataframe) para uma espécie anual. Dessa forma, o usuário colocaria no argumento x da função um vetor com o número de sobreviventes (ax) referentes as classes de idade (x-x’) da espécie analisada em seu projeto e, no argumento y, outro vetor com o número total de descendentes produzidos durante cada período (Fx). A partir do número de sobreviventes, será calculado a) a proporção da coorte original sobrevivente no dia x (lx), b) a proporção da coorte original morta durante o intervalo (dx), c) a taxa de mortalidade por dia (qx), d) o log na base 10 de lx e e) a força diária de morte (kx). A partir do número de descendentes produzidos durante cada período (Fx), será calculado g) o número médio de sementes produzidas por cada indivíduo sobrevivente (mx) e h)lxmx. Esses vetores calculados serão organizados em um dataframe como o representado pela imagem a seguir e, através do comando return ( ), será retornado o dataframe e a taxa reprodutiva líquida (Ro) através da equação

Ro=∑lxmx.

Por fim, serão elaborados dois gráficos plot( ): i) a taxa de mortalidade diária específica por idade (qx) e a intensidade de mortalidade (kx) serão representadas por duas retas segundo a classe de idade (eixo x) e ii) a curva de sobrevivência: variação loglx (eixo y) em relação a classe de idade (eixo x).

wp_20160421_19_18_15_pro.jpg

Olá Pedro, está legal a proposta porém ainda é bastante simples. Apenas uma série de contas a serem feitas. Sugiro que você coloque um argumento para que o usuário decida se quer ou não plotar os gráficos, podendo ser plotar todos, nenhum, apenas o 1 ou apenas o 2. Isto já adiciona algum nível de dificuldade. Se conseguir pensar em algum outro incremento, mande bala!

Sara Mortara


Proposta B

Função Rain Water Collector (RWC)

RWC(zone=“Sul”, roof.area=100, people=1)

A captação da água da chuva e seu armazenamento em cisternas pode ser útil não só em tempos de estiagem mas também pode contribuir na redução da conta de água tratada pelas companhias de saneamento.

A função conterá um banco de dados no formato dataframe com a precipitação mensal (mm) dos últimos 10 anos das zonas norte, sul, leste, oeste e central do estado de São Paulo. Os índices pluviométricos serão obtidos no site do DAEE e, para melhorar a acurácia e precisão dos dados, o índice pluviométrico mensal dos meses de janeiro a dezembro de cada zona será composto pelos dados provenientes dos seguintes postos (estação pluviométrica):

Zona norte

  * Santana
  * Jaçanã
  * Vila Maria
  * Freguesia do Ó
  * Perus
  * Piritiba

Zona sul

  * Santo Amaro
  * Capela do Socorro
  * Campo Limpo
  * Jabaquara

Zona leste

  * Mooca
  * Vila Prudente
  * Aricanduva
  * Penha
  * São Miguel Paulista
  * Itaquera
  * São Mateus
  * Guaianazes

Zona oeste

  * Pinheiros
  * Lapa
  * Butantã

Centro

  * Sé 
  * Vila Mariana
  * Ipiranga
  * Afonso Pena

Posteriormente, será obtida a média da precipitação mensal referente a zona determinada pelo usuário no argumento zone da função. Levando em consideração a variação da precipitação mensal dentro de cada zona, o primeiro produto será a) um gráfico plot ( ) das médias mensais com os respectivos intervalos de confiança a 95% dispostos em linhas a partir do ponto da média mensal. Será determinado o potencial de captação nos meses de janeiro a dezembro através da equação

Potencial de captação=área do telhado (m2 ) x índice pluviométrico mensal (mm) x runoff

originando o argumento roof.area, no qual o usuário deverá determinar a área do telhado (m2) no qual será feita a coleta de água. A determinação do volume da cisterna é de fundamental importância para que a captação seja máxima e também para que não seja desperdiçado dinheiro numa cisterna cujo volume máximo nunca é atingido. Dessa forma, através da determinação do argumento people, na qual o usuário informará a quantidade de pessoas residentes, será determinado o consumo mensal na residência, visto que, de acordo com os dados mundiais, o gasto médio de água tratada e encanada é em torno de 5,4 m3/pessoa/mês (Fundação PROCON SP). Com efeito, com o potencial de captação e o consumo mensais, poderá ser determinado, através da soma acumulativa da água excedente de cada mês, o volume da cisterna mais indicado para o caso. Por fim, será elaborado b) um gráfico barplot( ) com a captação e o consumo nos meses de janeiro a dezembro além de uma reta desta diferença acumulada num eixo secundário. Além disso, o comando return( ) irá retornar, o volume mais indicado da cisterna e quanto será economizado por ano em volume de água e monetariamente.

OBS: runoff é o coeficiente de escoamento superficial. Para telhados perfeitos sem fuga utiliza-se de 0,7 a 0,95. Para a função, será 0,8.

Olá novamente,

A idéia está bem explicada e você já fez um bom levantamento sobre o tema. Contudo, a função está muito simples. A implementação envolve bastante trabalho a priori, procurando os dados e as equações. Uma vez que isto esteja pronto, a função se resume apenas a uma série de contas. Gostaríamos de ver uma função mais complexa. Você pode incrementar sua idéia inicial ou propor algo inteiramente novo. Vale a pena dar uma olhada nas propostas dos anos interiores!

Fico no aguardo de um plano B.

Mauro Sugawara

Tudo bom Mauro,

Concordo com você. A função está bem simples mesmo. Essa proposta B era a que eu estava menos disposto a fazer, deve ser por isso que eu não me empenhei muito nela. Assim facilitaria sua decisão em prol da minha escolha.rs No entanto, creio que você não viu minha proposta A referente a criação de uma tabela de vida de coorte, pois a mesma encontra-se sem crítica.

Obrigado

Olá Pedro, de novo a proposta é apenas uma conta. Brincar com as saídas da função (tanto gráficas como sumário estatístico) pode ser um bom caminho para adicionar desafios. Outra coisa seria fazer o usuário dizer em que região está e a função buscar em algum repositório on line os dados necessários para o cálculo. Isto é sempre divertido! Sugiro que você siga com a proposta que mais toca o seu coração e trabalhar para incorporar algum desafio em termos de programação. — Sara Mortara


Trabalho Final


Help da função Cohort Life Table Calculations

OBS: A tabela, o R0 e os gráficos provenientes do exemplo referente a espécie Phlox drummondii (ver o item Examples no help da função) podem ser conferidos na tabela 4.1 (página 98) e figura 4.7 (página 100) do livro Ecologia: de indivíduos a ecossistemas (Begon et al., 2007).

colife.calc                package:nenhum                R Documentation

Cálculo dos componentes (lx, dx, qx, log10lx, kx, mx e lxmx) referentes a tabela de vida de coorte para espécies anuais, assim como  a taxa reprodutiva líquida (R0) da espécie.

Description:

A função colife.calc é uma função que calcula, através do número de sobreviventes de uma única coorte separados categoricamente pela diferença do intervalo de idade em dias (x-x'), a proporção da coorte original sobrevivente no período x (lx), a proporção da coorte original morta durante o intervalo (dx), a taxa de mortalidade por dia (qx), o log10(lx) e a força diária de morte (kx). Além disso, mediante o número total de descendentes produzidos durante cada intervalo (Fx) é também calculado o número médio de descendentes produzidos por cada indivíduo sobrevivente (mx) e lxmx. Por fim, é obtida a taxa reprodutiva líquida (R0).

Usage:

colife.calc(i,x,y,colifeout = "all")

Arguments:

i         vetor numérico da diferença do intervalo de idade (x-x') em dias
x         vetor numérico do número de sobreviventes no intervalo x (ax)      
y         vetor numérico do número total de descendentes produzidos durante cada intervalo (Fx)
colifeout gráfico de saída, sendo "all", "null", "mortality" ou "survivor" 

Details:

Existem dois tipos diferentes de gráficos de saída: i) a taxa de mortalidade diária específica por idade (qx) e intensidade de mortalidade (kx) e ii) a curva de sobrevivência (variação de log10lx em relação à idade); sendo que dentre as possibilidade de saída especificadas no argumento colifeout encontram-se I) os dois gráficos disponibilizados lado a lado ("all"), II) nenhum dos gráficos ("null"), III) apenas o gráfico i ("mortality") ou apenas o gráfico ii ("survivor").

Value:
 
Data frame da tabela de vida de coorte para a espécie analisada

Vetor da taxa reprodutiva líquida (R0)

Warning:

No argumento i deve ser informado a diferença em dias do intervalo de idade. Ex: o primeiro intervalo da espécie Phlox drummondii, ou seja, aquele que representa o nascimento de um grupo de indivíduos no mesmo intervalo de 0 a 63 dias, deve ser informado no vetor numérico como 63. O próximo intervalo de 63 a 124 dias, 61 e assim sucessivamente.

No argumento y, referente ao número total de descendentes produzidos durante cada intervalo (Fx), os intervalos cujos indivíduos não produziram prole devem ser registrados obviamente com NA, pois o resultado zero indicaria erroneamente que os indivíduos reprodutivamente ativos não geraram descendentes.
 
Note:

Embora a função seja destinada para as espécies anuais, ela pode ser usada para espécies iteróparas desde que tomados os devidos cuidados. Uma coorte deve ser reconhecida na população e acompanhada (muitas vezes por vários anos), mesmo que os organismos estejam misturados e coexistindo com as demais coortes, mais velhas ou mais jovens; oque torna o delineamento experimental complexo e muitas vezes inviável.

Author(s):

Pedro Dias Barreto Neto

References:

BEGON, M.; TOWNSEND, C.R.; HARPER, J.L. Ecologia: de indivíduos a ecossistemas - 4.ed.- Porto Alegre: Artmed, 2007. 752 p.

LEVERICH, W.J. & LEVIN, D.A. (1979) Age-specific survivorship and reproduction in Phlox drummondii. American Naturalist, 113, 881-903p.

Examples:

#Dados referentes a espécie //Phlox drummondii//(Leverich e Levin, 1979)
i=c(63,61,60,31,49,14,14,14,14,14,14,14,0)#intervalo
x=c(996,668,295,190,176,172,167,159,154,147,105,22,0)#ax
y=c(rep(NA,7),53.0,485.0,802.7,972.7,94.8,NA)#Fx
colife.calc(i,x,y,colifeout = "all")#retorna uma lista ([[1]]data frame da tabela de vida de coorte e [[2]]vetor R0) e dois gráficos i e ii dispostos lado a lado (ver o item details) em uma nova janela

Função Cohort Life Table Calculations

colife.calc=function(i,x,y,colifeout="all")
{
  tabela=matrix(NA,length(x),10)
  tabela[,1]=i#Coluna referente ao intervalo de dias (x-x'). O último valor deve ser zero pois não há um intervalo.   
  tabela[,2]=x#Coluna referente ao número de sobreviventes no dia x (ax).
  tabela[1,3]=1#Os valores da coluna da proporção da coorte original sobrevivente no dia x (lx) necessitam ser padronizados, dessa forma, o valor inicial é 1 e todos os demais são produzidos em relação a ele. 
  for(ii in 2:length(x))#Calculando os valores da coluna lx.
  {
    tabela[ii,3]=round(((1*tabela[ii,2])/tabela[1,2]),3)
  }
  for(j in 1:(length(x)-1))#Calculando os valores da coluna dx referentes a proporção da coorte original morta durante o intervalo.
  {
    tabela[j,4]=round((tabela[j,3]-tabela[(j+1),3]),3)
  }
  tabela[,5]=round(((tabela[,4]/tabela[,3])/tabela[,1]),3)#Calculando os valores da coluna qx referentes a taxa de mortalidade por INTERVALO.
  tabela[(length(x)-1),5]=1#No penúltimo intervalo da coluna qx, a taxa de moratalidade sempre será 100%.
  tabela[,6]=round((log10(tabela[,3])),2)#Calculando a coluna log10lx
  tabela[length(x),6]=NA#Pois sempre o log10(0)=-Inf
  for(k in 1:(length(x)-1))#(1) Calculando os valores da coluna kx referentes a força diária de morte.
  {
    tabela[k,7]=round(log10(tabela[k,2])-log10(tabela[(k+1),2]),3)      
  }
  tabela[,7]=round((tabela[,7]/tabela[,1]),3)#(2) Calculando os valores da coluna kx referentes a força diária de morte.
  tabela[tabela[,7]==Inf,7]=NA#Retirando os valores infinitos da coluna kx.
  tabela[,8]=y#Coluna referente ao número total de sementes produzidas durante cada período.
  tabela[,9]=round((tabela[,8]/tabela[,2]),2)#Cálculo dos valores da coluna mx referente ao número médio de sementes produzidas por cada indivíduo sobrevivente.
  tabela[,10]=round((tabela[,9]*tabela[,3]),2)#Cálculo da coluna lxmx
  tabela.final=as.data.frame(tabela)
  colnames(tabela.final)=c("intervalo","ax","lx","dx","qx","Log10lx","kx","Fx","mx","lxmx")
  R0=sum(tabela[,10],na.rm = TRUE)#Cálculo da taxa reprodutiva líquida
  INDICES=c("all","null","mortality","survivor")
  colifeout=match.arg(colifeout,INDICES)
  if(colifeout=="all"){
    x11()
    par(mfrow=c(1,2))
    #A) Gráfico da Taxa de mortalidade diária específica por idade (qx) e intensidade de mortalidade (kx).
    tab5.graph=tabela[,5]
    tab5.graph[(length(x)-1)]=NA#Nos pontos de dispersão referentes a coluna qx, o valor 1, referente a taxa de mortalidade de 100%, não precisa estar no gráfico.
    plot(c(rep(cumsum(tabela[,1]),2)),c(tab5.graph,tabela[,7]),type = "n",ylab = "qx e kx",xlab="Dias",bty="l",tck=0.01)
    points(cumsum(tabela[,1]),tab5.graph,type="o",pch=16)
    points(cumsum(tabela[,1]),tabela[,7],type = "o",pch=8)
    legend(min(cumsum(tabela[,1]),na.rm = TRUE),max(c(tab5.graph,tabela[,7]),na.rm = TRUE),c("qx","kx"),lty=c(1,1),pch = c(16,8))
    #B) Gráfico da curva de sobrevivência
    plot(tabela[,6]~cumsum(tabela[,1]),type ="o", pch=16,bty="l",tck=0.01,xlab="Dias",ylab="Log10 lx")
  }
  if (colifeout=="mortality"){
    #A) Gráfico da Taxa de mortalidade diária específica por idade (qx) e intensidade de mortalidade (kx).
  x11()
  tab5.graph=tabela[,5]
  tab5.graph[(length(x)-1)]=NA#Nos pontos de dispersão referentes a coluna qx, o valor 1, referente a taxa de mortalidade de 100%, não precisa estar no gráfico.
  plot(c(rep(cumsum(tabela[,1]),2)),c(tab5.graph,tabela[,7]),type = "n",ylab = "qx e kx",xlab="Dias",bty="l",tck=0.01)
  points(cumsum(tabela[,1]),tab5.graph,type="o",pch=16)
  points(cumsum(tabela[,1]),tabela[,7],type = "o",pch=8)
  legend(min(cumsum(tabela[,1]),na.rm = TRUE),max(c(tab5.graph,tabela[,7]),na.rm = TRUE),c("qx","kx"),lty=c(1,1),pch = c(16,8))
  }
  if(colifeout=="survivor"){
    #B) Gráfico da curva de sobrevivência
    x11()
    plot(tabela[,6]~cumsum(tabela[,1]),type ="o", pch=16,bty="l",tck=0.01,xlab="Dias",ylab="Log10 lx")
  }  
  else{
    (colifeout=="null")
  }
  return(list(tabela.final,R0))
}
05_curso_antigo/r2016/alunos/trabalho_final/pedrodias888/start.txt · Última modificação: 2020/08/12 06:04 (edição externa)