1 Introdução ao R

De acordo com Landeiro (2011) a maneira de uso mais básica do R é como calculadora. Os operadores matemáticos básicos são:

+ para soma, - subtração, * multiplicação, / divisão e ^ exponenciação

Use parênteses para separar partes dos cálculos, exemplo:

(2+2*(3*3)-(4*4)+(5)^2)
## [1] 29


1.1 Algumas funções do R

  • Raiz quadrada \(\sqrt{144}\)
sqrt(144)
## [1] 12
  • Produtório \(\prod_{i=1}^{N}{x_i}\)
prod(1,2,5,6,8)
## [1] 480
  • Somatório \(\sum_{i=1}^{N}{x_i}\)
sum(5,1,10,52,25,89)
## [1] 182
  • Logaritmo \(\log{x}\)
log(25)
## [1] 3.218876
  • Módulo \({|x|}\)
abs(-123*562)
## [1] 69126
  • Fatorial \({x!}\)
factorial(5)
## [1] 120

2 Objetos no R

Existem muitos tipos de objetos no R, os mais básico são, vetores, matrizes, dataframes, listas e funções, que armazenam dados ou interagem com variáveis.

Para criar um objeto basta atribuir um dado para ser armazenado.
Quais são os tipos de dados?

x <- 10L
y <- 15.1
z <- 4 + 3i
m <- "a"
dia <- "2020-12-01"
data <- as.Date.character(dia) 
print(paste('x é um',typeof(x),'e,',
            'y é um',typeof(y),'e,',
            'z é um',typeof(z),'e,',
            'm é um',typeof(m),'e,',
            'data é um',typeof(data)))
## [1] "x é um integer e, y é um double e, z é um complex e, m é um character e, data é um double"


O sinal <- assinala que o valor 10 será armazenado em x;

  • Os vetores são uma sequência de números ou caracteres colocados juntos.
    c(..,..,..) é a forma de agrupar os dados juntos.
carros <- c("Hyundai HB20", "Chevrolet Onix","Toyota Etios",
            "Renault Sandero","Honda Fit","Fiat Mobi",
            "Renault Kwid", "Volkswagen Gol", "Fiat Argo"
            )

kmporLitro <- c(11.6, 10.8,12.8,
                11.3,9.8,10.4,
                13.1,9.9,14.5)


Note que as letas estão entre aspas.

2.1 Exercício

Vamos calular o juros simples póstecipado da seguinte operação, atribuindo a objetos:
Presente valor: 100 um
Prazo: 36 meses
Taxa igual 12%a.a.

taxa <- 1
q <- 12
t <- 12

TaxaEquivalente <- (taxa/(q/t))/100
presenteValor <- 100
prazo <- 36 
montante <- presenteValor+(presenteValor*TaxaEquivalente*prazo)
juros <- montante-presenteValor
print(paste('o juros é igual a : R$',round(juros,2)))
## [1] "o juros é igual a : R$ 36"
print(paste('A taxa de juros equivalente é',(round(TaxaEquivalente,6)*100),"% ao mês"))
## [1] "A taxa de juros equivalente é 1 % ao mês"

Calcule a taxa esquivalente do exercício anterior, caso fosse por meio de juros compostos. \[ \Bigg[\Bigg( {1+i \over 100}\Bigg)^\frac{q}{t} -1 \Bigg]\times 100\] Ou seja:

\[ \Bigg[\Bigg( {1+12 \over 100}\Bigg)^\frac{12}{12} -1 \Bigg]\times 100\]
Mãos à obra!




3 Operações com vetores

Os vetores permitem diversos tipos de operações,exempolo: * Número de observações * Média * desvio padrão

nobs <- length(kmporLitro)
med <- mean(kmporLitro)
desvp <- sd(kmporLitro)
print(paste('número de observações',nobs, 
            'KM/L médio',round(med,2),
            'Desvio padrão', round(desvp,2)))
## [1] "número de observações 9 KM/L médio 11.58 Desvio padrão 1.6"

É possível acessar os valores dos vetores carros[5]

carros[5]
## [1] "Honda Fit"

Para ter acesso a mais de um valor, basta concatenar dentro dos colchetes

carros[c(1,5,9)]
## [1] "Hyundai HB20" "Honda Fit"    "Fiat Argo"

Para adicionar um valor no vetor, basta adicionar o comando append.

carros <- append(carros, c("Fiat Uno", "Volkswagen Fusca"))
print(carros)
##  [1] "Hyundai HB20"     "Chevrolet Onix"   "Toyota Etios"     "Renault Sandero" 
##  [5] "Honda Fit"        "Fiat Mobi"        "Renault Kwid"     "Volkswagen Gol"  
##  [9] "Fiat Argo"        "Fiat Uno"         "Volkswagen Fusca"

