Comparando graficamente dois grupos em R

Recentemente tive que demonstrar graficamente algumas informações de dois grupos em um estudo. Isso é comum, principalmente porque normalmente analisamos os grupos de controle e tratamento.

No R, o pacote sm permite que façamos um gráfico com as densidades de dois grupos distintos para uma mesma variável de uma forma bem simples.

Para esta análise, o conjunto de dados sleep que temos no R será muito útil. Para quem não o conhece, basta acessar o R e escrever View(sleep). Este conjunto de dados contém informações de estudantes que receberam dois remédios distintos para dormir. Estes dois grupos são separados pela variável group. A coluna extra contém o número de horas a mais que o estudante dormiu após a ingestão da droga. Ou seja, se quisermos observar a distribuição do número de horas dormidas, pelos dois grupos em um mesmo gráfico, podemos utilizar exatamente o pacote sm e o gráfico de densidade separando estes dois grupos. Vamos construir este gráfico:

## instala e carrega pacote
install.packages("sm");
library("sm");

## carrega os dados de 'sleep'
attach(sleep);

## plota as densidades por cada grupo, com cores padrao 1 e 2
sm.density.compare(extra, group, xlab="Horas adicionadas ao sono",
col=c(1:2));

# adiciona titulo
title(main="Distribuicao da Idade por flag de Banco Cadastra");

## adiciona legenda no canto superior direito (topright)
legend("topright", levels(sleep$group),fill=c(1:2),
legend=c("Grupo 1","Grupo 2"))

Podemos fazer a mesma coisa para grupos maiores (3, 4, 5 ou até mais). Vejamos outro exemplo, dessa vez com os dados de mtcars, outro conjunto de dados que já está no R por default. Dessa vez, os dados são de diferentes automóveis e temos as informações de milhas por galão (mpg) e número de cilindros (cyl). Abaixo, veja como construímos os gráficos de densidade de mpg comparando os carros com 4, 6 e 8 cilindros:

## carrega os dados de 'mtcars'
attach(mtcars);

## plota as densidades por cada grupo
sm.density.compare(mpg, cyl, xlab="Milhas por galao",col=c(1:3));

# adiciona um titulo ao grafico
title(main="Distribuicao do consumo por n de cilindros");

## adiciona legenda para os dois grupos
legend("topright", levels(sleep$group),fill=c(1:3),
legend=c("4 cilindros","6 cilindros", "8 cilindros"));

Gráficos no R com qqplot() (Histograma, Gráficos de Dispersão e Boxplot)

A função qqplot() do R – pertencente ao pacote ggplot2 –  é uma das melhores para se fazer gráficos. Este post, sem muitas enrolações, é basicamente uma continuidade do Gráficos em R. Aqui vamos utilizar os dados da base Wage do pacote ISLR do R.

Para começar, apenas carregue os pacotes e visualize a base:

library(ggplot2);
library(ISLR);
View(Wage);
Como você pode ver, se trata de dados referentes a salário, escolaridade, saúde, etc.
Abaixo, você terá os códigos para gerar diferentes gráficos e comentários explicativos:
## Tracando grafico simples com qplot
## por default, temos um histograma bem simples
qplot(wage, data=Wage);

Você deve ter notado a mensagem: “`stat_bin()` using `bins = 30`. Pick better value with `binwidth`“. Isto quer dizer que por default, seu histograma é dividido em 30 barras diferentes, mas você pode escolher o melhor número de barras. Vamos testar com 15:
qplot(wage, data=Wage, bins=15);
## Agora, vamos visualizar cada barra separando pelo estado civil
qplot(wage, colour=maritl, data=Wage);

## Separar apenas com a cor do contorno nao ficou legal
## vamos trocar tambem a cor de preenchimento utilizando fill
qplot(wage, colour=maritl, fill=maritl, data=Wage);
## Podemos inclusive preencher os blocos com cores diferentes
## Por exemplo, para cada estado civil, queremos ver quantos sao
## saudaveis e quantos nao sao
qplot(wage, colour=maritl, fill=health, data=Wage);
## Podemos visualizar graficos de densidade
qplot(wage, colour=maritl, data=Wage, geom="density");
## Podemos tentar entender como duas variaveis interagem
## Exemplo: plotar salario vs idade
qplot(wage, age, data=Wage);
## Ou ate tentar ver alguma relacao nao linear
qplot(wage, age*age, data=Wage);
## Um pouco mais complexo, podemos verificar o comportamento de idade por salario
## para cada raca, dividindo ainda por pessoas que possuem ou nao plano de saude
## essa segunda divisao (raca por plano de saúde) eh feita utilizando facets
qplot(age, wage, data=Wage, facets=race~health_ins,
xlab="Idade", ylab="Salario");
## Por fim, podemos fazer um boxplot, mas divindo uma variavel por
## cada uma das diferentes classes de uma outra (categorica)
## vamos observar o boxplot de salario para cada classe de trabalhador
## main indica o titulo do grafico, ylab o titulo do eixo y
qplot(jobclass, wage, data=Wage, geom=c("boxplot"),
fill=jobclass, main="Salario por classe de trabalho",
xlab="", ylab="Salario")

