![]() | Centro de Métodos Quantitativos Departamento de Ciências Florestais Escola Superior de Agricultura “Luiz de Queiroz” UNIVERSIDADE DE SÃO PAULO | ![]() |
---|---|---|
Curso Relâmpago de R | ||
Aprendendo R em 4668 Palavras |
O objetivo desse curso é fazê-lo adquirir rapidamente certa familiaridade com o software R.
Ao final desse curso você deverá ter atingido dez metas, devendo ser capaz de:
O R não é um “aplicativo” que lhe possibilita através de uma interface gráfica amigável realizar algumas tarefas sem saber exatamente o que está fazendo.
O R é um ambiente de trabalho para realização de análises estatísticas.
Como software, suas características principais são:
Nesse ponto você já deve ter atingido a meta 1. |
---|
Se isso não aconteceu, re-leia o material acima e realize uma profunda meditação. |
Se mesmo assim você não alcançou a meta 1, procure um amigo que entenda de computação para traduzir o que você leu acima. Nesse caso, o curso está deixando de ser relâmpago. |
Do ponto de vista da análise de dados, o R tem uma filosofia que o diferencia radicalmente dos outros softwares estatísticos:
PORTANTO, reflita nos seguintes pontos antes de prosseguir:
Você pode ter certeza que o R não é para você se:
Nesse ponto você já deve ter atingido a meta 2. Mas cuidado com o auto-engano! |
---|
Nesse curso assumimos que você já tem o R instalado e funcionando no seu computador. Não será discutida a instalação, pois essa operação é análoga a instalação de qualquer software no sistema operacional que você trabalha. Para obter o R e informações de como instalá-lo, visite o site: http://www.r-project.org/ .
Para iniciar o R você deve:
Apesar das diferenças de interface devido a o sistema operacional, ao iniciar o R você deverá obter uma janela muito parecida com a seguinte janela:
R version 2.7.0 (2008-04-22) Copyright (C) 2008 The R Foundation for Statistical Computing ISBN 3-900051-07-0 R é um software livre e vem sem GARANTIA ALGUMA. Você pode redistribuí-lo sob certas circunstâncias. Digite 'license()' ou 'licence()' para detalhes de distribuição. R é um projeto colaborativo com muitos contribuidores. Digite 'contributors()' para obter mais informações e 'citation()' para saber como citar o R ou pacotes do R em publicações. Digite 'demo()' para demonstrações, 'help()' para o sistema on-line de ajuda, ou 'help.start()' para abrir o sistema de ajuda em HTML no seu navegador. Digite 'q()' para sair do R. [Área de trabalho anterior carregada] >
O R é uma linguagem interativa, ou seja, que permite ao usuário enviar um comando por vez e receber o resultado1). Para isso, usamos a linha de comando, que tem o sinal “>
” quando o R está pronto para receber um comando.
Os outros dois estados da linha de comando são o de execução e o de espera para a conlusão do comando. No modo de execução não é exibido nenhum sinal e não é possível digitar outro comando. Você só perceberá isso se der um comando que tenha um tempo de execução muito longo. Experimente o seguinte comando:
for(i in 1:10000) prod(1:i)
O estado de espera ocorre quando o usuário envia um comando incompleto, o que é indicado por um sinal de “+
”:
log(1 + ) [1] 0
Na primeira linha, não fechamos os parênteses da função log
e demos enter. O R responde com o sinal de espera (+
), indicando que o comando está incompleto. Digitando o parêntese que falta e apertando a tecla enter novamente o R retorna o resultado do comando, precedido de um índice numérico.
Ao longo desse curso, os exemplos mostrados dentro do R (como o exemplo acima) são totalmente funcionais. Você deveria ser capaz de digitá-los no seu computador, mas os resultados apresentados pelo R nem sempre serão mostrados nos exemplos.
Para tirar o máximo proveito desse curso relâmpago, você deve repetir todos os comandos exemplificados e não ter medo de experimentar variações dos exemplos apresentados.
Se você voltar à mensagem inicial que o R apresenta, verá que ele já lhe ensina alguns comandos:
license
2) detalha as condições de distribuição do R.contributors
lista a equipe do time-cerne de desenvolvimento.citation
ensina como citar o R em trabalhos acadêmicos.demo
inicia uma sessão interativa de demonstração do R.help
para obter uma página de ajuda on-line.help.start
para iniciar um navegador de internet com as páginas de auxílio.q
é o comando para encerrar a sessão e sair do R ( no inglês q = quit ).
Da mesma forma que pessoas pouco letradas pensam que pessoas cultas possuem dicionário só para enfeitar a estante de livros e que raramente os utilizam, os iniciantes no R tendem a pensar que a função help
é para iniciantes.
Ledo engano!! Até os maiores experts em R utilizam o comando help
com frequência, pelo simples fato que a quantidade de funções e comandos no R é tão grande que é humanamente impossível alguém conhecer todos eles e com todos os seu detalhes.
Use e abuse da função help
. Para obter ajuda da própria função utilize o comando:
help( help )
Outros exemplos:
help( "*" ) # auxílio sobre o símbolo "*" help( sin ) # auxílio sobre a função "sin" = seno ?sin # variante da função "help" help( datasets ) # auxílio sobre os conjuntos de dados (datasets) que vêm com o R
Como foi dito, no R tudo é considerado um objeto. Até mesmo as funções que você vem utilizando são objetos.
Para ver um objeto no R, basta digitar o seu NOME. O nome de uma função é o comando sem os parênteses:
help q citation
No R é fácil criar objetos numéricos3):
x = 2 x y = 7 y z = x * y z w = x - y w
Vejamos alguns exemplos com objetos vetoriais:
k = c(1.3, -5, 6.7, 4.8) k x * k m = c(0, 1, 1, 0, 1, 1) m m * k
Você deve imaginar que ao iniciar uma sessão do R e criar uma série de objetos, você está fazendo isso numa ÁREA DE TRABALHO (workspace).
Para saber quais objetos você criou no seu workspace use a função:
ls()
Para apagar os objetos indesejados, utilize a função rm
, fornecendo os objetos que você deseja apagar:
rm(x, y, z, w) ls()
É importante lembrar que ao criar os objetos, o R não grava automaticamente o workspace no seu disco. Fica tudo na memória do computador. Basta uma interrupção momentânea de energia e você perde tudo. Por isso, é importante lembrar de periodicamente gravar o seu workspace, principalmente nas sessões mais longas:
save.image() # grava o seu workspace com o nome genérico: ".RData" save.image(file="minha_sessao_inicial_de_R.RData") # grava o seu workspace com o nome indicado
Lembre-se que na maioria dos sistemas operacionais, arquivos cujo o nome se inicia com um ponto (como “.RData”) são arquivos ocultos!
Nesse ponto você deve ter alcançado a meta 3. |
---|
Inseguro? Experimente criar uma nova área de trabalho, criando variações das operações acima e gravando o workspace. Inicie uma nova sessão no workspace que foi gravado! |
O R é um ambiente para análise de dados. Não é um ambiente para digitação ou organização dos seus dados.
O aplicativo mais utilizado para digitar e organizar os dados são as planilhas eletrônicas, como o Excell e assemelhados. As planilhas conseguem gravar os dados em vários formatos, além do formato nativo da planilha4).
No caso do R, o melhor é gravar os dados no formato CSV (CSV = Comma-Separeted Values).
O formato CSV consiste em uma única tabela (spreadsheet) da sua planilha eletrônica, onde os valores são gravados linha-a-linha, sendo que numa mesma linha os valores são separados por vírgulas.
O formato UNIVERSAL de tabela de dados para análise estatística é o seguinte:
No formato CSV, cada linha será uma observação e as colunas serão separadas por vírgulas.
Como exemplo trabalharemos com um arquivo que apresenta três parcelas, cada uma em um “caxetal” diferente. As primeiras linhas desse arquivo formam a seguinte tabela: <csv> “local”,“parcela”,“arvore”,“fuste”,“cap”,“h”,“especie” “chauas”,1,1,1,210,80,“Myrcia sulfiflora” “chauas”,1,3,1,170,80,“Myrcia sulfiflora” “chauas”,1,4,1,720,70,“Syagrus romanzoffianus” “chauas”,1,5,1,200,80,“Tabebuia cassinoides” “chauas”,1,6,1,750,170,“indet.1” “chauas”,1,7,1,320,80,“Myrcia sulfiflora” “chauas”,1,8,1,480,160,“Tabebuia cassinoides” “chauas”,1,9,1,240,140,“Tabebuia cassinoides” </csv>
Grave o arquivo no diretório que estiver trabalhando com o R: exemplo-caixeta.csv.
Esse arquivo pode ser visualizado em qualquer editor de textos, pois o formato CSV é um formato texto:
"local","parcela","arvore","fuste","cap","h","especie" "chauas",1,1,1,210,80,"Myrcia sulfiflora" "chauas",1,3,1,170,80,"Myrcia sulfiflora" "chauas",1,4,1,720,70,"Syagrus romanzoffianus" "chauas",1,5,1,200,80,"Tabebuia cassinoides" "chauas",1,6,1,750,170,"indet.1" "chauas",1,7,1,320,80,"Myrcia sulfiflora" "chauas",1,8,1,480,160,"Tabebuia cassinoides" "chauas",1,9,1,240,140,"Tabebuia cassinoides"
Note nos seguintes pontos:
Para ler esse arquivo no R, basta utilizar a função read.csv
.
Cuidado!! Se você digitar simplesmente:
read.csv(file="exemplo-caixeta.csv")
as linhas do arquivo aparecerão na tela mas não serão gravadas em nada.
É necessário gravar a leitura do arquivo num objeto:
cax = read.csv(file="exemplo-caixeta.csv")
Agora se você digitar o nome do objeto:
cax
o R lhe apresentará todas as 198 linhas de dados!!
Para visualizar apenas as primeiras linhas do dataframe (objeto de dados) use o comando head
:
head(cax) local parcela arvore fuste cap h especie 1 chauas 1 1 1 210 80 Myrcia sulfiflora 2 chauas 1 3 1 170 80 Myrcia sulfiflora 3 chauas 1 4 1 720 70 Syagrus romanzoffianus 4 chauas 1 5 1 200 80 Tabebuia cassinoides 5 chauas 1 6 1 750 170 indet.1 6 chauas 1 7 1 320 80 Myrcia sulfiflora
Um grande problema surge quando se utiliza uma planilha eletrônica onde o separador decimal também é a vírgula.
Nesse caso, o arquivo CSV será uma grande confusão, pois a vírgula não só delimitará cada coluna da tabela de dados como também indicará o separador decimal do números que não forem inteiros.
Dois aspectos devem ser considerados:
O arquivo exemplo-caixeta-2.csv é um exemplo de arquivo CSV com ponto-e-vírgula como separação de valores. No R, esse arquivo deverá ser lidos com o argumento sep
definindo o símbolo usado na separação de valores:
cax2 = read.csv(file="exemplo-caixeta-2.csv",sep=";") head( cax2 )
A página de auxílio da função read.csv
detalha diferentes formas de leitura de dados que podem ser utilizadas no R.
O comando head
sempre apresenta as primeiras linhas da tabela de dados (data frame).
Se quisermos apenas uma variável (coluna) desse data frame, basta unir o nome do data frame (cax
) ao nome da coluna desejada com o símbolo especial “$”:
cax$local cax$cap
Novas variáveis (colunas) podem ser criadas também utilizando o símbolo “$”. Por exemplo:
pi # constante universal PI [1] 3.141593 cax$dap = (cax$cap/10) / pi # cálculo do DAP (cm) a partir do CAP (mm) cax$g = (pi/4) * (cax$dap/100)^2 # cálculo da área transversal (m2) a partir do DAP (cm) cax$vol.cilindrico = cax$g * (cax$h/10) # cálculo do volume cilíndrico a partir da área transv. e da altura (dm) head(cax)
Note que:
pi
no R está reservada para representar a constante universal pi.cax$dap =
estamos criando uma nova variável (coluna) no dataframe cax
com o nome dap
, cujos valores serão o resultado da expressão matemática apresentada após o sinal de igualdade. O mesmo acontece com as colunas g
e vol.cilindrico
_.Não há como apagar as variáveis de dentro de um data frame! É necessário criar um novo data frame apenas com as variáveis desejadas, mas isso não é assunto para um curso relâmpago!
As metas 4 e 5 foram atingidas? |
---|
Se você está inseguro, repita todos os passos dos itens 4 e 5 com os seus próprios dados! |
A forma mais simples de descrever quantitativamente observações é agrupá-las em categorias e contar quantas observações pertence a cada categoria.
No R a forma mais direta de obter contagens (frequências) é através da função table
. Tomando como exemplo o dataframe cax
, podemos nos perguntar quantas árvores foram observadas em cada caixetal (variável local
):
table(cax$local)
Também é interessante saber o número de árvores por local
e parcela
:
table(cax$local, cax$parcela)
Observação: note que os argumentos de uma função são separados por vírgula (,) |
Podemos verificar a abundância de cada espécie (especie
) em cada caixetal (local
):
table( cax$especie, cax$local )
Dados de contagem também podem ser apresentado na forma de gráficos de barra:
barplot( table(cax$local) )
Observação: veja que no R você pode construir um comando chamando função dentro de função em vários níveis. No exemplo acima, o resultado da função table foi colocado como argumento para a função barplot . |
Formas alternativas de construir esses gráficos são:
barplot( table(cax$fuste) ) plot( table(cax$fuste) )
Um gráfico de abundância das espécies presentes nos três caixetais:
par( mar=c(5,10,4,2) ) # Define margens do gráfico, aumentando a esquerda barplot(sort(table(cax$especie)), horiz=T, las=1, xlab="Abundância") # Gráfico horizontal c/ nomes horizontais dev.off() # Fecha a janela gráfica
Observação: no exemplo acima temos um comando com três funções aninhadas (table dentro de sort , que está dentro de barplot ). |
Embora seja convencional apresentar o gráfico de abundância com barras, um gráfico na forma de pontos é de construção mais simples, sendo mais informativo:
dotchart( sort(table(cax$especie)), xlab="Abundância" )
A função summary
retorna uma conjunto de estatísticas descritivas (sumário) de todas as variáveis de um data frame de acordo com o seu tipo:
> summary(cax)
Note que para as variáveis parcela
e arvore
esse sumário não faz sentido, uma vez que elas são simples variáveis indentificadoras da parcela e da árvore6).
Mas o sumário também pode ser obtida para cada variável individualmente:
summary(cax$dap) summary(cax$h) summary(cax$especie)
O R também possui funções para as diversas estatísticas descritivas de variáveis quantitativas:
Estatística Descritiva | Nome da Função |
---|---|
Média | mean |
Mediana | median |
Mínimo | min |
Máximo | max |
Amplitude de variação | range |
Quartis e quantis | quantile |
Distância Interquartil (Inter Quarter Range) | IQR |
Variância | var |
Desvio padrão (Standard Deviation) | sd |
Desvio abosluto mediano (Mean Absolut Deviation) | mad |
mean(cax$dap) mdap = mean(cax$dap) mdap median(cax$dap) min(cax$dap) max(cax$dap) range(cax$fuste) quantile(cax$h) IQR(cax$h) var(cax$h) sd(cax$h)
O R é um ambiente de trabalho onde a análise gráfica de dados é de fácil execução. Entretanto, é necessário diferenciar dois tipos de gráficos:
Vejamos alguns gráficos para análise exploratória de dados.
Histogramas são gráficos tradicionais na análise exploratória de dados, pois nos apresentam um gráfico da distribuição de probabilidade da variável analisada.
t( cax$dap ) hist( cax$h, col="red" ) hist( cax$h, col="blue", probability=T )
Uma possibilidade de gráfico que o R permite é adicionar uma curva de densidade probabilística ao histograma, para melhor estudar o comportamento da variável.
hist( cax$dap, probability=T , col="blue") lines( density(cax$dap) , col="red")
Um gráfico tipo texto análogo ao histograma é o tradicional gráfico de ramo-folha da análise exploratória de dados:
stem(cax$dap) stem(cax$h)
Os boxplots são gráficos de uso frequente para se estudar o comportamento das variáveis. Sua construção no R é direta e simples:
boxplot( cax$dap ) boxplot( dap ~ local, data=cax )
Transformar um gráfico de análise em um gráfico de apresentação demanda o conhecimento sobre as ferramentas gráficas presentes no R:
par( mar=c(5,10,4,2) ) # Altera as margens da janela gráfica boxplot( dap ~ especie, data=cax , horizontal=T, las=1) # Boxplot dev.off() # Fecha a janela gráfica
A função plot
é a função básica para construção de gráficos de dispersão para duas variáveis quantitativas:
plot( cax$dap, cax$h ) scatter.smooth( cax$dap, cax$h )
Você se sente seguro em relação às metas 6 e 7? |
---|
Não? Então utilize os seus próprios dados para calcular estatísticas descritivas e construir gráficos exploratórios . |
Utilizaremos alguns modelos lineares para estudar a relação entre o DAP (variável dap
) e a altura total (variável h
) das árvores dos caxetais.
A função lm
(linear model) é a função utilizada para construir um modelo linear. O primeiro passo é construir um modelo linear gravando-o num objeto na área de trabalho.
hipso1 = lm( formula = h ~ dap, data=cax ) hipso1b = lm( h ~ dap, data=cax )
O primeiro argumento da função lm
é uma fórmula estatística (formula = h ~ dap
) que descreve a variável h
como variável resposta e a variável dap
como variável preditora. Ela deve ser lida da seguinte forma: modele h
como uma função linear de dap
.
O segundo argumento (data=cax
) define que as variáveis da fórmula estão no data frame cax
.
Vejamos o objeto hipso1
:
hipso1
Mas que decepção!! O R não fez nada?
O R fez muita coisa! Ele construiu um modelo linear e o gravou no objeto hipso1
. A questão agora é o que você deseja saber desse objeto que é um modelo linear?
O primeiro interesse é analisar o comportamento dos resíduos do modelo linear, para verificar se o modelo é apropriado aos dados. Para isso basta utilizar a função plot
com o objeto hipso1
.
plot( hipso1 )
O R entra num modo interativo diferente, apresentando sequencialmente, à medida que você tecle <Return>
, um gráfico diferente que lhe permite avaliar o comportamento dos resíduos do modelo. Esses gráficos são os gráficos necessários para se verificar as pressuposições básicas do modelo linear clássico.
E para se fazer inferência sobre as estimativas dos coeficientes de regressão e sobre a qualidade do ajuste do modelo? Se utiliza as funções summary
e anova
:
summary( hipso1 ) anova( hipso1 )
Você pode ajustar quantos modelos você desejar para estudar a mesma relação.
Podemos considerar que a relação entre DAP e altura é linear na escala logarítmica, assim um modelo apropriado seria:
hipso2 = lm( log(h) ~ log(dap) , data=cax) plot(hipso2) summary(hipso2)
Ou então podemos verificar o modelo conhecido na Mensuração Florestal como Modelo Schumacher:
hipso3 = lm( log(h) ~ I(1/dap) , data=cax) plot(hipso3) summary(hipso3)
Alguém aprecia parábolas ?
hipso4 = lm( h ~ dap + I(dap^2) , data=cax) plot(hipso4) summary(hipso4)
Como podemos visualizar todos esses modelos junto com a relação DAP - altura ?
scatter.smooth( cax$dap, cax$h) hipso1 curve( 40.182 + 5.218*x, 0, 26, col="blue", add=T ) hipso2 curve( exp( 3.2031 + 0.5574*log(x) ), 0, 26, col="red", add=T ) hipso3 curve( exp( 4.639 - 1.871/x ), 0, 26, col="darkgreen", add=T ) hipso4 curve( 10.4109 + 11.1879*x - 0.2325*x^2, 0, 26, col="orange", add=T )
A abordagem mais apropriada é consideramos que cada caxetal talvez tenha uma relação altura-DAP diferente:
hipso.plus = lm( h ~ dap * local, data=cax) plot( hipso.plus ) > summary( hipso.plus )
As metas 8 e 9 foram alcançadas? |
---|
Não? Construa mais modelos com os seus próprios dados. |
Bem! Chegamos a nossa meta final: as fontes para continuar se desenvolvendo no R.
Embora ambos sejam semelhantes no conteúdo, o segundo site é mais didático e está mais atualizado.
Essa lista está longe de ser exaustiva!! Existem muitos outros recursos para aprender o R, essas são apenas algumas dicas iniciais.
Dez metas alcançadas? |
---|
Cada meta é um passo. Todo caminho se percorre passo a passo. Continue caminhando! |
Be an useR ! Be happy ! |
João Luís Ferreira Batista
Laboratório de Biometria Ecológica
Centro de Métodos Quantitativos
Departamento de Ciências Florestais
Escola Superior de Agricultura "Luiz de Queiroz"
UNIVERSIDADE DE SÃO PAULO
license()