# 1) Definir o diretório de trabalho ####
getwd()
setwd("#inserir o caminho para o diretório de trabalho aqui!")

# 2) Buscar ajuda no R ####
?getwd()
?? 'working directory'
?? 'R version'
R.Version()
?? 'citing R'
citation()

# 3) Ler o arquivo de dados ####
# arquivo '.txt' separado por tabulações
read.table('def_area_2004_2019_tabulacoes.txt',
           sep = '\t', header = T) -> dados
dados
# arquivo '.txt' separado por espaços
read.table('def_area_2004_2019_espacos.txt',
           sep = ' ', header = T) -> dados
# arquivo '.csv' separado por vírgulas
dados <- read.csv('def_area_2004_2019.csv')

# arquivo a ser utilizado no curso
read.csv('cursoR.csv') -> dados

# Dicas para nomes de colunas e variáveis nas tabelas
# - Não usar espaços, acentos, caracteres especiais
# - Usar nomes simples e de fácil entendimento
# - Usar nomes com significado
# - Usar '_' para separar palavras (ex: nome_estado)
# - Usar '.' para separar palavras (ex: nome.estado)
# - Usar todas as letras minúsculas ou maiúsculas (ex: AREA, area)
# - Usar a primeira maiúscula para separar palavras (ex: areaFlorestal)

# 4) Introdução a variáveis e tipos de dados ####
# - Começar com uma letra (não com números ou símbolos)
# - Se iniciar com ponto, não pode ser seguido de número.
# - Pode usar '_' (underline) para separar palavras.
# - Não usar palavras reservar.
# - Nomes não podem conter espaços.
# - Para declarar, pode se usar '=', '<-' ou '->'.

# Exemplos de nomes para objetos no R:
numero = 2
x3 <- 3
x.3 <- 3
.x3 <- 3
var1 <- 10
NOME <- 'Guto'
meu.nome <- 'Guto'
meu_nome <- 'Guto'
var <- 500 * 2
email = 'ricardocerboncini@gmail.com'
sucesso <- TRUE
acerto <- 2 * 2 == 4  
falso <- 2 * 2 != 4  

# Exemplos de nomes que não podem ser usados:
2numero = 2
.3vezes <- 3  
variavel-1 <- 10
_meu_nome <- 'Guto'
variavel! <- 500
em@il <- 'ricardocerboncini@gmail.com'  
TRUE <- 'sucesso'

# Tipos de variáveis
varNum <- 10.5 # numérica 
varNum2 <- 10 # numérica
varInt <- 10L # inteiro (integer)
varChar <- 'A' # caracteres ou 'string'
varStr <- 'Introdução ao R' # caracteres ou 'string'
varBool <- FALSE # lógica ou booleana

# Checar o tipo da variável com o comando class()
class(varNum)
class(varInt)
class(varChar)
class(varStr)
class(varBool)

# 5) Acessando variáveis e dados da planilha de dados ####
read.csv('cursoR.csv') -> dados
class(dados)
str(dados) #checar as variáveis contidas na tabela
head(dados) #mostrar as primeiras linhas da tabela
head(dados, 10)
tail(dados) #mostrar as últimas linhas da tabela
tail(dados, 3)
dados$ano #usar $ para acessar as variáveis (ou itens em uma lista)
dados$ano -> anos
anos

# Escolher linhas / intervalo de linhas (de uma variável)
dados$area_desmatada
class(dados$area_desmatada)
dados$area_desmatada[2]
dados$area_desmatada[2:5]

# Escolher colunas / intervalo de colunas (da tabela)
dados[2]
class(dados[2])
dados[2:3]
dados[-1]

# Escolher células (linha x coluna)
head(dados)
dados[1,1]
dados[2,1]
# valores contidos da primeira a terceira linha,
# da segunda e terceira coluna
dados[1:3,2:3]
#valores contidos da 10 a 15 linha,
# da primeira a segunda coluna
dados[10:15,1:2]

# 6) Subconjuntos da tabela de dados ####
# usando o comando subset()
head(dados)
subset(dados, estado == 'AM') #subgrupo dos dados para o estado do AM
AM <- subset(dados, estado == 'AM')
subset(dados, area_desmatada > 1000) #linhas com área desmatada maior que 1000 km^2
subset(dados, area_desmatada > 1000 | area_desmatada < 500) #maior que 1000 OU menor que 500
subset(dados, area_desmatada > 10000 & estado == 'MT') #maior que 1000 E no estado do MT