Agora você já está pronto para fazer diversos gráficos diferentes no R!

Demonstrando dados com a função aggregate no R

A função aggregate no R é bem interessante. Como o próprio nome diz, ela agrega as informações de um dataframe, incluindo alguma função que é especificada por um parâmetro chamado FUN. Sendo assim, é algo bem interessante para você analista ou cientista de dados! Continuar a ler “Demonstrando dados com a função aggregate no R”

Mascarando os dados (~Contar e criar flag para campo único)

Suponha que você esteja fazendo um modelo qualquer em que um dos campos para identificar os indivíduos seja o nome completo ou algum documento. Talvez não seja legal você passar essa base para outras pessoas com essas informações, e mesmo assim você pode não querer excluir a coluna se o campo fizer parte da análise. Uma forma legal de substituir esse campo é criando um contador que some um apenas quando surge um campo novo. Veja abaixo como criar um campo (aqui chamado de Cliente_id) com o que será a nova identificação do cliente:

## mascarando documentos na base base_dados
base_dados$cliente_id <- with(base_dados, as.numeric(factor(Documento,levels=unique(Documento) )));
base_dados$cliente_id;

## traz coluna id para primeira posicao e exclui campo documento
base_dados <- base_dados[,c(4,2,3)];

## poderiamos ter feito passo a passo excluindo a coluna Documento
## utilizando: base_dados <- base_dados[,-1];

Ps.: Os dados são fictícios (obviamente)!

R: Ordenando colunas

Mais uma dica rápida de R, vamos aprender a ordenar as colunas de um conjunto de dados qualquer. Isso geralmente é útil para visualizações, ou no caso de trabalhos com séries temporais.

Utilizando a base de dados german_credit_2, abaixo três formas de mudar as colunas de ordem:

## Le o dataset

dados = read.csv("../database/german_credit_2.csv");

## Traz a coluna 21 para a primeira posicao pelos indices