Para remover basta

carros <- carros[-c(10,11)]
print(carros)
## [1] "Hyundai HB20"    "Chevrolet Onix"  "Toyota Etios"    "Renault Sandero"
## [5] "Honda Fit"       "Fiat Mobi"       "Renault Kwid"    "Volkswagen Gol" 
## [9] "Fiat Argo"

Para modificar o valor pode selecionar a posição do elemento

carros[9] <- "Volkswagen Fusca"
print(carros)
## [1] "Hyundai HB20"     "Chevrolet Onix"   "Toyota Etios"     "Renault Sandero" 
## [5] "Honda Fit"        "Fiat Mobi"        "Renault Kwid"     "Volkswagen Gol"  
## [9] "Volkswagen Fusca"

Os objetos salvos podem ser listados.

ls()
##  [1] "carros"          "data"            "desvp"           "dia"            
##  [5] "juros"           "kmporLitro"      "m"               "med"            
##  [9] "montante"        "nobs"            "prazo"           "presenteValor"  
## [13] "q"               "t"               "taxa"            "TaxaEquivalente"
## [17] "x"               "y"               "z"

Para remover algum deles, o comando é rm()

rm(med)

ls()
##  [1] "carros"          "data"            "desvp"           "dia"            
##  [5] "juros"           "kmporLitro"      "m"               "montante"       
##  [9] "nobs"            "prazo"           "presenteValor"   "q"              
## [13] "t"               "taxa"            "TaxaEquivalente" "x"              
## [17] "y"               "z"

4 Operação com matrizes

De acordo com Gouveia (2016) as matrizes podem ser criadas de várias maneiras. A mais simples é pela criação de colunas que são concatenadas posteriormente, com o comando cbind().

x1 <- c(55,70,90,95,70,80,85,90,40,70)
x2 <- c(5,6,4,5,1,1,5,3,5,4)
z<- cbind(x1,x2)
print(z)
##       x1 x2
##  [1,] 55  5
##  [2,] 70  6
##  [3,] 90  4
##  [4,] 95  5
##  [5,] 70  1
##  [6,] 80  1
##  [7,] 85  5
##  [8,] 90  3
##  [9,] 40  5
## [10,] 70  4

As dimensões das matrizes podem ser inspecionadas com o comando dim()

dim(z)
## [1] 10  2

Dez linhas por duas colunas. Os comandos cbind “column bind” e rbind “row bind” também podem ser aplicados as matrizes, porém as dimensões devem ser compatíveis.
No entanto, as matrizes podem ser construídas com a função matrix:

z<- matrix(c(5,10,4,7,8,9),nrow=3)
z
##      [,1] [,2]
## [1,]    5    7
## [2,]   10    8
## [3,]    4    9

Neste caso é preenchido primeiramente as colunas. Mas, é possível preencher primeiro as linhas.

z <- matrix(c(5,10,4,7,8,9),nrow=3, byrow=T)
z
##      [,1] [,2]
## [1,]    5   10
## [2,]    4    7
## [3,]    8    9

O R interpreta as matrizes considerando o modo natural. Soma de duas matrizes.

x <- matrix(c(10, 15, -12, 16,20,3), nrow=3, byrow=T)
a = z+x
a
##      [,1] [,2]
## [1,]   15   25
## [2,]   -8   23
## [3,]   28   12

Subtração de duas matrizes.

b = z-x
b
##      [,1] [,2]
## [1,]   -5   -5
## [2,]   16   -9
## [3,]  -12    6

ATENÇÃO desta maneira a multiplicação de matrizes considera apenas a ordem dos elementos.

primeira <- matrix(c(10,20,30,40,50,60,70,80,90),nrow = 3)
segunda <-  matrix(c(10,20,30,40,50,60,70,80,90),nrow = 3)
MatrizOrdem <- primeira*segunda
MatrizOrdem
##      [,1] [,2] [,3]
## [1,]  100 1600 4900
## [2,]  400 2500 6400
## [3,]  900 3600 8100

A maneira convencional considera que o número de coluna da primeira deve ser igual ao número de colunas da segunda.

resultado <- primeira%*%segunda
resultado
##      [,1] [,2]  [,3]
## [1,] 3000 6600 10200
## [2,] 3600 8100 12600
## [3,] 4200 9600 15000

Para transpor uma matriz o comando é t()

matrizTransposta <- t(a)
a
##      [,1] [,2]
## [1,]   15   25
## [2,]   -8   23
## [3,]   28   12
matrizTransposta
##      [,1] [,2] [,3]
## [1,]   15   -8   28
## [2,]   25   23   12

