====== 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|}}