====== Trabalho Final ====== ===== function.ema ===== **//Código da função//** ####################################################################### # FUNÇÃO PARA CÁLCULO DO ERRO MÉDIO ABSOLUTO e PLOT DA SÉRIE DE DADOS # ####################################################################### rm(list = ls()) # função que limpa o ambiente de trabalho library(openair) # a function.ema requer o pacote openair para realizar a média dos dados # FUNÇÃO PARA CÁLCULO DO ERRO MÉDIO ABSOLUTO # argumentos da function, onde mydata = dados de entrada do usuário, que deve ser um data.frame chamado mydata, # e min e max= o range de registro do equipamento do usuário da função, por default, a função utilizará o min=-25 # e max=50. function.ema <- function(mydata, min=-25, max=50) # function.ema e seus argumentos { # função para transformar objeto de uma classe em duas classes para representar datas/horas mydata$date = as.POSIXct(mydata$date, tz="GMT") # cria um data.frame com os dados filtrados, ou seja, aplica em todas as linhas de todas colunas, exceto na # primeira coluna, uma função para transformar em NA todos os dados que estão fora do range de coleta do # equipamento filtered_data <- apply(mydata[,-1], 2, function(x){x[which(xmax)] = NA; return(x)}) # cria um novo data.frame organizado, onde a primeira coluna será a data e as demais colunas serão o data.frame # criado na etapa anterior, com os dados filtrados mydt <- data.frame(date=mydata$date, filtered_data) # cria um novo data.frame, aplicando a função do pacote openair que calcula a média diária, caso os dados do # usuário sejam horários, fixando também o mínimo de 1% de dados não sendo NA para que a média não seja NA temp_dia <- timeAverage(mydt, avg.time="day", statistic="mean", data.thresh=1) # aplica o cálculo do erro médio absoluto em todas as linhas e colunas, exceto na primeira coluna # ou seja, diminuirá o valor observado de cada dia de cada estação, pela média da série de dados daquela estação # em módulo e somará os resultados, dividindo-os pelo número de observações de cada estação ema_temp_dia <- apply(temp_dia[,-1], 2, function(x) {x <- sum(abs(x[!is.na(x)] - mean(x, na.rm=T)))/length(!is.na(x))}) # PLOT DA SÉRIE DE DADOS # A função plotará 4 gráficos das séries de dados com linhas indicando a média da série mais desvio padrão # e a média menos o desvio padrão. # cria a matriz onde serão plotados os gráficos layout(matrix(c(1,2,3,4,5,5), ncol = 2, byrow = TRUE), heights=c(1.5, 1.5)) par(mai=c(.5,.5,.5,.5)) # especifica as margens for (col_nb in 2:5){ plot(mydata[,col_nb], pch = 20, xaxt='n', bty="l", ann=F) # indica o que será plotado title(main = names((mydata)[col_nb]), line = 0.7) # define como título de cada gráfico o nome da coluna da série title(xlab = "Série de Dados", line=0.5) # define o texto do eixo x title(ylab = "Temperatura °C", line =2.5) # define o texto do eixo y limsup = mean(mydata[,col_nb], na.rm=T) + sd(mydata[,col_nb], na.rm=T) # calcula o desvio padrão mais média da # série de dados de cada coluna limsub = mean(mydata[,col_nb], na.rm=T) - sd(mydata[,col_nb], na.rm=T) # calcula o desvio padrão menos média da # série de dados de cada coluna abline(h=limsup, col="royalblue1", lwd=3) # gera uma abline com a limsup abline(h=limsub , col="royalblue4", lwd=3) # gera uma abline com a limsub } par(mai=c(0,0,0,0)) # especifica as margens da legenda plot.new() # plota a legenda legend(x="top",legend = c("Média + Desvio Padrão", "Média - Desvio Padrão"), # indica o texto da legenda, as cores col=c("royalblue1","royalblue4"), lwd=4, cex=1, horiz=TRUE) # e os tamanhos return(ema_temp_dia) # retorna o erro média absoluto da série de dados analisada no console } **//Arquivo da função e Série de dados//** Arquivo .r da função e série de dados para melhor visualizar o resultado da função. {{:bie5782:01_curso_atual:alunos:trabalho_final:mchitolina:script_functionema.r|}} {{:bie5782:01_curso_atual:alunos:trabalho_final:mchitolina:mydata.csv|}} **//Help da função//** function.ema package:nenhum R Documentation Função para calcular o Erro Médio Absoluto Descrição: Função para o cálculo do erro médio absoluto em dados meteorológicos e plotagem de gráficos da série de dados com o desvio padrão. Uso: function(mydata, min=-25, max=50) Argumentos: mydata Um objeto contendo um data.frame com uma coluna com as datas de observação dos dados e outra(outras) com o os dados observados (estes dados devem ser pelo menos diários). min o valor mínimo de registro do equipamento, por default a função utilizará o valor de -25. max o valor máximo de registro do equipamento, por default a função utilizará o valor de 50. Detalhes: A função calcula o erro médio absoluto da série de dados, que consiste na somatória dos erros absolutos em módulo e na divisão do valor pelo número de dados observados E também plota gráficos da série de dados com linhas indicando a média da série mais desvio padrão e a média menos o desvio padrão. Advertências: O objeto de entrada da função deve ser objeto chamado mydata, da classe data.frame, onde a primeira coluna contém a data de observação de cada dado e as outras, a série de dados de cada estação. O dado de entrada pode conter o número de estações que usuário que quiser analisar. A função exige o pacote “Openair”. Os plots serão melhor visualizados se o dados do usuário forem dados no máximo horários. Autora: Mariane Chitolina mchitolina@usp.br Exemplo: # Criando as sequência de dados para cada estação est_01 <- c(seq(26.71, 15.51, len= 24), seq(14.35, 25.54, len= 24)) est_02 <- c(seq(18.71, 15.51, len= 24), seq(14.35, 21.54, len= 24)) est_03 <- c(seq(31.71, 15.51, len= 24), seq(14.35, 25.54, len= 24)) est_04 <- c(seq(17.71, 14.51, len= 24), seq(13.35, 22.54, len= 24)) # Criando a sequência da coluna date date <- seq(ISOdate(2000,1,1), by = "hour", length.out = 48) # Criando um data.frame com 5 colunas e 48 linhas, sendo a primeira coluna a sequência de datas e horas mydata <- data.frame(date, est_01, est_02, est_03, est_04) # Rodando a função function.ema(mydata) **//Arquivo do help//** {{:bie5782:01_curso_atual:alunos:trabalho_final:mchitolina:help_functionema.txt|}}