1) O R é um programa estatístico de código aberto que permite análise de dados através de pacotes. 2) Os usuários podem criar e compartilhar pacotes e funções no site do R. 3) O R usa objetos como vetores, matrizes e data frames para armazenar e manipular dados.
Introdução ao programa R: estrutura, objetos e manipulação de dados
1. 1) Como trabalha o Programa
R é apenas um kernel, um núcleo com funções básicas e algumas mais avançadas.
O programa é totalmente aberto, permitindo ao usuário: 1) alterar seus códigos, 2) criar
seus próprios códigos.
Por ser um software livre contribuído, os usuários disponibilizam seus códigos nos site
do programa: http://www.r-project.org/
A maior parte dos modelos, testes de hipóteses e cálculos diversos de nosso interesse
estão algum pacote específico.
Sua lógica segue a de criação de linhas de comando (programação) e não de uso do
mouse.
Definição: Um pacote é um conjunto de funções que servem a um problema comum.
Assim, por exemplo, temos o pacote “geoR”, criado pelo Professor Paulo Justiniano,
que é um conjunto de funções com o objetivo de analisar dados espaciais à luz da teoria
Geoestatística.
Temos também as chamadas “tasks views”.
Definição: Uma task view é uma coletânea de pacotes de uma determinada área.
Desta forma, temos, por exemplo, a task view econometrics que compreende a maior
parte dos pacotes que seriam utilizados por um econometrista.
O programa, diferentemente do Stata ou SPSS, usa objetos (o e-views é um exemplo de
programa que usa objetos).
Definição: Um objeto é argumento de classe reconhecida pelo programa. Podemos
estabelecer quase tudo como um objeto no R o que lhe confere uma grande vantagem
em relação aos demais programas. Para criar um objeto usamos a seguinte estrutura:
meu_objeto = minha_função ou
meu_objeto <- minha_função
Na maioria dos programas os arquivos contêm apenas os dados. Aqui é possível salvar
tudo em um arquivo: dados, modelos estimados, funções, testes de hipóteses e, até
mesmo, texto no formato string (no e-views podemos salvar uma gama de objetos mas
extensão de objetos .
Classes de objetos:
• Vetores
2. • Matrizes
• Arrays: objeto que combina outros objetos de dimensões distintas como, por
exemplo, dois vetores. O Array é, portanto, uma matriz. Um tipo específico de
matriz.
• Listas: Uma coletânea de Objetos (pense na lista como um armário onde você
guarda diferentes tipos de roupas cada uma em um cabide).
• Data Frames: É uma lista de variáveis de mesmo tamanho e com nomes para
cada coluna. Tipo mais comum de armazenamento de dados.
Podemos, ao invés de digitar os comandos diretamente no console, usar os Scripts.
Definição: Scripts são arquivos de texto (podem ser abertos em editor de texto padrão,
como o word pad) com extensão “.r”.
2) Uso da ajuda
O programa conta com uma ajuda bastante útil.
Para chamar a ajuda basta coloca o caractere “?” na frente daquilo que se quer obter
ajuda.
Exemplo:
? vector
A estrutura acima me retorna a ajuda sobre vetores. Essa sintaxe só trará resultado se
houver uma função com a sintaxe exatamente igual à sua pergunta.
Desta forma, se eu digitar:
?coefficient
Não haverá retorno pois não existe em minha base sintaxe igual a “coeficient”.
Mas se meu objetivo é fazer um busca genérica digito:
??coefficient
Essa sintaxe me retorna todas as funções que têm, em sua ajuda, o termo digitado.
Além disso, podemos buscar ajudar nos fóruns. Eles são muito úteis e realmente obtêm-
se resposta.
3. Um fórum muito interessante é: http://www.nabble.com/R-f13819.html
3) Manipulações simples
3.1) O caractere precedente # denota texto:
# blablabla
3.2) Operações com escalares (funções de calculadora)
y1 = 2
y2 = 3 + 2
y3 = 3/5
y4 = 3*5
y5 = 10^3.5
y6 = log(100) # log é na base natural e, ou seja, log aqui é na verdade ln
Se eu quiser log em bases diferentes é só proceder da seguinte forma:
meu_objeto = log(logaritimando, base)
y6.1 = log(9,3) # log de nove na base três. Sabemos que isso é dois.
Alguns logs já possuem sintaxe própria:
y6.2 = log2(9) # log na base 2
y6.3 = log10(9) # log na base 10
Temos ainda:
meu_objeto = log1p(x).
Isso é equivalente à ln(1+x). Observe que x tem de obedecer à restrição que |x|< 1.
y6.4 = log1p(-0.5)
y7=exp(1) # me retorna 2,718282...
y8 = exp(2) # o equivalente a e² = 7.389056
y9 = pi # 3,1416...
Posso estabelecer objetos dependentes de outros objetos usando os operadores acima:
z1 = y1 + y2
z2 = (y1/y2)*y4
z3 = (log(y4)^y1)/y6
Podemos checar quantos objetos estão abertos:
ls()
4. Podemos remover alguns objetos usando o comando
rm(z1,z2,z3)
ou podemos remover todos os objetos usando:
rm(list=ls())
3.3) Vetores
Podemos criar vetores através de três tipos:
1) por meio de sequências numéricas
2) por meio de combinações de números (imputação direta)
3) por meio de combinações de objetos (imputação direta)
3.3.1) Vejamos o tipo 1
Quando crio um objeto com a sintaxe igual a
y = seq(1,8) ou y = seq(1:8)
tenho nas mão a sequência:
1 2 3 4 5 6 7 8
A pergunta baixo deve me responder TRUE
is.vector(y)
Mas se fizermos:
y = seq(1:8,4) # pegamos os quatro primeiros números da sequência
y = seq(1,8,length.out=11) # estou criando um vetor com 11 elementos que vai de 1 a 8
(1.0, 1.7, 2.4, 3.1, 3.8, 4.5, 5.2, 5.9, 6.6, 7.3, 8.0)
y = seq(1,8,by=3) # uma sequência que se inicia em 1, não ultrapassa 8 e altera-se a
cada 3 unidades.
(1, 4, 7)
Obviamente, a estrutura abaixo retornará um erro pois não é possível obter um intervalo
contido em em [1,8] com onze elementos que variam de três em três:
5. y = seq(1,8,by=3,length.out=11)
Por fim, se fizermos algo do tipo
y=seq(1,1,length.out=10)
teremos um vetor de constantes (neste caso 1) de dimensão 10
3.3.2) Agora o tipo 2: combinações de números (imputação direta)
Se criarmos objetos do tipo:
meu_objeto = c(valor_1, valor_2, ...., valor_n), criamos um vetor de dimensão N.
v1 = c(1,2,3,4,5) # vetor de um a cinco
v2 = c(10, 2:8) # vetor cujo primeiro elemento é 10 e os demais uma sequência de 2 a 8
(10, 2, 3, 4, 5, 6, 7, 8)
Essa estrutura me permite combinar os tipos de sequências vistas anteriormente:
v3 = c(seq(1,8,by=3), seq(1,1,length.out=10))
Nesse caso temos um vetor de dimensão 13 com os três primeiros elementos iguais a
1,4 e 7 e o resto igual a um.
Posso ainda criar vetores de letras:
letras = letters[1:10] # me retorna as 10 primeiras letras do alfalbeto.
e posso combinar isso aí:
v4 = c(letters[1:10], letters[1:10])
("a", "b", "c", "d", "e", "f", "g", "h", "i", "j","a", "b", "c", "d", "e", "f", "g", "h", "i", "j")
3.3.3) Vetores por meio de combinações de objetos
Se tivermos dois objetos vetoriais podemos criar um vetor a partir deles:
v5 = c(v4, v2)
3.4) Álgebra de Vetores no R
6. Aqui vamos ver as operações básicas de soma, subtração, divisão e multiplicação de um
vetor por um outro vetor e por um escalar ou operações diretas no vetor (log,
exponenciamento)
3.4.1) Álgebra de Vetores com escalares
Se fizermos qualquer operação de um vetor com um escalar teremos essa operação
aplicada a todos os elementos do vetor:
k1 = v1 + 2, teremos:
=+
7
6
5
4
3
2
5
4
3
2
1
k2 = v1*2, teremos:
=
10
8
6
4
2
2*
5
4
3
2
1
3.4.2) Operações diretas nos Vetores
Podemos tirar log e raiz dos vetores (desde que não haja valores negativos no vetor).
Podemos exponenciá-los também.
k3 = log(k2)
k4 = k2^0.5
3.4.2) Operações de vetores com Vetores com Vetores
3.4.2.1) Soma (subtração)
Se tivermos dois vetores ),( 21 vv
rr
e sua soma, 21 vv
rr
+ , o R realizará esta operação
independentemente da extensão dos mesmos.
Caso os vetores tenham o mesmo length o R somará os elementos diretamente, isso é:
+
+
+
=
+
2313
2212
2111
23
22
21
13
12
11
vv
vv
vv
v
v
v
v
v
v
7. Caso os vetores tenham lengths diferentes, o R somará os elementos de maneira
ordenada porém fazendo um loop até que se esgote a operação para o maior vetor, isto
é, até que todos os elementos do maior vetor tenham sido operacionalizados.
Se tivermos um vetor de comprimento 7 e outro de comprimento 3 a soma ficará:
+
+
+
+
+
+
+
=
+
2711
2613
2512
2411
2313
2212
2111
27
26
25
24
23
22
21
13
12
11
vv
vv
vv
vv
vv
vv
vv
v
v
v
v
v
v
v
v
v
v
3.4.2.2) Produto (divisão, exponenciação)
Para o produto (divisão, exponenciação) a lógica é a mesma! Ou seja, se tivermos
trabalhando com vetores de mesmo comprimento teremos:
×
×
×
=
×
2313
2212
2111
23
22
21
13
12
11
vv
vv
vv
v
v
v
v
v
v
Se o comprimento for diferente teremos:
×
×
×
×
×
×
×
=
×
2711
2613
2512
2411
2313
2212
2111
27
26
25
24
23
22
21
13
12
11
vv
vv
vv
vv
vv
vv
vv
v
v
v
v
v
v
v
v
v
v