Traduções desta página:

Ferramentas do usuário

Ferramentas do site


05_curso_antigo:alunos2012:alunos:trabalho_final:danilo.flores:start

Danilo E. F. L. Flôres

foto.jpg

Doutorando em Fisiologia, Instituto de Biociências, USP.

Meus exercícios

exec Yei!!!!!!

Proposta do trabalho final

Plano A - Periodograma

Introdução

Na natureza, todos os seres vivos apresentam ritmos biológicos diários em sua fisiologia, em paralelo às mudanças entre o dia e a noite do ambiente. Entretanto, a maioria desses ritmos biológicos diários persiste mesmo que o organismo seja mantido sob condições constantes em laboratório, onde não há qualquer pista ambiental com periodicidade diária. Esses ritmos biológicos que se manifestam em condições constantes, expressam períodos não exatamente diários: o período sempre varia para mais ou menos que 24 horas, dependendo da espécie. Por isso são chamados ritmos circadianos. O valor do período de um ritmo circadiano é de suma importância para o entendimento dos mecanismos fisiológicos subjacentes. Por isso, foram desenvolvidos alguns métodos para que se possa extrair um valor de período a partir de dados rítmicos em uma serie temporal.

Input

Os dados devem estar organizados em uma série temporal contínua, com intervalos de tempo fixos entre medidas consecutivas da variável biológica rítmica. Por exemplo, pode ser o valor da temperatura corporal de um animal medido a cada 15 minutos, ao longo de vários dias.

Tarefa

Minha intenção é programar um dos métodos criados para calcular período do ritmo: o periodograma. O método passa pelos seguintes passos: - Dividir a serie temporal em seções de comprimento “x” (equivalente ao período que se quer avaliar). Por exemplo, divide-se a série em seções de 23 horas cada. - Depois, construir um waveform, calculando o formato de curva média entre todas as seções. - Finalmente, retornar um valor de relevância daquele período na série temporal, calculado a partir do formato da curva média no waveform, Entende-se que quanto mais próximo o “x” for do período real dos dados, menos achatado fica o waveform médio das seções. Esse mesmo procedimento é repetido para diferentes valores de período “x”, de modo que se obtém um valor de relevância para cada um dos períodos testados.

Output

O resultado final do periodograma é uma representação gráfica dos períodos (eixo x) e suas respectivas importâncias (eixo y). Com base nesse gráfico, é possível avaliar qual o período mais proeminente nos dados da variável rítmica.

Plano B – Rotina do biotério

Introdução

O biotério onde mantenho os roedores dos meus experimentos deve seguir uma rotina específica, para evitar que os dados dos ritmos biológicos sejam influenciados por fatores indesejados.Por isso, por exemplo, precisamos manter a alimentação dos animais em horários aleatórios. Em um dos experimentos também preciso que as luzes sejam acesas uma vez por dia em horários aleatórios. É difícil decidir esses horários “de abeca”, por isso, proponho uma função que decida os horários e os organize em tabelas, para facilitar o trabalho do responsável pelo biotério.

Tarefa

A função irá programar os horários de alimentação e acender das luzes a cada dia. A alimentação deve acontecer em horários aleatórios (com distribuição uniforme ao longo das 24 horas do dia). As luzes deverão se acender e se apagar uma ou mais vezes por dia. Poderei escolher a duração em que as luzes ficarão acesas e a distribuição de horários desse evento “luzes acesas” ao longo dos dias.

Input

Fornecimento dos dias para os quais a programação será gerada. Também será necessário definir os parâmetros de distribuição dos dados de iluminação.

Output

Tabela de dias com os horários em que deve ser fornecido o alimento para os animais e horários em que as luzes devem ser acesas e apagadas.

Comentários

