---
# System prepended metadata

title: Noções básicas de R

---

# Noções básicas de R

```r
Hello world!
```
### O que iremos ver hoje?
- Introdução: 
    * O que é o R e o RStudio
    * Do que é composto o RStudio
    * Utilidade estatística
* Primeiros conceitos:
    * Cálculos
    * Criação de variáveis
    * Funções 
    * Estruturas de dados
    * Operadores lógicos
* Plotagem de gráficos e funções estatísticas
    * Pacotes do R
    * Gráficos 
    * Uso do R como ferramenta para estatística
    * Correlação
    * Regressão


## Começando pelo começo
### O que é o R?
O R é tanto uma linguagem de programação como um ambiente de análise estatística e criação de gráficos. Ele foi criado baseado na liguagem estatístics S, sendo pautado na necessidade de um programa de análises estatísticas que fosse gratis. Sua propagaropagação vem da facilidade de escrever códigos e figuras publicáveis, por ser gratuito, funcionar em todos os OS e ser desenvolvido através de uma liguagem verdadeira, o que significa permitir aos usuários criar mais funcionalidades.

Quando se diz ambiente, quer-se dizer um programa de computador planejado e estruturado para realizar alguma função. O R não é sómente um conjunto de ferramentas, mas ele dá a possibilidade de armazenar e operar dados, como analizá-los.

### O que é o RStudio?
O RStudio é uma IDE, ou seja, uma ambiente de desenvolvimento integrado, utilizado para rodar as funcionalidades do R. Uma IDE é composta normalmente por um editor de texto, automatizador de build e debugger.
* Editor de texto: utilizado para escrever o código a ser processado
* Automatizador: Processo de criação de software, onde estão inclusos a compilação do código em codigo binário, empacotamento do mesmo e realização de testes.

### O que isso tem a ver comigo?

* Análise de dados
* Inferência estatística
* Aprendizagem de máquina