dados = dados[, c(21,1,2,3,...,20];

## Traz a coluna 21 para a primeira posicao pelos nomes das colunas

dados = dados[, c("Foreign Worker","Creditability",...,"Telephone")];

## Traz a coluna 21 pelos indices, mas criando uma sequencia

dados = dados[, c(21, 1:20)];

Para quem não se lembra, ‘1 : 20′ tem como resposta a sequência 1, 2, 3, …, 20.

Claro que o que foi criado acima pode ser modificado de diversas formas:

## Traz a coluna 21, 20 e 19 para a primeira posicao
dados = dados[, c(21,20,19,1,2,3,...,18];
## Traz as colunas de 1 a 5, seguidas pelas de 10 a 20, deixando
## as demais fora
dados = dados[, c(1:5, 10:20)];
E aí, curtiu o post?

E aí? Gostou do conteúdo? Se inscreva para receber todas as novidades. Deixe seu e-mail em INSCREVA-SE na barra à direita, logo abaixo de pesquisar. E, por favor, não deixe de comentar, dar seu feedback e, principalmente, compartilhar com seus amigos. De verdade, isso faz toda a diferença. Além disso, você também pode acompanhar mais do meu trabalho seguindo a conta de Twitter @UniDosDados, no Instagram @universidadedosdados ou por alguma das redes que você encontra em Sobre o Estatsite / Contato, como meu canal de Youtube Canal Universidade dos Dados.

Aproveite e adquira sua camiseta de data science na LOJA DA UNIVERSIDADE DOS DADOS. Vai ficar estiloso e me ajudar neste projeto!

BONS ESTUDOS!

Excluindo linhas de um dataset no R

Mais uma dica rápida que saiu enquanto eu fazia minha tese…

Estava tratando um conjunto de dados no R, quando vi que precisava excluir as linhas que tivessem o campo referente ao mês com valor igual a 1 ou igual a 5. Sempre fiz isso no SAS com um if bem simples, mas não lembrava no R, talvez já tenha feito aqui, mas quem lê o blog sabe que não é lá tão organizado. Enfim, a lógica no R é tão simples quanto a do SAS, mas não tão intuitiva (ao menos para mim). Veja o antes e depois de uma tabela chamada dados retirando as linhas nas quais o campo s seja igual a 1 ou 5 e quais os códigos utilizar em algumas linguagens que já mencionamos aqui (é tão simples que vou colocar tudo junto mesmo):

No R, podemos resolver com um indexador lógico (! indicando negação):

dados[(dados$mes!=5 & dados$mes!=1),];

Ou então com um subset:

subset(dados, mes != 1 & mes != 5)

Da forma que escrevemos acima, você vai obter uma nova tabela, mas ela não está sendo salva com nome algum. Se você quiser, pode facilmente criar uma nova, como a tabela_nova que criamos no exemplo a seguir:

tabela_nova = subset(dados, mes!=1 & mes !=5)

Se você quiser ver como é no SAS, aqui vai um exemplo com data step:

data dados_v2;
    set dados;
    if mes ne 1 and mes ne 5; *ou if mes <> 1;
run;

E agora, um exemplo com proc sql:

PROC SQL;
    CREATE TABLE dados_v2 AS
    SELECT * FROM dados WHERE mes <> 1 AND mes <> 5; 
RUN;

Se quiser fazer no SQL:

SELECT * FROM dados WHERE mes <> 1 and mes <> 5;
E aí, curtiu o post?

E aí? Gostou do conteúdo? Se inscreva para receber todas as novidades. Deixe seu e-mail em INSCREVA-SE na barra à direita, logo abaixo de pesquisar. E, por favor, não deixe de comentar, dar seu feedback e, principalmente, compartilhar com seus amigos. De verdade, isso faz toda a diferença. Além disso, você também pode acompanhar mais do meu trabalho seguindo a conta de Twitter @UniDosDados, no Instagram @universidadedosdados ou por alguma das redes que você encontra em Sobre o Estatsite / Contato, como meu canal de Youtube Canal Universidade dos Dados.

Aproveite e adquira sua camiseta de data science na LOJA DA UNIVERSIDADE DOS DADOS. Vai ficar estiloso e me ajudar neste projeto!

BONS ESTUDOS!

Criando variáveis dummy no R

Uma curtinha só para começar bem a semana…

Utilizando a base de dados german_credit_2 abaixo temos um exemplo de como criar uma variável binária – i.e., uma variável que recebe dois valores, 0 e 1 – com valor 1 para os clientes que possuem um montante de crédito acima de $ 1.000, e valor 0 para os que possuem menos que $ 1.000. Em outras palavras, criamos uma dummy n R. Incluímos uma forma de ler os dados em csv e uma forma de ler em excel:

## Le a base de dados csv
dados = read.csv("../database/german_credit_2.csv");

## le a base de dados excel - Primeiro instala pacote xlsx
install.packages("xlsx");
library("xlsx");
dados = read.xlsx("../database/german_credit_2.xlsx", sheetIndex=1);

## cria variavel para quem tem montante maior que mil
dados$valor1000 = as.numeric(dados$CreditAmount >= 1000);
E aí, curtiu o post?

E aí? Gostou do conteúdo? Se inscreva para receber todas as novidades. Deixe seu e-mail em INSCREVA-SE na barra à direita, logo abaixo de pesquisar. E, por favor, não deixe de comentar, dar seu feedback e, principalmente, compartilhar com seus amigos. De verdade, isso faz toda a diferença. Além disso, você também pode acompanhar mais do meu trabalho seguindo a conta de Twitter @UniDosDados, no Instagram @universidadedosdados ou por alguma das redes que você encontra em Sobre o Estatsite / Contato, como meu canal de Youtube Canal Universidade dos Dados.

Aproveite e adquira sua camiseta de data science na LOJA DA UNIVERSIDADE DOS DADOS. Vai ficar estiloso e me ajudar neste projeto!

BONS ESTUDOS!

Excluindo linhas missing no R

Essa é bem curtinha. Já expliquei como tirar os missings de seus cálculos no post Evitando “NA” nos cálculos do R, mas às vezes a gente quer construir uma base sem esses valores. Para fazer isso no R é simples, basta usar a função na.omit():

matriz_teste
      [,1] [,2]
 [1,]  10    5
 [2,]  NA    2
matriz_teste_sem_na = na.omit(matriz_teste)
matriz_teste_sem_na
      [,1] [,2]
 [1,]  10    5
E aí, curtiu o post?

E aí? Gostou do conteúdo? Se inscreva para receber todas as novidades. Deixe seu e-mail em INSCREVA-SE na barra à direita, logo abaixo de pesquisar. E, por favor, não deixe de comentar, dar seu feedback e, principalmente, compartilhar com seus amigos. De verdade, isso faz toda a diferença. Além disso, você também pode acompanhar mais do meu trabalho seguindo a conta de Twitter @UniDosDados, no Instagram @universidadedosdados ou por alguma das redes que você encontra em Sobre o Estatsite / Contato, como meu canal de Youtube Canal Universidade dos Dados.

Aproveite e adquira sua camiseta de data science na LOJA DA UNIVERSIDADE DOS DADOS. Vai ficar estiloso e me ajudar neste projeto!

BONS ESTUDOS!

Personalizando seu gráfico do ggplot2 – Exports and Imports, William Playfair

O ggplot2 é muito bom para explorar visualmente, de forma dinâmica, sua base de dados.  Mas às vezes queremos editar cada detalhe do gráfico para uma publicação, é possível fazer isso?

Leia o post completo em: Personalizando seu gráfico do ggplot2 – Exports and Imports, William Playfair