# usando colchetes []
dados[1,]
#todas as colunas e linhas referentes ao estado do AC
dados[dados$estado == 'AC',]
dados[dados$estado == 'AC' | dados$estado == 'AM',] #'AC' e 'AM'

# implementando com o comando which()
which(dados$estado == 'AM')
dados[17:32,]

# utilizando which(), %in% e c() para separar em conjuntos com múltiplas entradas
dados[which(dados$estado %in% 'AM'),]
dados[which(dados$estado %in% c('AM','PA','AC')),] #exemplo com which, %in% e c()

estados_de_interesse <- c('AM','PA','RO','RR','AC')
dados[which(dados$estado %in% estados_de_interesse),]
  
  
  
  
  





  
  
  
# 7) Operações com valores em linhas e colunas ####

# Contando linhas e colunas
ncol(dados) # número de colunas
nrow(dados) # número de linhas

length(dados) # comprimento do objeto - para tabelas é o n de colunas
length(dados$area_desmatada) # comprimento do objeto - pata variáveis é o n de linhas

colSums(dados[-3]) # soma de cada coluna
rowSums(dados[-3]) # soma de cada linha

# 8) Checar dados ausentes ####
read.csv('cursoR2.csv') -> dados_na
is.na(dados_na) #Checa dados 'na' célula por célula: FALSE = dado presente; TRUE = dado ausente.
complete.cases(dados_na) # TRUE =  completo, FALSE = contém 'NA'. Por linha.

dados_na[9,]
na.omit(dados_na) #criar nova tabela sem dados ausentes (remoção das linhas)

# 9) Estatística descritiva ####
head(dados)

attach(dados) # guardar a planilha na memória, para acessar variáveis diretamente
estado
dados[estado != 'AMZ_LEGAL',] -> dados2 # retirar dados da AMZ_LEGAL
dados[estado == 'AMZ_LEGAL',] -> AMZ_LEGAL # separa apenas os dados para a AMZ Legal

AMZ_LEGAL[order(AMZ_LEGAL$area_desmatada),] -> AMZ_ord
AMZ_ord[1,] # linha com menor valor (primeira)
AMZ_ord[nrow(AMZ_ord),] # linha com maior valor (última)

# Qual a maior área desmatada por ano em algum dos estados?
attach(dados2)
max(area_desmatada) # valor máximo da variável
dados2[area_desmatada == max(area_desmatada),]

# outros comandos importantes
min(area_desmatada) # valor mínimo da variável
range(area_desmatada) # valores mínimos e máximos da variável

# estimando parâmetros
mean(area_desmatada) # média
median(area_desmatada) # mediana

dados2$aleatoria <- rnorm(nrow(dados2), mean = 0, sd = 1) # criar variável aleatória
head(dados2)
attach(dados2)
mean(aleatoria)
median(aleatoria)

quantile(area_desmatada) # calcular quantis
quantile(area_desmatada, .6)
quantile(area_desmatada, c(.6, .7, .8))

seq(0, 1, .1) #criar intervalos conhecidos em uma sequência
quantile(area_desmatada, seq(0,1,.1)) # quantis em intervalos de 10%

sd(area_desmatada) #desvio padrão
var(area_desmatada) #variância

sd(area_desmatada)^2 # elevar ao quadrado, retorna o valor da variância
sqrt(var(area_desmatada)) # raiz quadrada, retorna o valor do desvio padrão

# usando summary() e by()
summary(dados2) # calcula quantis e média para as variáveis
by(dados2, estado, summary) # usar a função summary para todas as variáveis, por estado


# Salvar os resultados dos parâmetros para as variáveis da tabela
summary(dados2) -> descritivo
class(descritivo)
write.csv(descritivo, 'descritivo.csv', row.names = F)

by(dados2, estado, summary) -> descritivo.estados
write.csv(descritivo.estados, 'descritivo_estados.csv', row.names = F)

# Como salvar uma tabela com todos os dados de estatística descritiva por estado?

# 10) Usando loops (laços) ####

descritivo.estados[1] # acessar o primeito item da lista
descritivo.estados[[1]] # acessar as variáveis dentro do primeiro item da lista

names(descritivo.estados) -> estados.nomes #salvar os nomes dos estados
variaveis.nomes <- c('estado',
                     'min',
                     'quartil_25',
                     'mediana',
                     'media',
                     'quartil_75',
                     'max') # definir os nomes das variáveis
tabela.estados <- data.frame() # criar a tabela de dados que receberá os valores

