A maior rede de estudos do Brasil

Grátis
224 pág.
Estatistica usado o R

Pré-visualização | Página 9 de 50

131 7.4 2.8 6.1 1.9 virginica
132 7.9 3.8 6.4 2.0 virginica
136 7.7 3.0 6.1 2.3 virginica
Entendeu o que foi feito? Selecionamos (com os colchetes), do banco dados as linhas
(primeiro índice dentro dos colchetes, antes da vírgula) onde a variável Petal.Length é > 6, e
todas as colunas (o espaço em branco após a vírgula dentro dos colchetes – segundo índice).
Para terminar, vamos fazer uma brincadeira com o nosso banco de dados. Ele não possui
nenhum valor faltante (missing value). No R, o “símbolo” para missing é “NA” de not available em
inglês. Bem, vamos aproveitar o nosso exercício de seleção para ver como podemos também
substituir valores selecionados por outro. Digamos que houve um engano e que todos os valores
maiores que 6 cm para o tamanho da pétala não são confiáveis e devem ser considerados como
faltantes (esse é um exemplo péssimo na verdade – normalmente nós substituímos valores que
outros sistemas consideram missing por NA, como “-99” ou espaço em branco.) Neste caso a
sintaxe será um pouco diferente:
dados$Petal.Length[dados$Petal.Length>6] <- NA
Explicando devagar: estamos substituindo (com o símbolo <-) os valores da variável
Petal.Length (o primeiro dados$Petal.Length), que são maiores que 6
(dados$Petal.Length>6) por NA. Quer ver se funciona? Tente:
dados$Petal.Length
Repare que a saída é mesmo um vetor com os valores da variável Petal.Length.
Explorando um Data Frame
Vamos agora comparar os tamanhos de pétalas de acordo com 3 grupos: os das espécies
setosa, versicolor e virgínica. Para isso, lançaremos mão de uma função especial:
by(data=dados$Petal.Length, INDICES=dados$Species, FUN=summary)
Essa função é especial porque ela aplica uma outra função (no caso a função summary() –
argumento FUN) a uma variável (argumento data=) estratificado por uma outra variável (argumento
INDICES). Pegou? Repare qual é a saída da função summary(): ela calcula a média, mediana
mínimo, máximo, primeiro e terceiro quartís, além de reportar o número de missings.
Você deve ter notado que é muito trabalhoso digitar o nome do data frame toda vez que a
gente quiser trabalhar com uma de suas variáveis. Para contornar esse problema existe uma função
no R que permite acessar as variáveis diretamente. Vejamos
attach(dados)
Para testar vamos repetir a função by() omitindo o nome do data frame e também o $.
by(Petal.Length, Species, summary)
24
Viu como somos preguiçosos? Nem o nome dos argumentos foram usados neste caso.
Lembre-se que a omissão dos nomes dos argumentos pode causar uma enorme confusão caso você
esqueça a ordem correta (lembra do caso do log?).
Vamos visualizar os dados com um gráfico que a gente já tinha visto anteriormente, que é o
boxplot() com alguns argumentos avançados. Para isso escrevamos:
> boxplot(Petal.Length ~ Species)
Entendeu o que foi feito? O símbolo ~ (til) na função boxplot() funciona como a função
by() que vimos anteriormente, ou seja, visualizamos o peso estratificado pela variável Species 
Você pode adicionar alguns nomes aos gráficos para que ele fique mais apresentável
> boxplot(Petal.Length ~ Species, xlab="Espécie", ylab="Tamanho da
Pétala", main="Tamanho da pétala por especie")
As espécies parecem ter tamanhos de pétalas bastante diferentes. Suas medianas e
distribuições interquartilares são bem diferentes. Para ter uma idéia se essas distribuições são
aproximadamente normais podemos usar histogramas. Vamos tentar
25
setosa versicolor virginica
1
2
3
4
5
6
7
Tamanho da pétala por especie
Espécie
par(mfrow=c(1,3))
hist(Petal.Length[Species=="setosa"])
hist(Petal.Length[Species=="versicolor"])
hist(Petal.Length[Species=="virginica"])
par(mfrow=c(1,1))
Epa! Parece que o nosso “tratamento” para missing values esculhambou o grupo das
virgínicas (que são justamente as que têm um tamanho de pétala maior.)
;-)
Vamos “reiniciar” o nosso objeto dados e ver o que acontece. Faça assim:
detach(dados)
dados<-iris
attach(dados)
par(mfrow=c(1,3))
hist(Petal.Length[Species=="setosa"])
hist(Petal.Length[Species=="versicolor"])
hist(Petal.Length[Species=="virginica"])
par(mfrow=c(1,1))
Melhor assim, né? Repare que as distribuições não parecem ser lá muito aproximadamente
normais para o tamanho da pétala, exceto para as setosas. 
Um detalhe que não deve ter passado despercebido é o uso do operador “==” em vez de um
sinal de igual somente para indicar igualdade. Não se desespere ainda: no R sempre que quisermos
fazer uma comparação, seja numérica, seja com caracter, devemos usar os dois sinais de igual. Ah,
e note também que “virginica” está entre aspas – isso mesmo, quando comparamos com um
caracter, o que está sendo comparado deve estar entre aspas.
Para finalizar esse módulo básico, vamos aplicar um teste estatístico para inferir se o
tamanho das pétalas são significativamente diferentes entre as espécies. Como não estou muito
convencido da normalidade das distribuições, vamos usar um teste não-paramétrico (também
chamado de livre de distribuição.) Esse tipo de teste não assume qualquer distribuição a priori e a
rigor é um teste para saber se as medianas são diferentes. No caso de mais de dois grupos, devemos
lançar mão de um teste bastante popular, chamado teste de Kruska-Wallis:
> kruskal.test(Petal.Length, Species)
 Kruskal-Wallis rank sum test
