O R é um ambiente de programação para computação, estatística e análise gráfica. Seu código fonte é disponível sobre licença GPU-GPL, basicamente se configurando cujo código fonte é livre. Dentro das ciências sociais e biológicas têm sido das linguagens mais utilizadas (https://stackoverflow.blog/2017/10/10/impressive-growth-r/).
Outra vantagem é o uso de pacotes que permitem a inclusão de novas funções que permitem ao usuários a prática de diversas atividades comuns a análise de bancos de dados, ou ciência de dados, como: organização, limpeza, descrição, visualização, modelagem e comunicação.
Seu download pode ser realizado em: https://cran.r-project.org/mirrors.html
O Rstudio é um software livre, assim como o R, e integrado a este. Funciona como uma máscara, oferecendo algumas vantagens que tornam o processo de programação mais eficiente e intuíto.
Seu download pode ser realizado em: https://www.rstudio.com/products/rstudio/download/
Uma vez realizado os downloads do R e RStudio, abriremos o último destes. Para criar nosso primeiro projeto devemos seguir o passo-a-passo abaixo:
A partir de agora, tudo o que trabalharemos ficará salvo nesta pasta de trabalho, facilitando assim a reprodutibilidade das análises e a visualização de materiais gerados durante o estudo.
As telas do RStudio são divididas em quatro:
Para rodar uma linha de código, deve-se chegar ao seu final e apertar Crtl + Enter.
Para adicionar uma anotação (que não é código, ou seja não gera resultado) deve-se usar a #.
É importante que tente comentar os seus códigos para garantir reprodutibilidade e, claro, para que não esqueça o que está fazendo em cada parte dele.
2 -> Environment, History, Connections. Destes, focaremos, no Environment. Ao rodar uma linha do código que gera um objeto (mais a frente será explicitado o que é isto), este aparecerá no Global Environment, inicialmente, como uma tabela. Ao clicar nela, poderemos ver seu conteúdo. Mais a frente, utilizaremos esta aba para carregar bancos de dados e outros tipos de dados.
3 -> Console. É onde aparece os resultados do código (inclusive erros), não é válido usá-lo para escrever um script, já que o que é escrito neste não é salvo. É utilizado, basicamente, para averiguar se está tudo OK!
4 -> Files, Plots, Packages, Help, Viewer. É aba um pouco mais complexa, possuí 5 tipos de funcionalidade.
No Files podendo observar quais arquivos estão dentro do projeto criado (como figuras, gráficos, textos, códigos e etc…).
No Plots aparecerá os gráficos que fomos criando durante nossas aulas ou seus futuros projetos.
Packages controla os pacotes que estão ativos no R, não o utilizaremos.
O Help aparece os documentos relacionados a ajuda solicitada, para solicitar ajuda basta colocar no Console (3): ?“função desejada”, ou seja, se eu quiser ajuda sobre a média é só digitar no console: “?mean()”"
Viewer: Usado para gráficos interativos.
Nesta nossa primeira aula trabalharemos, principalmente, com dois pacotes:
Psych: Neste pacote há alguns bancos de dados ligados a psicologia, é importante ler um pouco a cerca dele em: https://personality-project.org/r/psych/.
Tidyverse: Este pacote contém as funções mais utilizadas no R. São funções para organização, limpeza de bancos de dados, descrição e visualização de dados. É sugerido, neste momento, a leitura, breve, do capítulo 2 do livro do Hadley (criador do Tidyverse): https://r4ds.had.co.nz/explore-intro.html
Para instalar pacotes podemos utilizar os seguintes comandos:
install.packages("psych")
install.packages("tidyverse")
Não há necessidade de se reinstalar frequentemente os pacotes, ou seja, uma vez instalados, devemos apenas requisitá-los (geralmente se faz isto no ínicio do código). Para requistar um determinado pacote usamos os seguintes comandos:
require("psych")
require("tidyverse")
A requisição dos pacotes é mandatória em todos os códigos, caso não seja feito, geralmente, ao se rodar o código será observado uma mensagem que diz respeito a ausência da função utilizada.
Utilizaremos para nossa aula 0 o banco de dados bfi que segundo o pacote psych diz respeito a: 25 personality self report items taken from the International Personality Item Pool (ipip.ori.org) were included as part of the Synthetic Aperture Personality Assessment (SAPA) web based personality assessment project. The data from 2800 subjects are included here as a demonstration set for scale construction, factor analysis, and Item Response Theory analysis. Three additional demographic variables (sex, education, and age) are also included.)
A primeira função que aprenderemos no R será: head(database,x). Esta função retorna as x primeiras linhas de cada coluna do nosso banco de dados.
head(bfi,5)
## A1 A2 A3 A4 A5 C1 C2 C3 C4 C5 E1 E2 E3 E4 E5 N1 N2 N3 N4 N5 O1 O2 O3
## 61617 2 4 3 4 4 2 3 3 4 4 3 3 3 4 4 3 4 2 2 3 3 6 3
## 61618 2 4 5 2 5 5 4 4 3 4 1 1 6 4 3 3 3 3 5 5 4 2 4
## 61620 5 4 5 4 4 4 5 4 2 5 2 4 4 4 5 4 5 4 2 3 4 2 5
## 61621 4 4 6 5 5 4 4 3 5 5 5 3 4 4 4 2 5 2 4 1 3 3 4
## 61622 2 3 3 4 5 4 4 5 3 2 2 2 5 4 5 2 3 4 4 3 3 3 4
## O4 O5 gender education age
## 61617 4 3 1 NA 16
## 61618 3 3 2 NA 18
## 61620 5 2 2 NA 17
## 61621 3 5 2 NA 17
## 61622 3 3 1 NA 17
É importante observamos também que alguns bancos de dados, como este em questão, possuem um dicionário que descreve as variáveis utilizadas e seu significado. É muito importante que em pesquisas reais se disponibilize este dicionário afim de facilitar a reprodutibilidade.
bfi.dictionary
## ItemLabel Item Giant3
## A1 q_146 Am indifferent to the feelings of others. Cohesion
## A2 q_1162 Inquire about others' well-being. Cohesion
## A3 q_1206 Know how to comfort others. Cohesion
## A4 q_1364 Love children. Cohesion
## A5 q_1419 Make people feel at ease. Cohesion
## C1 q_124 Am exacting in my work. Stability
## C2 q_530 Continue until everything is perfect. Stability
## C3 q_619 Do things according to a plan. Stability
## C4 q_626 Do things in a half-way manner. Stability
## C5 q_1949 Waste my time. Stability
## E1 q_712 Don't talk a lot. Plasticity
## E2 q_901 Find it difficult to approach others. Plasticity
## E3 q_1205 Know how to captivate people. Plasticity
## E4 q_1410 Make friends easily. Plasticity
## E5 q_1768 Take charge. Plasticity
## N1 q_952 Get angry easily. Stability
## N2 q_974 Get irritated easily. Stability
## N3 q_1099 Have frequent mood swings. Stability
## N4 q_1479 Often feel blue. Stability
## N5 q_1505 Panic easily. Stability
## O1 q_128 Am full of ideas. Plasticity
## O2 q_316 Avoid difficult reading material. Plasticity
## O3 q_492 Carry the conversation to a higher level. Plasticity
## O4 q_1738 Spend time reflecting on things. Plasticity
## O5 q_1964 Will not probe deeply into a subject. Plasticity
## gender gender males=1, females=2 <NA>
## education education in HS, fin HS, coll, coll grad , grad deg <NA>
## age age age in years <NA>
## Big6 Little12 Keying IPIP100
## A1 Agreeableness Compassion -1 B5:A
## A2 Agreeableness Compassion 1 B5:A
## A3 Agreeableness Compassion 1 B5:A
## A4 Agreeableness Compassion 1 B5:A
## A5 Agreeableness Compassion 1 B5:A
## C1 Conscientiousness Orderliness 1 B5:C
## C2 Conscientiousness Orderliness 1 B5:C
## C3 Conscientiousness Orderliness 1 B5:C
## C4 Conscientiousness Industriousness -1 B5:C
## C5 Conscientiousness Industriousness -1 B5:C
## E1 Extraversion Sociability -1 B5:E
## E2 Extraversion Sociability -1 B5:E
## E3 Extraversion Assertiveness 1 B5:E
## E4 Extraversion Sociability 1 B5:E
## E5 Extraversion Assertiveness 1 B5:E
## N1 Emotional Stability Balance -1 B5:N
## N2 Emotional Stability Balance -1 B5:N
## N3 Emotional Stability Balance -1 B5:N
## N4 Emotional Stability Balance -1 B5:N
## N5 Emotional Stability Balance -1 B5:N
## O1 Openness Intellect 1 B5:O
## O2 Openness Intellect -1 B5:O
## O3 Openness Intellect 1 B5:O
## O4 Openness Openness 1 B5:O
## O5 Openness Openness -1 B5:O
## gender <NA> <NA> NA <NA>
## education <NA> <NA> NA <NA>
## age <NA> <NA> NA <NA>
Introduziremos, a partir de agora, alguns dos verbos do pacote dplyr que está contido no tidyverse. o Dplyr é focado na limpeza e organização dos dados, para isto, este pacote conta com funções que tem uma equivalência verbal muito interessante. Porém, antes disto, veremoso pipe.
O pipe nos acompanhará durante esta jornada e dificilmente não será utilizado em qualquer uma das aulas. O pipe é a seguinte função: %>% e significa: “e então…” ou “depois disto…”, é um sequenciador de funções.
Um bom exemplo de esclarecimento sobre o uso do pipe pode ser uma transcrição da receita de um bolo:
Atividade 1 : Escrever uma atividade do dia-a-dia utilizando o operador *pipe*.
Primeiramente, iremos salvar bfi em um banco de dados (objeto) chamado: data. Observe que o “<-” corresponde a dizer de uma forma bem introdutória: “é igual”
data <- bfi
Uma vez indexado nosso banco de dados, vamos aprender nossa primeira função do dplyr: select(). A função select tem como objetivo selecionar colunas de um determinado banco de dados. É utilizada quando queremos trabalhar com apenas algumas das variáveis.
data <- bfi %>% # Data passa a ser bfi e então...
select(A1,A2,A3,A4,A5, gender, age) # e então selecione estas variáveis relacionadas a coesão (?)
glimpse(data)
## Observations: 2,800
## Variables: 7
## $ A1 <int> 2, 2, 5, 4, 2, 6, 2, 4, 4, 2, 4, 2, 5, 5, 4, 4, 4, 5, 4...
## $ A2 <int> 4, 4, 4, 4, 3, 6, 5, 3, 3, 5, 4, 5, 5, 5, 5, 3, 6, 5, 4...
## $ A3 <int> 3, 5, 5, 6, 3, 5, 5, 1, 6, 6, 5, 5, 5, 5, 2, 6, 6, 5, 5...
## $ A4 <int> 4, 2, 4, 5, 4, 6, 3, 5, 3, 6, 6, 5, 6, 6, 2, 6, 2, 4, 4...
## $ A5 <int> 4, 5, 4, 5, 5, 5, 5, 1, 3, 5, 5, 5, 4, 6, 1, 3, 5, 5, 3...
## $ gender <int> 1, 2, 2, 2, 1, 2, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 2, 1, 2...
## $ age <int> 16, 18, 17, 17, 17, 21, 18, 19, 19, 17, 21, 16, 16, 16,...
Nossa segunda função é summarise ou sumarizar ou reduzir os dados seguindo uma determinada função. Queremos, então, reduzir as observações das variáveis selecionadas acima a somente suas médias.
data <- bfi %>% # Data passa a ser bfi e então...
select(A1,A2,A3,A4,A5, gender, age) %>% # e então selecione estas variáveis relacionadas a coesão (?) e então
na.omit() %>% # retire todos os valores faltantes e então
summarise_all(mean) # retorne todas as médias (summarise_all)
data
## A1 A2 A3 A4 A5 gender age
## 1 2.412329 4.797342 4.599114 4.682171 4.551126 1.669251 28.73902
Olhando os resultados rapidamente percebemos que a média não agrega informação a cerca das variáveis, exceto para idade, não existe, por exemplo, uma média do sexo dos entrevistados e nem um significado para pontuações médias nos quisitos dos testes de personalidades. Para isto, a mediana faz muito mais sentido.
Retornaremos, então, a mediana (medida central) dos resultados obtidos nos testes de personalidade:
data <- bfi %>% # Data passa a ser bfi e então...
select(A1,A2,A3,A4,A5) %>% # e então selecione estas variáveis relacionadas a coesão (?) e então
na.omit() %>% # retire todos os valores faltantes e então
summarise_all(median) # retorne todas (summarise_all) as medianas (median).
data # visualizando data
## A1 A2 A3 A4 A5
## 1 2 5 5 5 5
Atividade 2: Criar um objeto que armazene o dicionário (bfi.dictionary) e interpretar o resultado acima.
Antes do desafio final, aprenderemos nossa última função: group_by. Por exemplo, se desejassemos saber quais são os resultados medianos para os homens e mulheres, precisariamos os agrupar em distintos grupos e obter dois resultados de medianas.
data <- bfi %>% # Data passa a ser bfi e então...
select(A1,A2,A3,A4,A5, gender, age) %>% # e então selecione estas variáveis relacionadas a coesão (?) e então
na.omit() %>% # retire todos os valores faltantes e então
group_by(gender) %>% #Agrupando pelo sexo
summarise_all(median) # retorne todas (summarise_all) as medianas (median).
data # visualizando data
## # A tibble: 2 x 7
## gender A1 A2 A3 A4 A5 age
## <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 1 2 5 5 5 5 25
## 2 2 2 5 5 5 5 26
Atividade 3: Reflita sobre os resultados obtidos
Atividade 4: Escolhendo outra categória C,E,N,O, quais os resultados serião obtidos? Reproduza os códigos para algum destas categórias, bem como, realize sua interpretação.
Na figura abaixo temos a quantidade de vezes que Harry, Hermione e Ron são citados em duplas durante os livros da franquia Harry Potter. Usar a média para inferir qual a dupla que, realmente, é inseparável é adequado? Justifique sua resposta.
* https://stackoverflow.blog/2017/10/10/impressive-growth-r/
* https://www.psychologicalscience.org/observer/why-you-should-become-a-user-a-brief-introduction-to-r#.WP4NTlLMzrI