for (i in 1:length(descritivo.estados)) { # loop (ou laço)
  novos.dados <- c(estados.nomes[i],
                   descritivo.estados[[i]][7],
                   descritivo.estados[[i]][8],
                   descritivo.estados[[i]][9],
                   descritivo.estados[[i]][10],
                   descritivo.estados[[i]][11],
                   descritivo.estados[[i]][12]
                   )
  rbind(tabela.estados, novos.dados) -> tabela.estados
}

names(tabela.estados) <- variaveis.nomes
tabela.estados

write.csv(tabela.estados,
          'descritiva_desmatamento_estados.csv',
          row.names = F)


# 11) Instalar e carregar pacotes ####

# install.packages('vegan') #pacote com análises estatísticas em ecologia
# install.packages('ggplot2') #pacote para construção de gráficos

library(ggplot2) # carregar o pacote para utilização de suas funções


# 12) Teste t para duas amostras ####
read.csv('cursoR.csv') -> dados

dados[dados$estado == 'AM',] -> AM
dados[dados$estado == 'PA',] -> PA

# Premissas
# teste de normalidade
shapiro.test(AM$area_desmatada) 
shapiro.test(PA$area_desmatada)
# igualdade de variâncias
var.test(AM$area_desmatada, PA$area_desmatada)

t.test(AM$area_desmatada, PA$area_desmatada, var.equal = F)

# 13) Teste t pareado ####
t.test(AM$area_desmatada, PA$area_desmatada, paired = T)

#outra maneira: usando teste t para uma amostra

AMxPA <- AM$area_desmatada - PA$area_desmatada
t.test(AMxPA) #teste t para uma amostra, comparando com média 0
t.test(AMxPA, mu = -3000) #média hipotética = -3000

t.test(AM$area_desmatada) -> AM.t # é possível usar o t.test para obter o intervalo de confiança
AM.t$conf.int #valores do intervalo de confiança


# 14) Boxplot ####
boxplot(AM$area_desmatada) #boxplot para a variável
boxplot(PA$area_desmatada)
#boxplot comparando dois grupos
par(mar = c(5.1, 4.1, 4.1, 2.1)) # valores padrão de margem para gráficos do R
par(mar = c(5.1, 5.1, 4.1, 2.1)) # aumentando a margem esquerda
boxplot(AM$area_desmatada, PA$area_desmatada,
        xaxt = 'n',
        xlab = 'Estados',
        ylab = expression(paste('Desmatamento (km'^'2',')')))
title('Desmatamento AM x PA')
axis(1, at = c(1,2), labels = c('AM','PA'))

#detectando outliers com o boxplot
boxplot(dados$area_desmatada) # muitos outliers, variável em km^2
boxplot(sqrt(dados$area_desmatada)) # usando raiz quadrada
dados[dados$estado != 'AMZ_LEGAL',] -> dados2 # retirando dados da AMZ_LEGAL
boxplot(sqrt(dados2$area_desmatada)) # usando raiz quadrada sem a AMZ_LEGAL

# 15) Teste de Mann-Whitney (Wilcoxon rank-sum test) ####
# teste não-paramétrico para comparações de duas amostras
wilcox.test(AM$area_desmatada, PA$area_desmatada) # para duas amostras
wilcox.test(AM$area_desmatada, PA$area_desmatada, paired = T) # para amostras pareadas

# 16) Gráfico de Dispersão (scatterplot) ####
dados[dados$estado == 'AMZ_LEGAL',] -> AMZ_L

plot(AMZ_L$ano, AMZ_L$area_desmatada)

plot(dados2$ano, dados2$area_desmatada)

# 17) Modelos lineares: regressão ####

# Regressão linear
attach(dados2)
lm(area_desmatada ~ ano) -> lm1
summary(lm1)
plot(lm1)

lm(sqrt(area_desmatada) ~ ano) -> lm2
summary(lm2)
plot(lm2)

# Separar os dados entre 2004 e 2012
dados2[which(ano %in% seq(2004, 2012, 1)),] -> dados_2004.2012
attach(dados_2004.2012)

lm(sqrt(area_desmatada) ~ ano) -> lm3
summary(lm3)
plot(lm3)
plot(ano, area_desmatada)

# Separar para o arco do desmatamento entre 2004 e 2012
dados_2004.2012[which(estado %in% c('PA','MT','RO')),] -> dados_2004.2012_arco
attach(dados_2004.2012_arco)

lm(sqrt(area_desmatada) ~ ano) -> lm4
summary(lm4)
plot(lm4)
plot(ano, sqrt(area_desmatada))

lm(log(area_desmatada) ~ ano) -> lm5
summary(lm5)
plot(lm5)
plot(ano, log(area_desmatada))


