library(readr)
dados <- read.csv("C:/Espectrorradiometria_R/01_Dados_Processados/curvas_medias.csv", sep=",")
head(dados)
“plotar” : Função genérica para gráfico de linhas utilizando o ggplot2
Argumentos:
plotar = function(dados, titulo) {
library(ggplot2)
library("reshape2") #Pacote para manipular formato de dados no R
pilha=melt(dados, id = "Wavelength")
ggplot(pilha, aes(x=pilha[[1]],y=pilha[[3]],group=pilha[[2]]))+
geom_line(aes(color=pilha[[2]])) +
theme_classic()+
ggtitle (titulo)+
scale_color_discrete(name = "Forest Species")+
ylab ("Reflectance factor") +
xlab ("Wavelength (nm)") +
ylim(0,0.65)+
xlim(400,2000)}
Aplicando a função aos dados e armazenando o gráfico no objeto “plot1”
plot1 = plotar(dados, "Dados Brutos")
plot1
Nesse tópico será utilizada a função “rollapply” do pacote “zoo” que computa a média móvel
library(zoo)
##
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
mm_20=data.frame(rollapply(dados, width = 20, by = 1, FUN = mean, na.rm = TRUE, align = "left"))
mm_30=data.frame(rollapply(dados, width = 30, by = 1, FUN = mean, na.rm = TRUE, align = "left"))
Método loessA função low_pass_loass foi contruída para aplicar o filtro passa baixo utilizando o algoritmo LOESS - Local Polynomial Regression Fitting (https://www.rdocumentation.org/packages/stats/versions/3.6.2/topics/loess).
Argumentos:
low_pass_loess = function (dados, lambda, fator){
itera = lapply(2:dim(dados)[2], function(i) {
predict(loess( y~x , data = data.frame(x = lambda, y = dados[,i]),span = fator), lambda)})
filtrado = data.frame (dados[,1], as.data.frame(itera))
names(filtrado)=names(dados)
return(filtrado)}
lploess_005=low_pass_loess(dados, dados$Wavelength, 0.05)
lploess_010=low_pass_loess(dados, dados$Wavelength, 0.1)
Método splineA função low_pass_spline foi contruída para aplicar o filtro passa baixo utilizando o algoritmo Spline - Fits a cubic smoothing spline to the supplied data (https://www.rdocumentation.org/packages/stats/versions/3.6.2/topics/smooth.spline).
Argumentos:
low_pass_spline = function (dados, lambda, spar){
itera = lapply(2:dim(dados)[2], function(i) {
predict(smooth.spline(lambda,dados[,i], spar = spar), lambda)[[2]]})
filtrado= data.frame (dados[,1], as.data.frame(itera))
names(filtrado)=names(dados)
return(filtrado)}
lpspline_01=low_pass_spline(dados, dados$Wavelength, 0.1)
lpspline_05=low_pass_spline(dados, dados$Wavelength, 0.5)
p1=plotar(dados, "Dados Brutos")
p2=plotar(mm_20, "Média Móvel - Janela 20")
p3=plotar(mm_20, "Média Móvel - Janela 30")
p4=plotar(lploess_005, "Passa-Baixo Loess - Limiar 0.05")
p5=plotar(lploess_010, "Passa-Baixo Loess - Limiar 0.1")
p6=plotar(lpspline_01, "Passa-Baixo Spline - Limiar 0.1")
p7=plotar(lpspline_05, "Passa-Baixo Spline - Limiar 0.5")
library(ggpubr)
## Carregando pacotes exigidos: ggplot2
library(gridExtra)
ggarrange(p1,p2,p3,p4,p5,p6,p7,
labels = c("A", "B","C","D","E","F","G"),
common.legend = TRUE,
legend = "bottom",
ncol = 3, nrow = 3)
ggarrange(p1,p3,p4,p7,
labels = c("A","B","C","D"),
common.legend = TRUE,
legend = "bottom")