224 pág.

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