Oi Danilo, As propostas estão bem apresentadas e ambas são factíveis. Ao meu ver a proposta A é mais interessante pelo desafio e pela tarefa realizada, apesar do plano B ter uma utilidade incontestável, apesar de mais mundano na sua tarefa. Sugiro que inclua na proposta A um argumento com um vetor de entrada com os intervalos a serem testados e deixe um default com um vetor de intervalos mais utilizados. — Alexandre Adalardo de Oliveira 2012/04/03 21:37

Função final: Periodograma

Help da função

periodogram                package:unknown                R Documentation

Assesses the period in a time series

Description:

     Calculates the importance of different periods in a time-series. Designed to be applyed on data from circadian rhythms. It was modifyed from the method described in Enrigth (1965).

Usage:

     periodogram (x, int=5, per.range=c(15,35), prec=5, plot=TRUE, raw.data=FALSE)

Arguments:

	x: a data vector that will be interpreted as a time-series, with regular intervals between each measurement. May contain NA's.

	int: the time interval between each measurement of the time-series. Value must be given as an integer and in minutes.

	per.range: a vector of length two determining the lower and upper limits from the range of periods to be tested. Values must be given as integers and in hours. Default periods range from 15 to 35 hours.

	prec: "precision" of the periods in the range of periods delimited by "per.range". Value must be given as an integer and in minutes.

	plot: logical. If FALSE, function does not return the periodogram plot.
	
	raw.data: logical. If TRUE, function returns the raw data for the importance of each tested period in the time series.

Value:

     Returns periodogram plot, with the importance ("Amplitude") of each period. And/or returns the raw.data from the periodogram.

Author(s):

                Danilo Flores
           dan_eugenio@yahoo.com.br

References:

     Enright (1965). The search for rythmicity in biological time-series. Journal of Thoretical Biology 8, 426-428.

Examples:

per22h<-rep(rep(c(0,100),each=132),20)
per26h<-rep(rep(c(0,100),each=156),20)

periodogram(per22h)
periodogram(per26h)
periodogram(per22h,plot=FALSE,raw.data=TRUE)
periodogram(per26h,per.range=c(20,30),prec=10)

Função

periodogram=function(x,int=5,per.range=c(15,35),prec=5,plot=TRUE,raw.data=FALSE)
{
  #Cria um vetor com os períodos a serem testados, em minutos
  #O primerio periodo será o primeiro valor do vetor "per.range"
  #O último periodo será o segundo valor do vetor "per.range"
  #E os períodos intermediários serão a sequencia entre esses dois valores a cada "prec" minutos
  Periods=seq((per.range[1]*60),(per.range[2]*60),by=prec)
  #Divide os dados para a precisão de 1 minuto
  data1=rep(x/int,each=int)
  #Cria um data.frame para adicionar os dados de significância de cada periodo
  final=data.frame(Periods,list("Amplitude"=rep(NA,length(Periods))))
  #Loop para fazer os últimos passos dos dados
  for (i in 1:length(Periods))
  {
    #Cria uma matriz com o dado dividido em sessoes de cumprimento periods[1] até periods[ultimo]
    #Os dados são completados com NA antes de colocar na matriz, para dar o numero certo de linhas e colunas:
    data2=c(data1,rep(NA,(Periods[i]-length(data1)%%Periods[i])))
    #Cada sessao consecutiva para um mesmo cumprimento eh colocada em colunas consecutivas da matriz "data.matrix":    
    data.matrix=matrix(data2,nrow=Periods[i])
    #Preenche o data frame "final" com os valores de importancia ("Amplitude") de cada período:
    final[i,"Amplitude"]=sd(apply(data.matrix,1,mean,na.rm=TRUE))
  }
  if (plot==TRUE)
  {
    plot(final,type="l",main="Periodogram",las=1)
    abline(v=final[final$Amplitude==max(final$Amplitude),"Periods"],col=2)
    mtext(paste("Main period =",
                final[final$Amplitude==max(final$Amplitude),"Periods"],
                "minutes"),
          3,col=2)
  }
  if (raw.data==TRUE)
  {
    final
  }
}

Arquivo da função

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