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
sqrt(144)
## [1] 12
prod(1,2,5,6,8)
## [1] 480
sum(5,1,10,52,25,89)
## [1] 182
log(25)
## [1] 3.218876
abs(-123*562)
## [1] 69126
factorial(5)
## [1] 120
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;
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.
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!
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"
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
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
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.
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.