data: Petal.Length and Species 
Kruskal-Wallis chi-squared = 130.411, df = 2, p-value = < 2.2e-16
Como esperado após a inspeção do gráfico boxplot, de fato existe uma diferença
significativa do nível de variação dos tamanhos de pétalas estratificados pela espécie de flor.
Muito bem. Esse foi o nosso módulo básico para dar uma noção geral e bastante superficial
do R. Para quem estiver interessado em um estudo mais aprofundado do programa, futuramente
disponibilizaremos módulos mais específicos para aprofundar os vários aspectos do R
26
Módulo Entrada e Saída de Dados
Autor: Geraldo Marcelo da Cunha e Antonio Guilherme Fonseca Pacheco
Pré-requisitos: Saber como funcionam e como usar funções e pacotes no R. Saber selecionar
elementos, linhas e colunas em dataframes. 
ATENÇÃO: Este módulo também exige a obtenção de bancos de dados externos, que devem estar
disponíveis junto com o meio de distribuição deste documento (ou seja, se foi em um CD-ROM,
então deve estar em algum diretório desta mídia; se foi via internet deve estar disponível para
download em algum lugar especificado)
Pacotes e arquivos necessários: Pacote foreign; arquivos “oswego.rec”, “iris.sav”.
Saída de Dados
Vamos iniciar a nossa discussão pela saída de dados. Apesar de parecer estranho estudarmos
como o R exporta dados, em vez de como ele os importa, será mais fácil primeiro exportar para
depois então reimportamos alguns formatos.
Como mencionado, o pacote foreign deve ser instalado na sua máquina. Se este pacote não
estiver instalado, instale-o a partir do próprio R. Para instruções sobre como fazer isso, consulte o
módulo Baixando e Instalando o R. Esse pacote, como sugere o nome, contém várias funções tanto
para importar como para exportar alguns formatos de bancos de dados entre o R e diversos
programas.
Uma vez instalado o pacote, você precisa carregá-lo. Faça assim:
library(foreign)
Aproveite para dar uma olhada nas funções contidas nesse pacote. Use a ajuda em HTML
para facilitar a sua vida. Se você for curioso bastante para explorar o pacote foreign, notará que
ele só possui na verdade uma função para exportar diretamente dados para um formato específico,
que é o Stata, e que a maioria absoluta das funções são para importar dados. 
Mas o R é capaz de exportar também para o formato ASCII, que pode ser considerado como
um formato universal, ou seja, qualquer programa é capaz de ler um arquivo nesse formato. Nessa
seção, vamos ver uma função que faz essa tarefa, usando diferentes argumentos para a exportação,
convenientes para o programa que vai ler os dados. Não estranhe, mas a função utilizada para este