-
Notifications
You must be signed in to change notification settings - Fork 0
/
AV20_parte_01.R
330 lines (269 loc) · 13.9 KB
/
AV20_parte_01.R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
# Recarregar as variáveis do espaço de trabalho da fase inicial
load (file = "AV_2020_carregamento.RData")
# carregar bilbliotecas "ggplot2" e "plotly"
# O R é baseado em bibliotecas desenvolvidas pela Comunidade e que executam de modo
# transparente e simples muitas funções que podem ser mais complexas usando apenas
# as funcionalidades básicas da linguaguem.
# O GGPLOT2 é uma biblioteca especializada para gráficos que permite a execução tanto
# de simples gráficos de linha ou pontos como a superposição de operadores estatísticos
# importantes para análise e com um acabamento profissional.
# A biblioteca PLOTLY permite transformar muitos desses gráficos em verões interativas
# que facilitam a interpretação, visualização e apresentação de suas análises.
require(ggplot2)
library(plotly)
# Raios Gama com todos os pontos unidos por linhas
# Os gráficos serão apenas numerados sequencialmente para facilitar seu uso posterior
# p1 = "plot 1"
p1 <- ggplot(perfil, aes(x=prof_m, y=GR)) +
# a tabela "perfil" é a base de dados, "prof_m" é a abcissa e "GR" é a ordenada
theme_linedraw() +
# aplica um tema para o gráfico sem plano de fundo, somente com linhas
coord_cartesian(xlim = range (perfil$GR), ylim = range(perfil$prof_m), expand = F) +
# os limites do gráfico são explicitados para os limites dos dados
geom_line(colour = "black", size = 0.4) +
# define-se como gráfico de linha de cor azul
scale_x_reverse() +
# a escala de "Depth" é revertida (menor no alto, maior na base)
coord_flip()+
# gira-se o sistema de coordenadas ("Depth" agora está na ordenada)
ggtitle("Raios Gama (API)")+
# adiciona um título no topo do gráfico
theme(plot.title = element_text(hjust=0.5))
# centraliza o título ao longo do topo
# O gráfico foi armazenado na variável "p1"
# Se invocarmos p1, teremos o gráfico na janela "Plots" no quadro inferior direito do RStudio
p1
# Usando o menu "Export" da aba de "Plots", o gráfico estático pode ser gravado como imagem
# ou PF, ajustando as suas dimensões manualmente.
# Ele também pode ser visto numa janela de "zoom" que também pode ser manipulada
# USANDO O PLOTLY para obter gráfico dinâmico interativo
pp1 <- ggplotly(p1)
pp1
# A exportação de um gráfico interativo é mais complexa e não cabe neste exercício
# Veremos depois que o "script" pode ser gravado com todos os seus comando, comentários e
# gráficos de um modo bastante simples para um arquivo HTML.
# Resumo Estatístico do Raio Gama
summary(perfil$GR)
# Gerando um histograma para analisar GR
GR_histo50 <-ggplot(perfil, aes(x=GR)) +
geom_histogram(aes(y=..density..), bins=50, color="green", fill="chartreuse") +
geom_vline(aes(xintercept=mean(na.omit(GR))),
color="blue", linetype="dashed", size=1) +
scale_x_continuous(name = "Raio Gama"~(API)) +
scale_y_continuous(name = "Probabilidade") +
ggtitle("Histograma - Raio Gama Total (50 bins)") +
#adiciona um fundo branco ao gráfico
theme_linedraw() +
# adiciona um título no topo do gráfico - centralizado
theme(plot.title = element_text(hjust=0.5))
# centraliza o título ao longo do topo
GR_histo50
GR_histo20 <-ggplot(perfil, aes(x=GR)) +
geom_histogram(aes(y=..density..), bins=20, color="green", fill="chartreuse") +
geom_vline(aes(xintercept=mean(na.omit(GR))),
color="blue", linetype="dashed", size=1) +
scale_x_continuous(name = "Raio Gama"~(API)) +
scale_y_continuous(name = "Probabilidade") +
ggtitle("Histograma - Raio Gama Total (20 bins)") +
#adiciona um fundo branco ao gráfico
theme_linedraw() +
# adiciona um título no topo do gráfico - centralizado
theme(plot.title = element_text(hjust=0.5))
# centraliza o título ao longo do topo
GR_histo20
GR_histo100 <-ggplot(perfil, aes(x=GR)) +
geom_histogram(aes(y=..density..), bins=100, color="green", fill="chartreuse") +
geom_vline(aes(xintercept=mean(na.omit(GR))),
color="blue", linetype="dashed", size=1) +
scale_x_continuous(name = "Raio Gama"~(API)) +
scale_y_continuous(name = "Probabilidade") +
ggtitle("Histograma - Raio Gama Total (100 bins)") +
#adiciona um fundo branco ao gráfico
theme_linedraw() +
# adiciona um título no topo do gráfico - centralizado
theme(plot.title = element_text(hjust=0.5))
# centraliza o título ao longo do topo
GR_histo100
GR_histo200 <-ggplot(perfil, aes(x=GR)) +
geom_histogram(aes(y=..density..), bins=200, color="green", fill="chartreuse") +
geom_vline(aes(xintercept=mean(na.omit(GR))),
color="blue", linetype="dashed", size=1) +
scale_x_continuous(name = "Raio Gama"~(API)) +
scale_y_continuous(name = "Probabilidade") +
ggtitle("Histograma - Raio Gama Total (200 bins)") +
#adiciona um fundo branco ao gráfico
theme_linedraw() +
# adiciona um título no topo do gráfico - centralizado
theme(plot.title = element_text(hjust=0.5))
# centraliza o título ao longo do topo
GR_histo200
# Para gerar um pdf com uma suite especifica de perfis, podemos usar a função "multiplot"
# MÚLTIPLOS GRÁFICOS NUM ÚNICO PAINEL
## multiplot()
######################################################################
# link: http://www.cookbook-r.com/Graphs/Multiple_graphs_on_one_page_(ggplot2)/
# Multiple plot function
#
# ggplot objects can be passed in ..., or to plotlist (as a list of ggplot objects)
# - cols: Number of columns in layout
# - layout: A matrix specifying the layout. If present, 'cols' is ignored.
#
# If the layout is something like matrix(c(1,2,3,3), nrow=2, byrow=TRUE),
# then plot 1 will go in the upper left, 2 will go in the upper right, and
# 3 will go all the way across the bottom.
#
multiplot <- function(..., plotlist=NULL, file, cols=1, layout=NULL) {
library(grid)
# Make a list from the ... arguments and plotlist
plots <- c(list(...), plotlist)
numPlots = length(plots)
# If layout is NULL, then use 'cols' to determine layout
if (is.null(layout)) {
# Make the panel
# ncol: Number of columns of plots
# nrow: Number of rows needed, calculated from # of cols
layout <- matrix(seq(1, cols * ceiling(numPlots/cols)),
ncol = cols, nrow = ceiling(numPlots/cols))
}
if (numPlots==1) {
print(plots[[1]])
} else {
# Set up the page
grid.newpage()
pushViewport(viewport(layout = grid.layout(nrow(layout), ncol(layout))))
# Make each plot, in the correct location
for (i in 1:numPlots) {
# Get the i,j matrix positions of the regions that contain this subplot
matchidx <- as.data.frame(which(layout == i, arr.ind = TRUE))
print(plots[[i]], vp = viewport(layout.pos.row = matchidx$row,
layout.pos.col = matchidx$col))
}
}
}
######################################################################
# Exemplo de uso : multiplot(p1, p8, p9,p10, cols=4)
# Juntando os três gráficos em uma página
multiplot(GR_histo50, GR_histo20, GR_histo100, GR_histo200, cols=2)
# Usando o histograma com 50 classes (ou "bins"), podemos sobrepor a curva
# empírica da função de densidade de probabilidade ( em inglês, EPDF - Empirical
# Probability Density Function usando diversas janelas com kernel gaussiano.
GR_histo50 + geom_density(alpha = 0.2, bw = 1)
multiplot (GR_histo50 + geom_density(alpha = 0.2, bw = 1)+ ggtitle("Histograma - Raio Gama Total (50 bins, w=1)"),
GR_histo50 + geom_density(alpha = 0.2, bw = 2)+ ggtitle("Histograma - Raio Gama Total (50 bins, w=2)"),
GR_histo50 + geom_density(alpha = 0.2, bw = 3)+ ggtitle("Histograma - Raio Gama Total (50 bins, w=3)"),
GR_histo50 + geom_density(alpha = 0.2, bw = 4)+ ggtitle("Histograma - Raio Gama Total (50 bins, w=4)"),
cols=2)
# Classificando ARN/FLH com corte simples de Raios Gama. Escolhendo valor de corte
# no gráfico interativo gerado no ggplot2 + Plotly
# Adota-se valor de corte = 70 API
# Na análise preliminar dos histogramas, 70 API parece um bom valor de corte
valor_de_corte <- 70
#################
## GERE OS HISTOGRAMAS PAR OUTRAS VARIÁVEIS USANDO "CÓPIA, COLAGEM, EDICÃO
## PARA ISSO, O NOTEPAD++ PODE SER MUITO PRÁTICO.
# Criar novas colunas para armazenar "ARN" e "FLH"
# Em matrizes pequenas como esta aqui, não há grande problema em não reservar um espaço pré-alocado
# mas é sempre uma boa prática poi isso demanda muito mais processamento em matrizes grandes.
perfil$ARN <- as.numeric("NA")
perfil$FLH <- as.numeric("NA")
# As colunas são criadas à direita e preenchidas com a constante lógica "NA" que indica 'dados ausentes'
# O comando "as.numeric" indica que os campos da coluna são números
# Loop para comparar GR com valor_de_corte e armazenar GR nas colunas adequadas
# Limite do loop é dado pelo número de linhas do data frame
# O comando "dim(perfil)" dá o vetor resultado [776 19] : 776 linhas, 19 colunas
# Deste modo, "dim(perfil)[1] retorna o o valor armazenado na posição '1' do vetor
# que é o número de linhas da matriz
linhas <- dim(perfil)[1]
for (i in 1:linhas){ # Início do loop 'for'
# O loop if-else compara linha a linha se o valor presente é maior que 70 API
# Se o teste for TRUE, replica-se o 'gama' na coluna 'FLH'
# Se FALSE, executa-se o comando em 'else' (armazena-se em 'ARN')
# Início do loop if-else
if(Dados_para_Avaliacao$GR[i] > valor_de_corte ) {
perfil$FLH [i] <- perfil$GR[i]
}
else {
if(Dados_para_Avaliacao$GR[i] > 0){
perfil$ARN[i]<- perfil$GR[i]
}}
}
# Note que para essa operação lógica estou usando o data frame original com nulos (-999.25).
# Se usarmos o dataframe "perfil" onde substituímos o nulo por "NA", haverá uma mensagem de erro
# pois algumas linhas não têm dados e não podem ser usadas para o teste lógico.
# Não há nenhum efeito prático nos resultados porém a função de compilar do RStudio não rodará.
# Entretanto, o armazenamento se dá no data frame "perfil" pois as células com "NA" são 'puladas'
# quando o gráfico é feito
# p2 <- ggplot(subset(perfil, perfil$ARN != "NA"), aes(x=prof_m, y=GR)) +
# # a tabela "perfil" é a base de dados, "prof_m" é a abcissa e "GR" é a ordenada
# # o comando 'subset' gera uma matriz na memória a partir do data frame "perfil"
# # "perfil" é o primeiro argumento no comando e define o data frame analisado
# # a condição perfil$ARN diferente de "NA" separa todos os pontos classificados
# # como ARN e plota a linha correspondente da coluna "GR"
# theme_linedraw() +
# # aplica um tema para o gráfico sem plano de fundo, somente com linhas
# coord_cartesian(xlim = range (perfil$GR), ylim = range(perfil$prof_m), expand = F) +
# # os limites do gráfico são explicitados para os limites dos dados
# geom_point(colour = "blue") +
# # define-se como gráfico de pontos de cor azul
# scale_x_reverse() +
# # a escala de "Depth" é revertida (menor no alto, maior na base)
# coord_flip()+
# # gira-se o sistema de coordenadas ("Depth" agora está na ordenada)
#
# ggtitle("Raios Gama - Arenitos")+
# # adiciona um título no topo do gráfico
# theme(plot.title = element_text(hjust=0.5))
# # centraliza o título ao longo do topo
# p2
#
# # O gráfico gerado só tem pontos...
# # Vamos aproveitar para ver como funciona a biblioteca 'plotly' neste caso.
#
# # USANDO O PLOTLY
# pp2 <- ggplotly(p2)
# pp2
# O resumo estatístico da variável ARN
summary(perfil$ARN)
# O histograma da nova variável
ARN_histo50 <-ggplot(perfil, aes(x=ARN)) +
geom_histogram(aes(y=..density..), bins=50, color="green", fill="chartreuse") +
geom_vline(aes(xintercept=mean(na.omit(ARN))),
color="blue", linetype="dashed", size=1) +
scale_x_continuous(name = "Raio Gama"~(API)) +
scale_y_continuous(name = "Probabilidade") +
ggtitle("Histograma - Raio Gama Total dos Arenitos (50 bins)") +
#adiciona um fundo branco ao gráfico
theme_linedraw() +
# adiciona um título no topo do gráfico - centralizado
theme(plot.title = element_text(hjust=0.5))
# centraliza o título ao longo do topo
ARN_histo50
# Um painel com a curva EPDF sobreposta
multiplot (ARN_histo50 + geom_density(alpha = 0.2, bw = 1)+ ggtitle("Histograma - Raio Gama Total dos Arenitos (50 bins, w=1)"),
ARN_histo50 + geom_density(alpha = 0.2, bw = 2)+ ggtitle("Histograma - Raio Gama Total dos Arenitos (50 bins, w=2)"),
ARN_histo50 + geom_density(alpha = 0.2, bw = 3)+ ggtitle("Histograma - Raio Gama Total dos Arenitos (50 bins, w=3)"),
ARN_histo50 + geom_density(alpha = 0.2, bw = 4)+ ggtitle("Histograma - Raio Gama Total dos Arenitos (50 bins, w=4)"),
cols=2)
# Analisemos os Folhelhos com este corte de 70 API
# O resumo estatístico da variável ARN
summary(perfil$FLH)
# O histograma da nova variável
FLH_histo50 <-ggplot(perfil, aes(x=FLH)) +
geom_histogram(aes(y=..density..), bins=50, color="green", fill="chartreuse") +
geom_vline(aes(xintercept=mean(na.omit(FLH))),
color="blue", linetype="dashed", size=1) +
scale_x_continuous(name = "Raio Gama"~(API)) +
scale_y_continuous(name = "Probabilidade") +
ggtitle("Histograma - Raio Gama Total dos Folhelhos (50 bins)") +
#adiciona um fundo branco ao gráfico
theme_linedraw() +
# adiciona um título no topo do gráfico - centralizado
theme(plot.title = element_text(hjust=0.5))
# centraliza o título ao longo do topo
FLH_histo50
# Um painel com a curva EPDF sobreposta
multiplot (FLH_histo50 + geom_density(alpha = 0.2, bw = 1)+ ggtitle("Histograma - Raio Gama Total dos Folhelhos (50 bins, w=1)"),
FLH_histo50 + geom_density(alpha = 0.2, bw = 2)+ ggtitle("Histograma - Raio Gama Total dos Folhelhos (50 bins, w=2)"),
FLH_histo50 + geom_density(alpha = 0.2, bw = 3)+ ggtitle("Histograma - Raio Gama Total dos Folhelhos (50 bins, w=3)"),
FLH_histo50 + geom_density(alpha = 0.2, bw = 4)+ ggtitle("Histograma - Raio Gama Total dos Folhelhos (50 bins, w=4)"),
cols=2)