# help(sqrt) #ajuda sobre a função raiz quadrada
# help(lm) # ajuda sobre a função linear models
# citation("ggplot2") # mostra como o pacote deve ser citado
Introdução a Análise de Dados com R e RStudio
Em pesquisas feitas durante o decorrer de um curso de graduação e/ou pós-graduação, a análise dos dados destas pesquisas pode ser um desafio para muitos estudantes. Dominar uma linguagem de programação acessível e gratuita é um importante meio de vencer tais desafios. Pesquisadores das mais diversas áreas como educação, biologia, psicologia, medicina, sociologia, etc, usam o R
como linguagem de programação padrão para fazer suas análises, do simples ao avançado, no que diz respeito a análise estatística de dados. Este é um texto introdutório que traz os comandos básicos para usuários que tenham o conhecimento mínimo de informática e que nunca tiveram contato com o R
ou qualquer outra linguagem de programação.
1 Algumas interfaces
https://www.r-project.org/ \(\longrightarrow\) R
base
https://posit.co/download/rstudio-desktop/ \(\longrightarrow\) RStudio
https://posit.cloud/ \(\longrightarrow\) RStudio
online
https://colab.google/ \(\longrightarrow\) R
online
2 Comandos básicos do R
O
R
vem com as configurações mínimas ao ser instalado. Para realizar tarefas mais específicas pode ser necessário instalar pacotes adicionais (packages), clicando em “pacotes>>instalar pacotes”;É necessário escolher o CRAN (Comprehensive R Archive Network), que são arquivos disponibilizados na rede por diversas IES do mundo inteiro, inclusive do Brasil.
O
R
é case-sensitive, isto é, ele diferencia letras minúsculas de maiúsculas;O separador de casas decimais é o “.”;
A vírgula é usada para separar argumentos;
O prompt do
R
é o sinal de maior “>”;Após instalarmos algum pacote sempre será necessário carregá-lo com o comando: library(“nome do pacote”);
Para verificar como citar o pacote instalado digite: citation(“nome do pacote”);
Para obter ajuda dos arquivos do R use o comando help(nome da função).
Ajuda
- Exemplos:
Demonstrações gráficas
- Exemplos:
#demo(graphics) #pressione Enter
#demo(persp)
#demo(image)
- O símbolo
#
representa um comentário. Podemos usá-lo para oR
não compilar (rodar) o que estiver após este símbolo. - Um pacote amplamente utilizado para contrução de gráficos é o
ggplot
.
Continhas no R
(modo calculadora)
# soma
2+2-(2+6)+(2)
[1] -2
# multiplicação
6 + (6*78)
[1] 474
# Divisão
4/(3+2)
[1] 0.8
# potência
2**3
[1] 8
# potência
2^3
[1] 8
2^(3)
[1] 8
2.1 Funções do R
nome da função (argumento 1, argumento 2,... )
dentro dos parênteses colocamos os argumentos da função.
os argumentos são separados por vírgula.
Exemplos:
mean(...)
: calcula a média aritmética.
sd(...)
: calcula o desvio padrão.
lm(...)
: estima os parâmetros de um modelo de regressão linear.
2.2 Criando objetos/vetores com valores numéricos
Vamos crias um vetor de notas de 10 alunos de uma turma. A função length(notas) fornece o número de observações (n) dentro do objeto.
A letra c()
antes dos parênteses significa concatenar (colocar junto).
= c(9,6,8,5,7,8,6,9,10,6)
notas print(notas)
[1] 9 6 8 5 7 8 6 9 10 6
length(notas)
[1] 10
Para objetos com letras (variáveis qualitativas), basta colocar cada observação entre aspas.
Para listar quais objetos temos salvo utiliza-se a função ls()
.
Para remover um objeto: rm("nome do objeto")
.
<-c("a","b","c","d")
letrasprint(letras)
[1] "a" "b" "c" "d"
ls()
[1] "letras" "notas"
2.3 Condicionantes
Podemos “perguntar” ao R
se algo é verdade ou não a partir de operadores simples, como por exemplo:
1<5 # menor
[1] TRUE
2==2.0001 # igual
[1] FALSE
sqrt(25) != 6 # diferente
[1] TRUE
= 8
n1 = 8.1
n2 = n1>n2
teste teste
[1] FALSE
ifelse(teste, "n1 maior que n2","n2 é maior que n1")
[1] "n2 é maior que n1"
2.4 Matrizes
Para inserir uma matriz no R
utiliza-se a função matrix(data = NA, nrow = 1, ncol = 1, byrow = FALSE, dimnames = NULL)
. Note que, basta colocar como argumentos o conjunto de dados e indicar o número de linhas e de colunas da matriz.
= matrix(data = 1:9, nrow = 3, ncol = 3)
M1
print(M1)
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
Observe que a matriz foi organizada por default por colunas. Entretanto, podemos mudar isso para linhas utilizando-se o argumento byrow = TRUE
na função matrix.
= matrix(data = 1:9, nrow = 3, ncol = 3, byrow = TRUE)
M2
print(M2)
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
[3,] 7 8 9
- Índices das matrizes
Exemplo: Uma seleção de 4 firmas de ração de Minas Gerais foi obtida para avaliar a venda de rações. Cada observação bivariada forneceu a quantidade de sacos de ração vendidos e a quantidade de reais de cada venda. Os dados obtidos na forma tabular são:
\[\begin{eqnarray*} \begin{array}{cc}\hline \text{Vendas (R\$)} & \text{Quantidade} \\ \hline 80 & 10 \\ 120 & 12 \\ 90 & 6 \\ 110 & 8 \\ \hline \end{array} \end{eqnarray*}\]
= matrix(c(80,120,90,110,10,12,6,8),4,2)
M_E1 print(M_E1)
[,1] [,2]
[1,] 80 10
[2,] 120 12
[3,] 90 6
[4,] 110 8
Pode-se acessar os elementos de uma matriz usando o nome do objeto (matriz) seguido de colchetes. Para acessar o segundo elemento da variável 1, no exemplo anterior, M_E1[2,1]
. Para o terceiro elemento da variável 2, M_E1[3,2]
. E, para selecionar todos os elementos da variável 1, M_E1[,1]
.
2,1] # segundo elemento da variável 1 M_E1[
[1] 120
3,2] # terceiro elemento da variável 2 M_E1[
[1] 6
1] # todos os elementos da variável 1 M_E1[,
[1] 80 120 90 110
2.5 Manipulando um banco de dados (BD)
A manipulação de um banco de dados a partir o R
base é feita de forma análoga às matrizes. A função data.frame
tem a mesma lógica de manipulação matricial com mais algumas vantagens.
Vamos estudar alguns recursos simples e importantes dessa função a partir do famoso banco de dados Iris
presente na base de dados do R
.
A função str
mostra que o objeto df_iris
é do tipo dataframe, ou seja, banco de dados, e possui 150 observações (linhas) e 5 variáveis (colunas). Tal estrutura é a mesma de uma matriz qualquer.
data("iris") # carregando o banco de dados
= iris # atribuindo um nome para este BD
df_iris str(df_iris) # verificando a estrutura deste objeto
'data.frame': 150 obs. of 5 variables:
$ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
$ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
$ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
$ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
$ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
Agora vamos fazer algumas seleções com a mesma lógica feita com a matriz do exemplo anterior.
# Selecionando as linhas de 1 a 3 e todas as colunas
1:3,] df_iris[
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
# encontrar linhas onde Species=="setosa"
$Species=="setosa",] iris[iris
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa
6 5.4 3.9 1.7 0.4 setosa
7 4.6 3.4 1.4 0.3 setosa
8 5.0 3.4 1.5 0.2 setosa
9 4.4 2.9 1.4 0.2 setosa
10 4.9 3.1 1.5 0.1 setosa
11 5.4 3.7 1.5 0.2 setosa
12 4.8 3.4 1.6 0.2 setosa
13 4.8 3.0 1.4 0.1 setosa
14 4.3 3.0 1.1 0.1 setosa
15 5.8 4.0 1.2 0.2 setosa
16 5.7 4.4 1.5 0.4 setosa
17 5.4 3.9 1.3 0.4 setosa
18 5.1 3.5 1.4 0.3 setosa
19 5.7 3.8 1.7 0.3 setosa
20 5.1 3.8 1.5 0.3 setosa
21 5.4 3.4 1.7 0.2 setosa
22 5.1 3.7 1.5 0.4 setosa
23 4.6 3.6 1.0 0.2 setosa
24 5.1 3.3 1.7 0.5 setosa
25 4.8 3.4 1.9 0.2 setosa
26 5.0 3.0 1.6 0.2 setosa
27 5.0 3.4 1.6 0.4 setosa
28 5.2 3.5 1.5 0.2 setosa
29 5.2 3.4 1.4 0.2 setosa
30 4.7 3.2 1.6 0.2 setosa
31 4.8 3.1 1.6 0.2 setosa
32 5.4 3.4 1.5 0.4 setosa
33 5.2 4.1 1.5 0.1 setosa
34 5.5 4.2 1.4 0.2 setosa
35 4.9 3.1 1.5 0.2 setosa
36 5.0 3.2 1.2 0.2 setosa
37 5.5 3.5 1.3 0.2 setosa
38 4.9 3.6 1.4 0.1 setosa
39 4.4 3.0 1.3 0.2 setosa
40 5.1 3.4 1.5 0.2 setosa
41 5.0 3.5 1.3 0.3 setosa
42 4.5 2.3 1.3 0.3 setosa
43 4.4 3.2 1.3 0.2 setosa
44 5.0 3.5 1.6 0.6 setosa
45 5.1 3.8 1.9 0.4 setosa
46 4.8 3.0 1.4 0.3 setosa
47 5.1 3.8 1.6 0.2 setosa
48 4.6 3.2 1.4 0.2 setosa
49 5.3 3.7 1.5 0.2 setosa
50 5.0 3.3 1.4 0.2 setosa
# encontrar linhas onde Species=="setosa" e Sepal.Length==5
$Species=="setosa" & iris$Sepal.Length==5,] iris[iris
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
5 5 3.6 1.4 0.2 setosa
8 5 3.4 1.5 0.2 setosa
26 5 3.0 1.6 0.2 setosa
27 5 3.4 1.6 0.4 setosa
36 5 3.2 1.2 0.2 setosa
41 5 3.5 1.3 0.3 setosa
44 5 3.5 1.6 0.6 setosa
50 5 3.3 1.4 0.2 setosa
2.5.0.1 Agrupando os dados
# agrupando os dados apenas pelas variáveis Species, Petal.Width e Petal.Length
c("Species", "Petal.Width", "Petal.Length")] iris[,
Species Petal.Width Petal.Length
1 setosa 0.2 1.4
2 setosa 0.2 1.4
3 setosa 0.2 1.3
4 setosa 0.2 1.5
5 setosa 0.2 1.4
6 setosa 0.4 1.7
7 setosa 0.3 1.4
8 setosa 0.2 1.5
9 setosa 0.2 1.4
10 setosa 0.1 1.5
11 setosa 0.2 1.5
12 setosa 0.2 1.6
13 setosa 0.1 1.4
14 setosa 0.1 1.1
15 setosa 0.2 1.2
16 setosa 0.4 1.5
17 setosa 0.4 1.3
18 setosa 0.3 1.4
19 setosa 0.3 1.7
20 setosa 0.3 1.5
21 setosa 0.2 1.7
22 setosa 0.4 1.5
23 setosa 0.2 1.0
24 setosa 0.5 1.7
25 setosa 0.2 1.9
26 setosa 0.2 1.6
27 setosa 0.4 1.6
28 setosa 0.2 1.5
29 setosa 0.2 1.4
30 setosa 0.2 1.6
31 setosa 0.2 1.6
32 setosa 0.4 1.5
33 setosa 0.1 1.5
34 setosa 0.2 1.4
35 setosa 0.2 1.5
36 setosa 0.2 1.2
37 setosa 0.2 1.3
38 setosa 0.1 1.4
39 setosa 0.2 1.3
40 setosa 0.2 1.5
41 setosa 0.3 1.3
42 setosa 0.3 1.3
43 setosa 0.2 1.3
44 setosa 0.6 1.6
45 setosa 0.4 1.9
46 setosa 0.3 1.4
47 setosa 0.2 1.6
48 setosa 0.2 1.4
49 setosa 0.2 1.5
50 setosa 0.2 1.4
51 versicolor 1.4 4.7
52 versicolor 1.5 4.5
53 versicolor 1.5 4.9
54 versicolor 1.3 4.0
55 versicolor 1.5 4.6
56 versicolor 1.3 4.5
57 versicolor 1.6 4.7
58 versicolor 1.0 3.3
59 versicolor 1.3 4.6
60 versicolor 1.4 3.9
61 versicolor 1.0 3.5
62 versicolor 1.5 4.2
63 versicolor 1.0 4.0
64 versicolor 1.4 4.7
65 versicolor 1.3 3.6
66 versicolor 1.4 4.4
67 versicolor 1.5 4.5
68 versicolor 1.0 4.1
69 versicolor 1.5 4.5
70 versicolor 1.1 3.9
71 versicolor 1.8 4.8
72 versicolor 1.3 4.0
73 versicolor 1.5 4.9
74 versicolor 1.2 4.7
75 versicolor 1.3 4.3
76 versicolor 1.4 4.4
77 versicolor 1.4 4.8
78 versicolor 1.7 5.0
79 versicolor 1.5 4.5
80 versicolor 1.0 3.5
81 versicolor 1.1 3.8
82 versicolor 1.0 3.7
83 versicolor 1.2 3.9
84 versicolor 1.6 5.1
85 versicolor 1.5 4.5
86 versicolor 1.6 4.5
87 versicolor 1.5 4.7
88 versicolor 1.3 4.4
89 versicolor 1.3 4.1
90 versicolor 1.3 4.0
91 versicolor 1.2 4.4
92 versicolor 1.4 4.6
93 versicolor 1.2 4.0
94 versicolor 1.0 3.3
95 versicolor 1.3 4.2
96 versicolor 1.2 4.2
97 versicolor 1.3 4.2
98 versicolor 1.3 4.3
99 versicolor 1.1 3.0
100 versicolor 1.3 4.1
101 virginica 2.5 6.0
102 virginica 1.9 5.1
103 virginica 2.1 5.9
104 virginica 1.8 5.6
105 virginica 2.2 5.8
106 virginica 2.1 6.6
107 virginica 1.7 4.5
108 virginica 1.8 6.3
109 virginica 1.8 5.8
110 virginica 2.5 6.1
111 virginica 2.0 5.1
112 virginica 1.9 5.3
113 virginica 2.1 5.5
114 virginica 2.0 5.0
115 virginica 2.4 5.1
116 virginica 2.3 5.3
117 virginica 1.8 5.5
118 virginica 2.2 6.7
119 virginica 2.3 6.9
120 virginica 1.5 5.0
121 virginica 2.3 5.7
122 virginica 2.0 4.9
123 virginica 2.0 6.7
124 virginica 1.8 4.9
125 virginica 2.1 5.7
126 virginica 1.8 6.0
127 virginica 1.8 4.8
128 virginica 1.8 4.9
129 virginica 2.1 5.6
130 virginica 1.6 5.8
131 virginica 1.9 6.1
132 virginica 2.0 6.4
133 virginica 2.2 5.6
134 virginica 1.5 5.1
135 virginica 1.4 5.6
136 virginica 2.3 6.1
137 virginica 2.4 5.6
138 virginica 1.8 5.5
139 virginica 1.8 4.8
140 virginica 2.1 5.4
141 virginica 2.4 5.6
142 virginica 2.3 5.1
143 virginica 1.9 5.1
144 virginica 2.3 5.9
145 virginica 2.5 5.7
146 virginica 2.3 5.2
147 virginica 1.9 5.0
148 virginica 2.0 5.2
149 virginica 2.3 5.4
150 virginica 1.8 5.1
# Número de observações por Species
table(iris$Species)
setosa versicolor virginica
50 50 50
# mesmo resultado anterior, mas no formato de um dataframe
data.frame(table(iris$Species))
Var1 Freq
1 setosa 50
2 versicolor 50
3 virginica 50
2.5.1 Agrupando os dados por medidas descritivas
### Calculando a méda de Sepal.Length
mean(iris$Sepal.Length)
[1] 5.843333
# Calculando a média de Sepal.Length por Species
aggregate(Sepal.Length ~ Species, iris, mean)
Species Sepal.Length
1 setosa 5.006
2 versicolor 5.936
3 virginica 6.588
# calculando a média Sepal.Length por Species onde Sepal.Width >= 3
aggregate(Sepal.Length ~ Species, iris[iris$Sepal.Width>=3,],mean)
Species Sepal.Length
1 setosa 5.029167
2 versicolor 6.218750
3 virginica 6.768966
2.5.2 Medidas descritivas de uma variável
As medidas de tendência central e de dispersão são facilmente encontradas a partir de funções simples do R
base.
# Média aritmética
mean(iris$Sepal.Length)
[1] 5.843333
# Mediana
median(iris$Sepal.Length)
[1] 5.8
# Variância
mean(iris$Sepal.Length)
[1] 5.843333
# Desvio padrão
sd(iris$Sepal.Length)
[1] 0.8280661
Com a função summary
temos um resumo com as principais medidas descritivas de uma variável ou até mesmo de todo banco de dados.
summary(iris)
Sepal.Length Sepal.Width Petal.Length Petal.Width
Min. :4.300 Min. :2.000 Min. :1.000 Min. :0.100
1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.600 1st Qu.:0.300
Median :5.800 Median :3.000 Median :4.350 Median :1.300
Mean :5.843 Mean :3.057 Mean :3.758 Mean :1.199
3rd Qu.:6.400 3rd Qu.:3.300 3rd Qu.:5.100 3rd Qu.:1.800
Max. :7.900 Max. :4.400 Max. :6.900 Max. :2.500
Species
setosa :50
versicolor:50
virginica :50
3 Pacote gtsummary
install.packages()
: instala o pacote
library()
: carrega o pacote
3.1 Tabelas
Vamos usar o banco de dados trial
do pacote gtsummary
.
library(gtsummary)
Warning: pacote 'gtsummary' foi compilado no R versão 4.4.3
head(trial)
# A tibble: 6 × 8
trt age marker stage grade response death ttdeath
<chr> <dbl> <dbl> <fct> <fct> <int> <int> <dbl>
1 Drug A 23 0.16 T1 II 0 0 24
2 Drug B 9 1.11 T2 I 1 0 24
3 Drug A 31 0.277 T1 II 0 0 24
4 Drug A NA 2.07 T3 III 1 1 17.6
5 Drug A 51 2.77 T4 III 1 1 16.4
6 Drug B 39 0.613 T4 I 0 1 15.6
tbl_summary(trial)
Characteristic | N = 2001 |
---|---|
Chemotherapy Treatment | |
Drug A | 98 (49%) |
Drug B | 102 (51%) |
Age | 47 (38, 57) |
Unknown | 11 |
Marker Level (ng/mL) | 0.64 (0.22, 1.41) |
Unknown | 10 |
T Stage | |
T1 | 53 (27%) |
T2 | 54 (27%) |
T3 | 43 (22%) |
T4 | 50 (25%) |
Grade | |
I | 68 (34%) |
II | 68 (34%) |
III | 64 (32%) |
Tumor Response | 61 (32%) |
Unknown | 7 |
Patient Died | 112 (56%) |
Months to Death/Censor | 22.4 (15.9, 24.0) |
1 n (%); Median (Q1, Q3) |
3.2 Selecionando apenas uma variável
= trial %>%
tab.trt select(trt) %>%
tbl_summary()
tab.trt
Characteristic | N = 2001 |
---|---|
Chemotherapy Treatment | |
Drug A | 98 (49%) |
Drug B | 102 (51%) |
1 n (%) |
3.3 Labels
= trial %>%
tab.trt select(trt) %>%
tbl_summary(label = trt ~ "Tratamento")
tab.trt
Characteristic | N = 2001 |
---|---|
Tratamento | |
Drug A | 98 (49%) |
Drug B | 102 (51%) |
1 n (%) |
3.4 Descritivas
= trial %>%
tab.age.stage select(age,marker) %>%
tbl_summary(label = list(age ~ "Idade",
~ "Marcador"),
marker statistic = list(age ~ "{mean} ({sd})",
~ "{min} - {max}"))
marker tab.age.stage
Characteristic | N = 2001 |
---|---|
Idade | 47 (14) |
Unknown | 11 |
Marcador | 0.00 - 3.87 |
Unknown | 10 |
1 Mean (SD); Min - Max |
3.5 Dados ausentes NA
= trial %>%
tab.age.stage select(age,marker) %>%
tbl_summary(label = list(age ~ "Idade",
~ "Marcador"),
marker statistic = list(age ~ "{mean} ({sd})",
~ "{min} - {max}"),
marker missing = "ifany",
missing_text = "Dados ausentes")
tab.age.stage
Characteristic | N = 2001 |
---|---|
Idade | 47 (14) |
Dados ausentes | 11 |
Marcador | 0.00 - 3.87 |
Dados ausentes | 10 |
1 Mean (SD); Min - Max |
3.6 Labels em negrito
= trial %>%
tab.age.stage select(age,marker) %>%
tbl_summary(label = list(age ~ "Idade",
~ "Marcador"),
marker statistic = list(age ~ "{mean} ({sd})",
~ "{min} - {max}"),
marker missing = "ifany",
missing_text = "Dados ausentes") %>%
bold_labels()
tab.age.stage
Characteristic | N = 2001 |
---|---|
Idade | 47 (14) |
Dados ausentes | 11 |
Marcador | 0.00 - 3.87 |
Dados ausentes | 10 |
1 Mean (SD); Min - Max |
3.7 Temas
# theme_gtsummary_journal() # ecolhas temas como "jama", "lancet", "nejm" e "qjecon"
# reset_gtsummary_theme() # reseta o tema para o padrão
# Definindo seu tema com português Brasil
# theme_gtsummary_language(
# language = "pt",
# decimal.mark = ",",
# big.mark = ".",
# iqr.sep = "-",
# ci.sep = "-",
# set_theme = TRUE
# )
4 Pacote flextable
library(flextable)
Warning: pacote 'flextable' foi compilado no R versão 4.4.3
Anexando pacote: 'flextable'
O seguinte objeto é mascarado por 'package:gtsummary':
continuous_summary
= as_flex_table(tab.age.stage)
tab save_as_docx(tab, path = "C:/Users/denni/OneDrive/Documentos/UFPA 2025.2/MC1_2025/tabela.docx")
save_as_pptx(tab, path = "C:/Users/denni/OneDrive/Documentos/UFPA 2025.2/MC1_2025/tabela.pptx")