Ferramentas do usuário

Ferramentas do site


05_curso_antigo:r2017:alunos:trabalho_final:vivian.dash:start

Vivian El Dash

vi.jpg

Mestranda em Fisiologia Geral Laboratório de Energética e Fisiologia Teórica (LEFT) Departamento de Fisiologia Instituto de Biociências Universidade de São Paulo

Meus exercícios

Trabalho final

proposta_funcaov.txt

Sua proposta A me parece muito interessante, em especial pelo fato dela aceitar vários intervalos de tempo para calcular a concentração. Só fiquei em dúvida se a função só funciona com humanos ou se tem como ajustar os parâmetros para qualquer animal. Eu acho o gráfico uma boa ideia e, por fim, eu sugeriria: calcular alguma medida de incerteza nas estimativas de concentração, se for possível estimar essa incerteza (fiquei pirando aqui, que a função poderia dar ao usuário a opção de incluir alguma medida de incerteza das informações de entrada, aí isso seria incirporado no resultado final. Mas eu não entendo de fisiologia então não sei se estou viajando).

O plano B também parece bom, só acho que precisa explicar melhor o que são esses gradientes caso você escolha seguir com o plano B.

E só uma coisa Vivian, ao invés de postar um documento com a proposta, coloque o texto da proposta diretamente na wiki por favor.

—-Danilo G Muniz

Página de ajuda

OBS aos comentários (não faz parte do help): Eu não sei como faria para colocar uma incerteza associada...provavelmente teria que pesquisar uma média meio geral dos valores de BAC para cada condição e ver como eu me aproximo (ou não) deles...mas não tive muito tempo, mals. Quanto à outros animais, acredito que sim, alterando-se methods/html/as.html">as constantes k1 e k2 do código. Disse na proposta que iria ponderar por sexo, mas o modelo que encontrei para sexo não mostrava o crescimento do BAC até o pico, o que eu queria, por isso optei por não utilizar essa variável.
 
bac                package:nenhum                R Documentation
 
Cálculo do conteúdo sanguíneo de álcool (BAC) ao longo do tempo
Description:
A função calcula o conteúdo de álcool no sangue em determinado instante e ao longo de um intervalo de tempo, dado o volume, abv e intervalo d entre bebidas consumidas. É gerado um gráfico do BAC em função do tempo
Usage:
      bac(vol, abv, int, tfinal = 300, tnow = 50, Mb = 80)     
 
Arguments:
 vol: vetor numérico. Volume da bebida consumida [ml]
 abv: vetor  numérico. teor alcoólico da bebida consumida [%vol/vol]
 int: vetor numérico. Tempo transcorrido entre o consumo de cada bebiba e o instante zero [min]
 tfinal: numérico. Intervalo de tempo no qual se deseja calcular o BAC. Será utilizado como limite no eixo X no gráfico BAC X tempo. [min]
 tnow = numérico. Momento de interesse no qual se deseja saber o valor do BAC [min]
 
 
Details:
Cada bebida consumida corresponde à uma posição nos vetores vol, abv e int. Os vetores não precisam apresentar, necessariamente ordem temporal, entretanto deve existir corespondência nas posições entre os 3 vetores.Os 3 vetores devem apresentar o mesmo número de elementos. É calculado o conteúdo sanguíneo de álcool em um dado intervalo de tempo considerando o conteúdo de álcool ingerido e metabolizado até este dado momento. É gerado um gráfico com o valor do BAC ao longo do intervalo tempo = 0 até tempo = tfinal e plotado juntamente uma linha correspondente ao valor de BAC a partir qual, se for pego dirigindo, pode ser preso(a). É ressaltado no gráfico o ponto correspondente ao valor BAC para o tempo = tnow.
 
Value:
 Um gráfico é gerado. Uma lista é retornada mas não é exibida na tela, com os 
 seguintes objetos:
bact[tnow] : BAC [mg/L] no instante tnow
bact: BAC [mg/L] no ao longo do intervalo 0 à tfinal
 
Warning:
Os valores de BAC corespodem a uma estimativa. Seu BAC, de fato, podem variar dependendo de características individuais, etnia, sexo, consumo de alimento/água associados ao álcool. Se beber não dirija. Consuma bebidas álcoolicas com parcimônia. 
 
Author(s):
Vivian ElDash
 
vivian.eldash@gmail.com
 
 
References:
 
 https://consciencianodiaadia.com/2008/06/23/consumo-de-alcool-consciente-para-nao-termos-problemas-com-o-bafometro/
 
 Ludwin C. B Blood Alcohol Content. 2011;3(2):1-8.
 
 
Examples:
 
    # Exemplo com uma entrada. Baseado nos dados utilizados por Ludwin, 2011.
    bac(vol = 15, abv = 0.95, int = 0, tfinal = 200, tnow = 50, Mb = 75) 
 
    # Exemplo com uma entrada. Baseado no exemplo de  https://consciencianodiaadia.com.
    bac(vol = 250, abv = 0.125, int = 20, tfinal = 300, tnow = 180, Mb = 80)
 
    # Exemplo com 3 entradas indenticas, temporalmente ordenadas. 
    vol = c(200, 200, 200)
    abv = c(0.05, 0.05, 0.05)
    int = c(0,30,60)
    bac(vol, abv , int , tfinal = 350, tnow = 150, Mb = 70) 
 
    # Exemplo com 3 entradas distintas, não ordenadas temporalmente. Primeiro consumo sendo 15' após instantante 
    inicial 
    vol = c(200, 50, 320)
    abv = c(0.055, 0.40, 0.12)
    int = c(15,120,50)
    bac(vol, abv , int , tfinal = 450, tnow = 150, Mb = 70) 
 