Para inverter uma matriz o comando é solve()

#segunda <-  matrix(c(15,5,10,32,12,5,7,13,19),nrow = 3)
z <- matrix(c(5,7,9,6), nr=2, byrow=T)
z
##      [,1] [,2]
## [1,]    5    7
## [2,]    9    6
matrizInversa <- solve(z)
matrizInversa
##            [,1]       [,2]
## [1,] -0.1818182  0.2121212
## [2,]  0.2727273 -0.1515152

4.1 Exercício

EMBORA o R já tenha função para cálculo de regressão, neste exercício vamos utilizar matrizes. Para incrementar o estudo vamos gerar sequências aleatórias e repetições. Considerando as seguintes variáveis independentes:

#semente aleatória
#set.seed(123)
constante <- rep(1,100)
consumo <- runif(100,min=8,max=16)
Kilometragem <- runif(100,min=10000,max=100000)
preco <- runif(100,min=20000,max=70000)

As funções runif se refere a geração de números uniformes, sendo o primeiro argumento a quantidade, o segundo o mínimo e o terceiro o máximo. Já rep se refere a repetições, o primeiro argumento é a lista que será repetida e a quantdade de vezes que cada elemento será repetido.
Vamos juntar as matrizes pelo comando column bind.

x <- cbind(constante,Kilometragem,consumo)
head(x)
##      constante Kilometragem   consumo
## [1,]         1     36492.91 11.871739
## [2,]         1     17527.76  8.529753
## [3,]         1     31821.48  9.980142
## [4,]         1     96104.41 10.007152
## [5,]         1     12053.29 13.117746
## [6,]         1     56766.97 11.083159
y <- matrix(preco)

Para calcularmos os coeficientes temos que calcular a seguinte operação: \[b=\bigg(X'X\bigg)^{-1}X'Y\] Então: \(X'\) se refere a matriz x transposta

transposta <- t(x)
transposta[0:10]
##  [1]     1.000000 36492.914329    11.871739     1.000000 17527.759264
##  [6]     8.529753     1.000000 31821.484854     9.980142     1.000000

Multiplicar por \(X\)

tx_x <- transposta%*%x
tx_x
##                constante Kilometragem      consumo
## constante        100.000      5192790     1205.464
## Kilometragem 5192789.677 329744322515 61628422.486
## consumo         1205.464     61628422    15073.102

Inverter a matriz \(\bigg(X'X\bigg)^{-1}\)

inversa = solve(tx_x)
inversa
##                  constante  Kilometragem       consumo
## constante     3.708112e-01 -1.259204e-06 -2.450702e-02
## Kilometragem -1.259204e-06  1.713475e-11  3.064651e-08
## consumo      -2.450702e-02  3.064651e-08  1.900978e-03

Multiplicar a matrix transposta por y \(X'Y\)

tx_y <- transposta%*%y
tx_y
##                      [,1]
## constante         4454865
## Kilometragem 233670649592
## consumo          53942231


E para obter os coeficientes \(\bigg(X'X\bigg)^{-1}X'Y\):

coeficientes <- inversa%*%tx_y
coeficientes
##                      [,1]
## constante    3.571125e+04
## Kilometragem 4.744467e-02
## consumo      5.287336e+02


5 BÔNUS

O R já conta com uma função para cálculo dos OLS sem a necessidade de adicionar pacotes.

df<- as.data.frame(c(preco,Kilometragem,consumo))
modelo <- lm(preco~Kilometragem+consumo ,data = df)
summary(modelo)
## 
## Call:
## lm(formula = preco ~ Kilometragem + consumo, data = df)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -25654 -14772   1289  13823  25347 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  3.571e+04  9.350e+03   3.819 0.000236 ***
## Kilometragem 4.744e-02  6.356e-02   0.746 0.457175    
## consumo      5.287e+02  6.694e+02   0.790 0.431562    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 15350 on 97 degrees of freedom
## Multiple R-squared:  0.0103, Adjusted R-squared:  -0.0101 
## F-statistic: 0.505 on 2 and 97 DF,  p-value: 0.6051

Notadamente, todas as variáveis foram selecionadas de forma aleatória. Mas, não se preocupe, na última parte será realizado uma análise mais aprofundada.

6 Referência

Landeiro (2011).Introdução ao uso do programa R.Instituto Nacional de Pesquisas da Amazônia, Programa de Pós Graduação em Ecologia

Gouveia, L. B. (2016).Uma breve introdução ao R. Exploração prática e exercícios.Universidade Fernando Pessoa. pp.1-68.