[Pacotes existentes no R](https://cran.r-project.org/web/views/)

[Cientista de dados - Linkedin](https://www.linkedin.com/jobs/search/?currentJobId=3442161820&keywords=data%20analist)

[Cientista de dados - Glassdoor](https://www.glassdoor.com.br/Sal%C3%A1rios/cientista-de-dados-sal%C3%A1rio-SRCH_KO0,18.htm#:~:text=Qual%20%C3%A9%20o%20sal%C3%A1rio%20de,De%20Dados%20na%20sua%20regi%C3%A3o.)




## Seguindo pelo segundo
### Cálculos
Usando a linha de comando de R podemos realizar contas simples

Somar
```r
> 1+1
[1] 2
```
subtrair,
```r 
> 14-6
[1] 8
```
multiplicar,
```r
> 3*4
[1] 12
```
dividir,
```r 
> 47/11
[1] 4.272727
```
e realizar cálculos mais complexos como se fosse uma calculadora científica.
```r 
> sin(5)
[1] -0.9589243
```

Podemos também atribuir o resultado de um cálculo à uma variável
```r

> resultado <- 47/11
> resultado
[1] 4.272727
> resultado*11
[1] 47
> resultado <- resultado+42
> resultado
[1] 46.27273
```
## Nosso primeiro programa!

#### Calculando a média dos números de 1 a 10
```r 
mean(1:10)
```
> O operador ":" cria uma sequência de números
> Dentro dos parenteses ficam os argumentos da função 
> O resultado é chamado vetor


## Testanto a vetorização dos operadores

```r 
1:5 + 6:10

c(1, 3, 6, 10, 15) + c(0,1,3,6,10)
```

## Atribuição de variáveis

```r 
x <- 5
y <- 1:10
``` 
## Operadores lógicos
![](https://i.imgur.com/bzMFkf1.png)
```r 
! # não
& # e
| #ou
== # "igual"
> # maior
< # menor
>= # maior ou igual
<= # menor ou igual
=! # diferente
TRUE
FALSE    
```

## Estrutura de dados
![](https://i.imgur.com/j1dTecR.png)


# Indexacao por posicao dos elementos
#### Vetores
É um conjunto de dados ordenados em linha.
```r
a2 <- c(10,20,30)
a2
a2[3]

a4 <- c("porque", "o", "gato" ,"e" ,"nosso" ,"amigo")
a4
a4[3]
```
#### Matrizes
É um conjunto de dados que possuem coordenadas de linha e coluna (tabela) em modo unico.
```r
#matrix[linha , coluna] é para indexar matrizes
d1 <- matrix(data=1:12,nrow=4,ncol=3, byrow=TRUE, dimnames = NULL)
colnames(d1) <- c("col1", "col2", "col3")
rownames(d1) <- c("linhaA", "linhaB", "linhaC", "linhaD")
d1

d2<-matrix(c("nao", "atire", "o", "pau", "no", "gato", "porque", "o", "gato" ,"e" ,"nosso" ,"amigo"), ncol=3, nrow=4, byrow=T)
d2

d2[1, 2] # me retorna o elemento de posição [1,2]
d2[,3] # me retorna a coluna 3
d2[,-3] # me retorna tudo, exceto a coluna 3

d1[c(1,3),] # me retorna a linha 1 e 3
d1[c(1:3),] # me retorna as linhas 1 até a 3
d1[c(1,3),]<-0 # input de 0 na linha 1 e 3
````

## Vetores lógicos
````r
d1 > 5
d1 >= 5
d1 ==5
d2 == "gato"

which(d1>5) #retorna a posição dos elementos indicados

posicoes<-which(d1>5, arr.ind = T) # não me dá os valores, me dá as posições desses valores!! sensacional!

````
## Data Frame
Data frames são matrizes mais gerais onde colunas podem ser compostas por diferentes tipos de objetos (numérico, lógico, categórico)
````r
dados<-data.frame(d1, d2)
dados

dados[,3]
dados[,5] #falar sobre ordem alfabética imposta no R.
dados[3,6]

#DATA FRAME: INDEXAÇÃO PELOS COMPONENTES
#indexacao por nome das variaveis (apenas colunas)
dados$X3
dados$X3[3]
````

# Trabalhando com um data.frame do próprio R
````r
randu
sum(randu$x > 0.5)

dados1<-randu[,]
colnames(dados1)<-c("largura", "altura", "comprimento")
dados1$largura > 0.5
mean(dados1$largura[dados1$largura > 0.5])
````
# Qual a posicao dos valores da coluna "largura" que sao maiores do que 0.5?
````r
which(dados1$largura > 0.5) 
````
# Quantos valores são maiores do que 0.5?
````r
length(which(dados1$largura > 0.5))

dados1[which(dados1$largura > 0.5),] # exibe quais dados da coluna largura (dados1$largura>0,5) sao maiores que 0,5 e de todas as linhas.

dados1[which(dados1$largura >0.1 & dados1$altura < 0.7),] #quais dados sao assim

dados1[-which(dados1$largura >0.1 & dados1$altura < 0.7),] # quais dados (-) os que são assim, nessa condição.
````
### Listas:
São objetos que podem armazenar objetos de dados de tipos diferentes. É possível incluir data.frames, arrays, matrizes, vetores, fatores e mesmo listas em uma lista.
```r
generos <- factor(c("Masculino", "Feminino", "Indefinido")) #Fator com gêneros
vetorValores <- 1:12 #Dados

head(x = mtcars, n = 10) # Carrega as 10 primeiras linhas do data.frame mtcars (carros) da base do R (vem na instalação do R) , se colocar tail() carrega as 10 últimas
```
## Cria lista com os objetos
```r
lista <- list(vetorValores, generos, head(x = mtcars, n = 10))
lista
```
## Acessando os dados
```r
#Acessa o segundo carro (base mtcars)
lista[[3]][2,]
``` 

# Plotagem de gráficos e funções estatísticas
## Pacotes do R
```r 
# Instalando pacotes
install.packages("ggplot2")
install.packages("gcookbook")

# Carregando pacotes instalados
library("ggplot2")
library("gcookbook")
```

## Gráficos

### Scatterplot
```r 
plot(mtcars$wt, mtcars$mpg)
qplot(mtcars$wt, mtcars$mpg)

```
![](https://i.imgur.com/FyDDWke.png)

```r 
#Tipos de pontos diferentes
ggplot(heightweight, aes(x=ageYear, y=heightIn)) + geom_point(shape=3)

#Mapeando uma variavel continua por cor ou tamanho
heightweight[,c("sex", "ageYear", "heightIn", "weightLb")]
ggplot(heightweight, aes(x=ageYear, y=heightIn, size=weightLb)) + geom_point()

ggplot(heightweight, aes(x=ageYear, y=heightIn, colour=weightLb)) + geom_point()
```


### Gráfico de linhas
```r 
plot(pressure$temperature, pressure$pressure, type ="l")
points(pressure$temperature, pressure$pressure)

qplot(pressure$temperature, pressure$pressure, geom = c("line", "point"))

#Gráfico de área
ggplot(uspopage, aes(x=Year, y=Thousands, fill=AgeGroup)) + geom_area()
ggplot(uspopage, aes(x=Year, y=Thousands, fill=AgeGroup)) + geom_area(colour="black", size=2, alpha=.4)+ scale_fill_brewer(palette="Blues", breaks=rev(levels(uspopage$AgeGroup)))
```

### Gráfico de barras
```r 
barplot(BOD$demand, names.arg = BOD$Time, xlab = "Eixo X", ylab = "Eixo Y")
ggplot(pg_mean, aes(x = group, y = weight)) + geom_bar(stat = "identity")

#Colorindo grafico de barras

upc <- subset(uspopchange, rank(Change)>40)
upc
ggplot(upc, aes(x=Abb, y=Change, fill=Region)) + geom_bar(stat="identity")

ggplot(upc, aes(x=reorder(Abb, Change), y=Change, fill=Region)) + geom_bar(stat="identity", colour="black") + scale_fill_manual(values=c("#669933", "#FFCC66")) + xlab("State")

#Colorindo barras 
csub <- subset(climate, Source=="Berkeley" & Year >= 1900)
csub$pos <-csub$Anomaly10y >= 0
csub
ggplot(csub, aes(x=Year, y=Anomaly10y, fill=pos)) + geom_bar(stat="identity", position="identity")

#Colorindo barras positivas e negativas
ggplot(csub, aes(x=Year, y=Anomaly10y, fill=pos)) + geom_bar(stat="identity", position="identity", colour="black", size=0.25) + scale_fill_manual(values=c("#CCEEFF", "#FFDDDD"), guide=FALSE)
```

### BoxPlot
```r 
plot(ToothGrowth$supp, ToothGrowth$len)
qplot(ToothGrowth$supp, ToothGrowth$len, geom = "boxplot")
boxplot(len~supp+dose, data = ToothGrowth)
```

### Funções Curvas
```r 
curve(x^3 - 5*x, from= -4, to = 4)
teste <- function(xvar) {
1/(1 + exp(-xvar + 10))
}
curve(teste(x), from = 0, to = 20)
curve(1-teste(x), add = TRUE, col = "red")
```
### Editando legendas
```r 
p <- ggplot(PlantGrowth, aes(x=group, y=weight, fill=group)) + geom_boxplot() + scale_fill_brewer(palette="Pastel2")

p = theme(legend.position="top")
p = theme(legend.position=c(1,0))

p <- ggplot(PlantGrowth, aes(x=group, y=weight, fill=group)) + geom_boxplot()
p
p+labs(fill="Condicao")

p <- ggplot(PlantGrowth, aes(x=group, y=weight, fill=group)) + geom_boxplot()
p + scale_fill_discrete(labels=c("Controle", "Tratamento1", "Tratamento2"))

```

# Uso do R como ferramenta para estatística
## Obtenção de dados

> Link para download dos conjuntos de dados: https://drive.google.com/drive/folders/1Up7qIFrxjaAlCkdOQZpNrEM_JOYIQvsZ?usp=sharing

##### Paises:
> Area, tamanho populacional, taxas de nascimento e óbito, expectativa de vida e forma de governo de 249 países

##### dados_politicos:
> Conjunto de dados políticos e institucionais de 36 países 

```r 
#Carregando texto separado por tabulação (.tsv ou .txt)
t <- read.table(f, header = TRUE, sep = "\t", stringsAsFactors = FALSE)
head(t)
tail(t)

#Carregando texto separado por vírgula (.csv)
v <- read.table(f, header = TRUE, sep = ",", stringsAsFactors = FALSE)
head(v)
tail(v)

#Carregando arquivo do excel (.csv)
install.packages("readxl")
library("readxl")
e <- read_excel(f, sheet = 1, col_names = TRUE)
head(e)
tail(e)
str(e)

# OU 
install.packages("XLConnect")
install.packages("XLConnectJars")
library("XLConnect")
library("XLConnectJars")
e1 <- readWorksheetFromFile(f, sheet = 1, header = TRUE)
head(d)

#Criando um arquivo excel no R
writeWorksheetToFile(e2, e, sheet = "myData", clearSheets = TRUE)
```
### Explorando os dados
```r 
d <- read.csv("paises.csv", header = TRUE, sep = ",", stringsAsFactors = FALSE)
head(d)
summary(d)
names(d)

#Como saber a densidade populacional dos países?
d$density <- d$population/d$area

#Quais são os 10 países com maior densidade populacional?
d <- d[order(-d$density), ]
d[1:10, ]

#E os países com menor densidade populacional?
d <- d[order(d$density), ]
d[1:10, ]

    
#Inserindo linha de média e estimativa de distribuição
par(mfrow = c(1, 1))  # Estabelece um painel e redesenha o histograma acima de log(Tamanho populacional)
hist(log(population), freq = FALSE, col = "white", main = "Histograma com média e densidade", 
    xlab = "log(Tamanho populacional)", ylab = "Densidade", ylim = c(0, 0.2))
abline(v = mean(log(population), na.rm = TRUE), col = "blue")
lines(density(log(population), na.rm = TRUE), col = "green")
detach(d)
```
### Medidas de tendência e variância
> São essenciais para analises descritivas e teste de hipótese
##### Conceitos importantes:
* População: Conjunto com todos os dados do conjunto de dados;
* Amostra: Uma ou mais observações da população;
* Parâmetro: Uma característica mensurável na população;
* Estatística: Uma característica mensurável na amostra.

#### Medidas de tendência
* Moda: Valor mais comum observado;
* Mediana: Valor medio em uma seria ordenado de valores;
* Média: Soma de todos os valores, divido pela quantidade de valores

#### Medidas de disperção
* Amplitude: Diferença entre o máximo e mínimo;
* Interquartil: 25th até 75th quartil;
```r 
summary()
```

## Conceitos Estatísticos
* O R², é uma medida de ajuste de um modelo estatístico linear, como a regressão linear, em relação aos valores observados. Quanto maior o R², mais explicativo é o modelo, melhor ele se ajusta à amostra.

* O p-valor é a evidência contra uma hipótese nula. Quanto menor o p-valor, mais forte é a evidência de rejeição da hipótese nula.


![](https://i.imgur.com/qN4PQt0.png)


## Regressão
![](https://i.imgur.com/c9YJ5Da.png)
###### Mesma regressão linear e R-square de 0,816.

Dado que uma maior area disponivel permite o desenvolvimento das populacoes residentes e introducao de novas especies. Coletamos dados da riqueza de bromélias em paredoes rochosos na serra do mar e gostaríamos de verificar qual a relacao entre a Área do paredao e o numero de especies presentes.
```r
#importar dados
dados=read.table('dados_regressao.txt', header=T, dec=',')
summary(dados)

#verifica-los graficamente
plot(density(dados$area))
plot(density(dados$riqueza))

plot(dados$area, dados$riqueza, bty="l", ylab="Riqueza", xlab="Área")

#efetuar teste
teste=lm(riqueza~area, data=dados)
summary(teste)
anova(teste)

### gráfico final - opcao I
par(mar=c(4,4,3,1), family="serif", font.axis=1)

plot(dados$area,dados$riqueza, bty="l", ylab = "Espécies de bromélias (S)", xlab= "Área do paredãoo rochoso (km²)")
# reta da estimativa
abline(a=6.779, b=25.818) 

# equacao da reta (não é necessário, mas fica legal!)
text(1, 20,"Y=6.779 + 25.818 * X")
# resultados modelo (não é necessário, mas fica legal!)
text(1, 21.7,expression(R^2==~"0.78;"~F["(1,43)"]==~"161.4;"~p<"0.0001"))
````
### Reportando o resultado
###### Existe uma maior riqueza de bromélias em paredões maiores (R2=0,78; gl=43; p<0,001). A área do paredão explica 78% da variação na riqueza de bromélias.


### Correlação
> Dado que o cerrado possui espécies arbóreas com diversas caracteristicas morfológicas e anatômicas. Há correlação entre a massa e o volume de madeira obtido em uma área de cerrado?
```r
#importar os dados
dados<-read.table("dados_correlacao.txt", header=T, dec=",")
summary(dados)

#verificar gráficamente
plot(density(dados$massa))
plot(density(dados$volume))

par(mar=c(5,4,3,2), family="serif", bty="l", cex.axis=1.3, cex.lab=1.2,  font.axis=1)

plot(dados$massa, dados$volume, bty="l", yaxp= c(0,60,10), ylim=c(0,60), ylab="Volume", xlab="Massa")

#efetuar teste
cor.test(dados$massa,dados$volume,method="pearson",alternative="two.sided")
```
## Regressão
>Dado que uma maior area disponível permite o desenvolvimento das populações residentes e introdução de novas espécies. Coletamos dados da riqueza de bromélias em paredões de rocha na Serra do mar e gostaríamos de verificar qual a relacao entre a área do paredao e o número de espécies presentes.
```r
#importar dados
dados=read.table('dados_regressao.txt', header=T, dec=',')
summary(dados)

#verifica-los graficamente
plot(density(dados$area))
plot(density(dados$riqueza))

plot(dados$area, dados$riqueza, bty="l", ylab="Riqueza", xlab="Área")

#efetuar teste
teste=lm(riqueza~area, data=dados)
summary(teste)
anova(teste)

### grÃ¡fico final - opcao I
par(mar=c(4,4,3,1), family="serif", font.axis=1)

plot(dados$area,dados$riqueza, bty="l", ylab = "Espécies de bromélias (S)", xlab= "Área do paredãoo rochoso (km²)")
# reta da estimativa
abline(a=6.779, b=25.818) 

# equacao da reta (não é necessário, mas fica legal!)
text(1, 20,"Y=6.779 + 25.818 * X")
# resultados modelo (não é necessário, mas fica legal!)
text(1, 21.7,expression(R^2==~"0.78;"~F["(1,43)"]==~"161.4;"~p<"0.0001"))
````