Código da função

# Mb = massa corpórea [Kg]
# vol = vetor numérico contendo o volume da bebida consumida [ml]
# abv = vetor  numérico contendo o teor alcoólico da bebida consumida [%vol/vol]
# int = vetor numérico contendo o tempo transcorrido entre o consumo de cada
# bebida e o instante zero [min]
# obs: vol, abv e int não precisam necessariamente estar temporalmente ordenados 
# (ex: 10', 20', 30'), mas deve existir correspondência entre as posições em cada vetor. Cada bebida (vol, abv, int) é uma entrada.
# tfinal = intervalo de tempo no qual se deseja calcular o BAC. Será utilizado 
# como limite no eixo X no gráfico BAC X tempo. [min]
# tnow = momento de interesse no qual se deseja saber o valor do BAC [min]
 
# criação da função "bac" e definição dos argumentos, tanto na chamada da função 
# como adotados no código da mesma (linhas 14 à 20)
bac = function(vol, abv, int, tfinal,tnow, Mb) {
  Mb = Mb
  vol = vol
  abv = abv
  int = int
  tfinal = tfinal
  tnow = tnow
 
  # caso os 3 vetores de entrada apresentem tamanhos distintos...
  if (length(vol) != length(abv)|length(vol) != length(int)|length(vol) != length(int)) {
 
    # imprimir a seguinte mensagem em tela e interromper o cálculo do BAC
    stop(print("Vetores de tamanho distintos. Verifique se cada posição nos vetores vol, abv, e int correspondem aos dados referentes à uma bebida consumida"))
 
  }
 
  # caso o tnow seja maior que tfinal
  if (tfinal < tnow) {
 
    # imprimir a seguinte mensagem (porém realizar o cálculo do BAC normalmente)
    print("O BAC referente ao momento tnow está além das dimensões do gráfico e não será visível no mesmo") 
 
  }
 
  # densidade do álcool em relação à água [g/ml]  
  d = 0.8 
  # constante de absorção estomacal do etanol[min^-1] (Ludwin, 2011)
  k1 = 0.109456 
  #constante de metabolização do etanol, uma vez no sangue [min^-1] (Ludwin, 2011)
  # k2 foi modificada do artigo original, de modo a ser proporcional à taxa 
  # metabólica (TM proporcional à M^0.75), sendo assim, o BAC é ponderado pela
  # massa corpórea
  k2 = 0.0006955675*(Mb^0.75) 
  # concentração de álcool no estomago [mg/L]
  A = vol*abv*d*1000*0.0214
  # criação de uma matriz contendo "zeros", na qual serão colocados os valores de
  # BAC ao longo do tempo para cada entrada isoladamente. As dimensões correspondem
  # ao número de entradas (linhas) pelo intervalo no qual será calculado (colunas)
  B = matrix(data = 0, ncol = tfinal, nrow = length(vol))
 
  # Cálculo do BAC ao longo do tempo para cada entrada de acordo com a equação 
  # proposta por Ludwin (2011)
 
  # "abertura" do loop, o qual será "rodado" da primeira até a última entrada
  # o número de interações é equivalente ao comprimento do vetpr "vol" (poderia ter
  # sido utilizado também o comprimento dos vetores "abv" ou "int", uma vez que 
  # apresentam o mesmo número de elementos)
  for (i in 1:length(vol)) {
 
    # quantidade de valores de BAC a ser calculada para cada entrada
    t = c(0:((tfinal-1) - int[i]))
    # cálculo dos valores de BAC para cada entrada. Uma vez que o número de valores
    # em si difere por entrada (quanto mais distantes temporalmente do último consumo, 
    # maior o tamanho do vetor), e de modo a manter a relação temporal entre as 
    # colunas na matriz B, cada vetor do cálculo do BAC é concatenado com um vetor
    # de zeros de comprimento distinto, de modo que a soma do comprimento do vetor
    # de zeros e vetor de BAC resulte no valor do argumento "int". Assim, na primeira
    # coluna de B temos (primeiro instante) o BAC para cada uma das bebidas, sendo
    # este zero para as bebidas consumidas após o primeiro instante.
    B[i,] = c(rep(0, int[i]), A[i]*(k1/(k2-k1))*((exp(-k1*t)) - (exp(-k2*t))))
 
  }
 
  # soma dos valores de BAC a cada instante (correspondente às colunas da matriz B)
  bact = c(apply(B, MARGIN = 2, FUN = sum))
  # plot do BAC em função do tempo, já considerando todas as entradas, e estabelecimento
  # de parametros gráficos (legenda e parametros "estéticos") 
  plot(bact, type = "l", xlab = "Tempo [min]", ylab = "Concentração de álcool no sangue [mg/L]",tcl = 0.3)
  # criação de uma linha com o valor de BAC no qual, caso seja "parado pela polícia"
  # pode ser preso
  segments(x0 = 0, x1 = tfinal, y0 = 60, y1 = 60)
  # legenda da referida linha
  text(x = (tfinal - 50), y = 70, label = "Limite para ser preso(a)", cex = 0.6) 
  # destaque no gráfico do BAC para o momento de interesse estabelecido no parâmetro "tnow"
  points(tnow, bact[tnow], col = "red", pch = 19)
  # mensagem a ser impressa para o usurário com o valor do BAC no tnow
  (cat(paste("Concentração de álcool do sangue após ",tnow, "minutos é do início do consumo é",bact[tnow], " mg/L" )))
  # valor do BAC em tnow a ser retornado ao usuário
  return(list(bact[tnow], bact))
 
}
05_curso_antigo/r2017/alunos/trabalho_final/vivian.dash/start.txt · Última modificação: 2020/09/23 17:14 por adalardo