OLA_MUNDO <-
function(nome, sentimento)
{
# GERANDO FRASE a ser inputada na funcao
frase <-
paste(
"Olá mundo! Me chamo",
nome,
"e estou me sentindo muito",
sentimento,
"por começar a programar em R."
)
# Parte que transforma a frase em app Shiny
## Carregando pacotes importantes para produzir o app
#install.packages("shiny")
library(shiny)
library(shinydashboard)
## Parte de interface do usuario do app
ui <-
# definindo pagina
dashboardPage(
# definindo cabecalho
dashboardHeader(title = "Bem vindo(a/e)!!!"),
# definindo barra lateral
dashboardSidebar(),
# definindo corpo do app
dashboardBody(
# colocando a frase, objeto criado la emcima, dentro de um box de fundo preto
box(frase, background = "black"),
# uma imagemzinha pra abrir um sorriso =)
img(src = "https://media.giphy.com/media/fAMztTgKyW4g0/giphy.gif")
))
## Parte reativa do app, aquela que faz mudar a interface do usuario de acordo
## com inputs dados no proprio app --- nao usamos aqui
server <- function(input, output, session)
{}
shinyApp(ui, server)
}Analisar&AcolheR: Orientações em QUARTO (qmd)
AULA 1: Olá, mundo! Olá, R!
O R é uma linguagem maravilhosa e, antes de qualquer coisa, muito importante quebrar a maldição da programação em R. Como este tutorial está sendo produzido R Markdown, que é uma linguagem de marcação Markdown para R, você deve rodar o que está dentro dos códigos para ver as coisas acontecerem. Vamos ao “Olá, mundo!”.
Aqui embaixo a gente está criando um OBJETO contendo a função que quebrará a maldição pra você. Não se preocupe tanto em entender o código que gera a função agora.
Se der erro, deve ser porque você precisa instalar o pacote shinydashboard para fazer a função anterior. Nesse caso, instale dando play aqui:
#install.packages("shinydashboard") #So rode se nao tiver o pacote shinydashboard instalado. Remova o # antes de "install" e dê o play se precisar instalar.Aqui você já vai rodar a função, substiuindo os ARGUMENTOS nome e sentimento da função pelo seu nome e sentimento que está sentindo ao programar em R. Se tudo estiver correto, voce vai ser direcionado para o seu navegador com um app em Shiny rodando no seu servidor. Caso você esteja lendo pelo documento em HTML, você deve ver um print estático do app.
OLA_MUNDO(nome = "COLOQUE SEU NOME AQUI", sentimento = "COLOQUE O SENTIMENTO QUE VOCÊ ESTÁ SENTINDO AO APRENDER A PROGRAMAR EM R")Warning: package 'shiny' was built under R version 4.2.1
Attaching package: 'shinydashboard'
The following object is masked from 'package:graphics':
box
Listening on http://127.0.0.1:6497
AULA 2: Reproduzindo uma análise do livro Manual de Investigação em Ciências Sociais
Agora você já sabe que confiabilidade e validade são muito importantes para as nossas pesquisas e para elaborar análises quantitativas. E você já sabe que variáveis precisam ser operacionalizadas para gerar indicadores que permitam análise.
A pesquisa indicada para leitura a partir da primeira aula (disponível lá no Perusall) tem o objetivo de entender a correlação que existe entre razão para estar em aula e taxa de presença de turmas em uma instituição de ensino superior.
Para isso, ele mensura a variável independente, que é um índice de razão para estar em aula e a variável dependente, que é a taxa de presença da turma. Ambas as variáveis são, portanto, numéricas e ele possui um banco de dados assim:
| Turma | Índice de razão para estar em aula | Taxa de presença da turma |
|---|---|---|
| A | NUMERO | NUMERO |
| B | NUMERO | NUMERO |
| C | NUMERO | NUMERO |
Vamos reproduzir a visualização de dados que ele fez?
Você precisa garantir que a base de dados a ser carregada está na mesma pasta que é o seu diretório de trabalho. Veja qual é o seu diretório de trabalho chamando a função getwd(). Em geral, ela será onde seu script em rmarkdown estiver mas é melhor garantir. E aí coloque a base de dados na mesma pasta que for o diretório de trabalho. Para mudar o diretório de trabalho, só chamar a função setwd() e, dentro dela, inserir o caminho do seu diretório de trabalho escolhido, lembrando que R não entende o / do Windows e sim o \\ ou /.
A base de dados está lá no Notion, na sessão de materiais de estudo e também em material anexo da aula 2)
Agora, basta trazer a base de dados para o R. Mas, antes, vamos carregar os pacotes que vão ajudar a importar e a manipular a base de dados.
library(rio) # Pacote para importar base
library(tidyverse) # Pack de pacotes que contém o dyplr, feito para manipulação de base de dados e que contém o pacote ggplot2, para gráficos. Warning: package 'tidyverse' was built under R version 4.2.1
── Attaching packages ─────────────────────────────────────── tidyverse 1.3.2 ──
✔ ggplot2 3.3.6 ✔ purrr 0.3.4
✔ tibble 3.1.8 ✔ dplyr 1.0.9
✔ tidyr 1.2.0 ✔ stringr 1.4.0
✔ readr 2.1.2 ✔ forcats 0.5.1
Warning: package 'tibble' was built under R version 4.2.1
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag() masks stats::lag()
# Lembra que sempre que o pacote não é encontrado, é porque ele não foi instalado. Só instalar com install.packages("nome do pacote") e depois dar o library(nome do pacote)Agora vamos importar:
# Abrindo base do exemplo do livro Manual de Investigacao em Ciencias Sociais
base_presencas <- import(file = "base_presencas_indice_satisfacao_Manual_Investigacao - Página1.csv")
# A função import() pertence ao pacote rio, que você já carregou antes.Se tudo der certo, você tem que ter, a essa altura, um objeto lá no Environment chamado base_presencas. A função glimpse() te ensina como estão seus dados na base e isso vai ser importante no futuro para transformar variáveis de um tipo no outro.
glimpse(base_presencas)Rows: 21
Columns: 3
$ cadeiras <chr> "A", "B", "C", "D", "E", "F", "G", "H", "I", "J…
$ taxa_presenca_media <dbl> 84.200, 84.700, 33.900, 78.500, 62.700, 35.400,…
$ indice_razoes_presenca <dbl> 77.6, 76.2, 30.0, 58.5, 53.9, 34.5, 52.5, 26.0,…
Como são duas variáveis numéricas (double / dbl), a forma mais adequada de entender possíveis correlações é o gráfico de dispersão, que ajuda a verificar correlações entre variáveis quantitativas contínuas (veremos, nas aulas, esse conceito).
# Grafico de dispersao ------
grafico1 <- base_presencas %>% ggplot(aes(x = indice_razoes_presenca, y = taxa_presenca_media)) + geom_point() + geom_smooth(method = "lm", col = "red", se = F)
grafico1`geom_smooth()` using formula 'y ~ x'
# Incrementando
grafico1_incrementado <- grafico1 + theme_classic() + ggtitle("Correlação linear entre x e y") + xlab("RAZAO PARA ESTAR EM AULA") + ylab("Taxa de presenca")
grafico1_incrementado`geom_smooth()` using formula 'y ~ x'
Gráfico interativo: use a função ggplotly do pacote plotly e veja a boniteza =). Não esqueça de instalar o pacote com install.packages("plotly") e depois carregar com library(plotly).
library(plotly)
Attaching package: 'plotly'
The following object is masked from 'package:ggplot2':
last_plot
The following object is masked from 'package:rio':
export
The following object is masked from 'package:stats':
filter
The following object is masked from 'package:graphics':
layout
ggplotly(grafico1_incrementado)`geom_smooth()` using formula 'y ~ x'
Depois, no livro, o pesquisador queria entender se os padrões de correlação eram iguais para todas as faixas de razão para ir para a escola. É possível gerar uma quebra na linha reta desenhada antes de acordo com outra variável que exista no meu banco de dados e que me ajude a categorizar meus dados.
Então, primeiro eu crio essa nova variável. Eu a chamo de categoria_presenca e digo que,
se (if) taxa_presenca_media for maior que 53.9 (escolhi esse ponto pois pareceu o ponto onde aconteceu a quebra na reta no exemplo do livro), chamar o valor dessa nova variável de alta.
Do contrário (else), dizer que o valor dessa nova variável é baixa.
Essa é a famosa função ifelse. Ela funciona assim:
ifelse(CONDICAO, VALOR DE VERDADEIRO, VALOR SE FALSO)
Para criar uma nova variável no banco de dados usamos a função mutate, do pacote dyplr, que vem com o tidyverse.
Veja:
# Criando faixas de presenca
base_presencas <- base_presencas %>%
mutate(categoria_presenca =
ifelse(taxa_presenca_media > 53.9, "alta", "baixa"))
# Veja como ficou a base de dados. Vou chamar a função datatable() do pacote DT (lembra de instalar se não tiver) e vou colocar o banco de dados dentro. Ele produz uma linda tabela em HTML.
library(DT)Warning: package 'DT' was built under R version 4.2.1
Attaching package: 'DT'
The following objects are masked from 'package:shiny':
dataTableOutput, renderDataTable
datatable(base_presencas)Agora vem o novo gráfico criado, com as linhas coloridas (argumento col da função geom_smooth) de acordo com a nova variável criada: categoria_presenca. Atenção: para usar qualquer variável do banco de dados para atribuir elementos estéticos em seu gráfico, importante chamar a função aes().Você tá dizendo para o ggplot (função para os gráficos) que a variável citada faz parte do banco de dados lá de cima, antes do operador %>%. Se não colocar o aes(), o R dirá que não encontrou o objeto mencionado, ou seja, vai ser como se a variável usada para dar cor às linhas não existisse. Com o aes(), além de ele entender que você quer colorir de acordo com uma variável existente, ele cria uma legenda pra você. Tudo pode ser alterado: legenda pode sumir, pode mudar de título, as linhas podem ganhar outras cores, etc. O ggplot é totalmente customizável. Depende só do trabalho que você quer ter e o que você precisa. Só lembra: menos é mais. Importante é comunicar bem sua informação.
Ó só que bonito:
grafico2 <- base_presencas %>% ggplot(aes(x = indice_razoes_presenca, y = taxa_presenca_media)) + geom_point() + geom_smooth(method = "lm", aes(col = categoria_presenca), se = F)
grafico2`geom_smooth()` using formula 'y ~ x'
Eu poderia olhar para ele interativamente como fiz antes, só chamar a função ggplotly novamente:
ggplotly(grafico2)`geom_smooth()` using formula 'y ~ x'
AULA 3: CONFIABILIDADE, VALIDADE, ERRO ALEATÓRIO E ERRO SISTEMÁTICO
Vimos em aula que a confiabilidade é afetada pelo erro aleatório, que é afetado pelo tamanho amostral caso a fonte de erro seja a amostragem. Então aumentar o tamanho da amostra reduz o erro aleatório e, portanto, melhora a confiabilidade. Vamos ver isso em um exemplo abaixo, em que “lançamos uma moeda” aqui no R. Uma moeda tem a probabilidade de 50% (0.5) de dar CARA e 50% de dar COROA a cada jogada. Mas olha o que acontece se a gente joga apenas 5 vezes:
# Gerando objeto com cara e coroa
moeda <- c("cara", "coroa")
set.seed(7) # Isso aqui é só pra garantir que o resultado do sorteio vai ser o mesmo sempre
# Fazendo sorteio 5 vezes, com reposicao (replace = T)
sorteio <- sample(x = moeda, size = 5, replace = T)
# Fazendo tabela com numeros dos resultados
tabela_sorteio <- table(sorteio)
# Fazendo tabela de proporcoes (probabilidades) dos resultados
tabela_probabilidades_sorteio <- prop.table(tabela_sorteio)
tabela_probabilidades_sorteiosorteio
cara coroa
0.6 0.4
Mas olha o que acontece quando o sorteio acontece 1000 vezes:
set.seed(7) # Isso aqui é só pra garantir que o resultado do sorteio vai ser o mesmo sempre
# Fazendo sorteio 1000 vezes, com reposicao (replace = T)
sorteio <- sample(x = moeda, size = 1000, replace = T)
# Fazendo tabela com numeros dos resultados
tabela_sorteio <- table(sorteio)
# Fazendo tabela de proporcoes (probabilidades) dos resultados
tabela_probabilidades_sorteio <- prop.table(tabela_sorteio)
tabela_probabilidades_sorteiosorteio
cara coroa
0.484 0.516
Ou seja, os valores chegam MUITO mais próximo de 0.5 (50%). Isso se chama LEI DOS GRANDES NÚMEROS. Quando maior uma amostra, mais as probabilidades convergem para as probabilidades REAIS (da população).
Agora vamos ver como se comporta um problema de validade afetado por ERRO SISTEMÁTICO, ou seja, por VIÉS. Aqui eu defini que, no sorteio, 0.1 seria a probabilidade de sair cara e 0.9 seria a probabilidade de sair coroa, ou seja, totalmente viesado (diferente do mundo real).
# Moeda viciada (viesada - com erro sistemático) ----------------
prop.table(table(sample(x = moeda, size = 1000000, prob = c(0.1, 0.9), replace = T)))
cara coroa
0.099985 0.900015
Repara que aqui, mesmo com 1 milhão lançamentos da moeda, em 90% delas saiu coroa. Os dados podem ser confiáveis, a “amostra” pode ser gigantesca, mas não há validade, há muito viés, porque há um erro de medida que se repete sistematicamente.
AULA DE REPOSIÇÃO NO SÁBADO 17/09: Variáveis quantitativas discretas
Aqui aprendemos as principais estatísticas usadas para variáveis quantitativas: média, variância e desvio-padrão.
Primeiro criamos uma variável discreta fictícia: IDADE. E salvamos um objeto com o tamanho da amostra.
idade <- c(30, 20, 19, 27, 47, 34)
n <- length(idade)Aí calculamos a média, dada por:
media_idade <- sum(idade)/n
# Com a funcao é:
media_idade_com_funcao <- mean(idade, na.rm = T)
# Veja que sao iguais no output:
media_idade[1] 29.5
media_idade_com_funcao[1] 29.5
Vimos como encontramos a variância na “mão”:
Primeiro fazemos um loop para calcular os desvios quadrátricos para cada valor, como no exemplo abaixo:
| Valores | Media | Desvio quadrático |
|---|---|---|
| 1 | X_barra | (1-X_barra)² |
| 2 | X_barra | (2-X_barra)² |
| 3 | X_barra | (3-X_barra)² |
Loop faz tarefa repetitiva, que é subtrair da média e depois elevar ao quadrado. Então a primeira coisa é criar um vetor vazio para o loop guardar os resultados da tarefa repetitiva.
Logo depois, fazemos o loop, dizendo que fará o processo i vezes, de 1 até n (que é 6, o tamanho da amostra, do vetor, da variável). Dentro da chave dizemos que queremos que mostre cada iteração, cada vez que a tarefa for ser repetida, com print(i). E aí, sem vírgula, atribuímos ao vetor desvios_quadraticos que criamos, em cada posição i (adicionando [i]) os novos valores que forem criados em seguida. Que valores são esses? (idade[i]-media_idade)^2, que é a subtração de cada idade pela média das idades, logo depois elevando a subtração ao quadrado.
desvios_quadraticos <- NULL
for (i in 1:n){print(i)
desvios_quadraticos[i] <- (idade[i]-media_idade)^2}[1] 1
[1] 2
[1] 3
[1] 4
[1] 5
[1] 6
Quando fazemos isso, obtemos um vetor de desvios quadráticos:
desvios_quadraticos[1] 0.25 90.25 110.25 6.25 306.25 20.25
Agora só somar todos eles e dividir ele por n-1 pra achar a variância:
variancia_idade <- sum(desvios_quadraticos)/(n-1)
variancia_idade[1] 106.7
Desvio-padrão é a raiz quadrada a variância:
desvio_padrao_idade <- sqrt(variancia_idade)Há, ainda, duas funções que acham variância e desvio-padrão muito facilmente: var() (para variância) e sd() para desvio-padrão.
var(idade) [1] 106.7
sd(idade)[1] 10.32957
REPUPLICADO EM 17/09/2022