Worshop R (Edição 2022)
Calendário
S | Data | Hora | Tema | Docente |
---|---|---|---|---|
1 | Quarta-feira, 20/4/2022 | 19h00-22h30 | Introdução ao R e ao RStudio. Introdução aos R Notebooks. Operações básicas com variáveis. | Paulo Nogueira+Matilde Rosa |
2 | Quarta-feira, 27/4/2022 | 19h00-22h30 | Funções e técnicas de programação. Transferência de dados com o Excel. Noções básicas de R Markdown. | Paulo Nogueira+Matilde Rosa |
3 | Quarta-feira, 29/4/2022 | 19h00-22h30 | Comandos gráficos. Análise de dados. Construção de R Notebooks. | Paulo Nogueira+Matilde Rosa |
4 | Quarta-feira, 3/5/2022 | 19h00-22h30 | Exercícios com análises estatísticas. | Paulo Nogueira+Matilde Rosa |
Materiais
R reference Card versão 2.0
R-markdow Cheat Sheet
Livro online:
https://r4ds.had.co.nz
Aula 1
Requisitos
Nesta Edição trabalharemos com o RStudio (https://rstudio.com/products/rstudio/download/).
O R pode ser instalado de forma independente (https://www.r-project.org/).
Se usar computador pessoal é necessário fazer a respetiva instalação.
Introdução
- Breve introdução ao RStudio
- Introdução ao R
- Breve introdução aos R Notebooks
Dados usados na aula
Os dados usados na aula
em formato csv Dados2022.csv
em formato Excel Dados2022.xlsx
Comandos feitos na aula pelo professor
Notebook feito na aula
- fonte notebook.rmd - abrindo este ficheiro no vosso RStudio é suposto conseguirem obter o respectivo notebook.
- versão da aula notebook.html
- versão da aula notebook.docx
Script da aula (feito pelo professor)
Vídeo da aula
- vai ser enviado link por e-mail.
Aula 2
Dados usados na aula
Comandos feitos na aula pelo professor
Script da aula (feito pelo professor)
Vídeo da aula
- dísponível no link para a núvem pessoal (enviado pela matilde).
Aula 3
Materiais de apoio à aula
Aula 4
Materiais de apoio
Edições anteriores
Calendário
S | Data | Hora | Tema | Docente |
---|---|---|---|---|
1 | Quarta-feira, 7/4/2021 | 21h00-22h30 | Introdução ao R e ao RStudio. Introdução aos R Notebooks. Operações básicas com variáveis. | Paulo Nogueira |
2 | Quarta-feira, 14/4/2021 | 19h00-22h30 | Funções e técnicas de programação. Transferência de dados com o Excel. Noções básicas de R Markdown. | Paulo Nogueira |
3 | Quarta-feira, 21/4/2021 | 19h00-22h30 | Comandos gráficos. Análise de dados. Construção de R Notebooks. | Paulo Nogueira |
4 | Quarta-feira, 28/4/2021 | 19h00-22h30 | Exercícios com análises estatísticas. | Paulo Nogueira |
Materiais
R reference Card versão 2.0
Livro online:
https://r4ds.had.co.nz
Aula 1
Requisitos
Nesta Edição trabalharemos com o RStudio (https://rstudio.com/products/rstudio/download/).
O R pode ser instalado de forma independente (https://www.r-project.org/).
Se usar computador pessoal é necessário fazer a respetiva instalação.
Introdução
- Breve introdução ao RStudio
- Introdução ao R
Exercício dados
dados <- read.csv2("http://pn-aulas.wikidot.com/local--files/workshop-r/Respostas2021.csv")
Vídeo da aula
Código sistematizado na aula
TPC
Relembrando o TPC para a próxima aula:
1. Criar um objeto com o vosso Nome completo
2. Criar um novo objeto com o 1º e último nome
3. Pensar como generalizar esta função para todos os nomes (independentemente do seu tamanho)
Truque: experimentem a função strsplit
Extra
Determinar a Frequência das letras do nosso nome completo.
Aula 2
Agenda dia 14-04-2021
- Apresentação, revisão e resolução do TPC
- Falar de alguns tipos de dados
- listas
- fatores
- dataframes
- tribbles
- Instalar pacotes de R
- Ler ficheiros de Excel
- Gravar ficheiros de Excel
- Introdução aos R Notebooks
- Introdução à programação de funções
Materiais de apoio à aula
Vídeo da aula
TPC
Relembrando o TPC para a próxima aula:
1. Instalar os packages necessários para correr os notebooks
2. Correr o ficheiro RMD (notebook) fornecido (em anexo)
3. Melhorar o notebook incluindo mais variáveis
Aula 3
Agenda dia 21/4/2021
- conversa sobre o TPC
- Revisão da Matéria Dada usando exemplos de dois livros
- Fazer gráficos
Materiais de apoio à aula
Vídeo da aula
TPC
TPC para a próxima aula:
- Ver o exemplos que não foram dados do Livro Machine Learning with R, 3rd Ed. (capítulo 2)
- Fazer um pequeno notebook com os gráficos da evolução da pandemia COVID em Portugal
Aula 4
Agenda dia 28/4/2021
- revisão do TPC
- Retoma da construção de gráficos
- Exemplos de aplicação de testes estatísticos
- Encerramento
Materiais de apoia à aula
$ foi acrescentado código, no primeiro chunk, desenvolvido para tornar o Nootebook independente
Vídeo da aula
S | Data | Hora | Tema | Docente |
---|---|---|---|---|
0 | Quinta-feira, 5/3/2020 | 19h00-20h30 | Aula aberta. Exercício demonstrativo do potencial do R. | Paulo Nogueira |
1 | Quinta-feira, 5/3/2020 | 21h00-22h30 | Introdução ao R e ao RStudio. Introdução aos R Notebooks. Operações básicas com variáveis. | Paulo Nogueira |
2 | Segunda-feira, 16/03/2020 | 19h00-22h30 | Funções e técnicas de programação. Transferência de dados com o Excel. Noções básicas de R Markdown. | Paulo Nogueira |
3 | Quinta-feira, 19/03/2020 | 19h00-22h30 | Comandos gráficos. Análise de dados. Construção de R Notebooks. | Paulo Nogueira |
4 | Segunda-feira, 30/03/2020 | 19h00-22h30 | Exercícios com análises estatísticas. | Paulo Nogueira |
5 | Terça-feira, 7/4/2020 | 19h00-22h30 | Avaliação | Paulo Nogueira |
Aula 1
Requisitos
Nesta Edição trabalharemos com o RStudio (https://rstudio.com/products/rstudio/download/).
O R pode ser instalado de forma independente (https://www.r-project.org/).
Se usar computador pessoal é necessário fazer a respetiva instalação.
Introdução
- Breve introdução ao RStudio
- Introdução ao R
Exercício
Para dar inicio à nossa viagem da primeira aula, tentando abarcar todas as principais potencialidades do R, comecemos por explorar o seguinte Dashboard sobre o Covid-19 este link.
Todos os comandos feitos na aula abrir
Código sistematizado na aula
fich <- "C:\\Users\\pens3s\\Desktop\\time_series_19-covid-Confirmed.txt"
casosc <- read.csv(fich)
nc <- dim(casosc)[2]
pt <- which(casosc$Country.Region=="Portugal")
dt <- names(casosc[5:nc])
dt <- substr(dt,2,nchar(dt))
datas <- as.Date(dt,format = "%m.%d.%y")
plot(datas,as.numeric(casosc[1,5:nc]))
lines(datas,as.numeric(casosc[1,5:nc]))
lines(datas,as.numeric(casosc[2,5:nc]),col="red")
points(datas,as.numeric(casosc[2,5:nc]),col="red")
lines(datas,as.numeric(casosc[pt,5:nc]),col="green")
points(datas,as.numeric(casosc[pt,5:nc]),col="green")
casos <- as.numeric(casosc[1,5:nc])
casos
diff(casos)
plot(diff(casos))
lines(diff(casos))
plot(diff(casos),type="h")
Código do notebook
Podem fazer o download aqui.
TPC
Determinar a Frequência das letras do nosso nome completo.
Aula 2
Objetivo
O objetivo desta aula era introduzir a noção como se constroem funções, se obtêm dados do Excel e algumas noções de Rmarkdown (R notebooks)
Materiais da aula
Todos os comandos da aula
Todos os comando feitos durante a aula estão aqui
versão do notebook desenvolvido
O ficheiro do notebook desenvolvido pode ser descarregado aqui.
E a versão a que chegámos pode ser visualizada aqui.
Vídeos da aula
- introduçãon (parte 1)
- Sobre o TPC (parte 2)
- Aspetos do RStudio (parte 3)
- Sobre vetores e listas (parte 4)
- Uso de ficheiro Excel (parte 5)
- Intervalo (parte 6)
- Construção de funções (parte 7)
Aula 3
Materiais da aula
Dados aula
Todos os comandos da aula
Todos os comando feitos durante a aula estão aqui
Versão do notebook desenvolvido
O ficheiro do notebook desenvolvido pode ser descarregado aqui.
E a versão a que chegámos, em html pode ser visualizada aqui e em MS Word pode ser descarregada aqui .
Vídeo da aula
Devido à interrupção havida não foi gravada a parte final da aula.
Se acharem que dava jeito fazer video por segmentos da aula, digam-me como gostariam que fosse os segmentos. para isso indiquem o tempo deste vídeo em que devo fazer o corte e como se deve chamar o segmento.
TPC
Desenvolver o notebook começado na aula com base nos dados do inquérito que estávamos a usar.
Aula 4
Materiais da aula
Dados aula
Scripts seguidos na aula
Video da aula (incompleto)
Todos os comandos da aula
Todos os comando feitos durante a aula estão aqui
Introdução
Esta página foi preparada para dar uma introdução muito rápida à Plataforma de Linguagem Estatística R.
Requisitos
Deverá instalar a versão actual do software R para o seu sistema operativo: microsoft ou MacOS (se tiver uma versão antiga, também poderá usar embora muito provavelmente não precisará deste curso introdutório).
Abrindo o R, deverá obter algo similar à seguinte imagem:
Se sim, está preparado!
Começar a usar o R como uma calculadora… e além
Como uma calculadora…
Guardar os nossos comandos que funcionam!
File —> New Script
Deverá agora ter algo similar aos comandos apresentados abaixo:
Deverá gravar regularmente os seus comandos.Na primeira vez, coloque o foco na janela de script e use File —> Save as —> choose directory and name. Depois em vezes posteriores, coloque o foco na janela de script e carregue no botão de salvar.
Verá o nome do ficheiro no topo da janela de script.
Pode voltar aos seus comandos:
- Linha por linha: colocar o cursor na primeira linha e depois pressionar "Ctrl+R" para cada linha seguinte;
- ou, um conjunto de linhas: seleccionar as linhas (destacadas a azul) e de seguida pressionar "Ctrl+R" uma vez.
Objectivos Aula 1
Após este tutorial, os alunos deverão:
- Conhecer o R e identifica a sua filosofia de trabalho
- Usar comandos de R simples [construídos em funções] (como c(), sum(), mean(), cbind(), rbind(), table(), plot(), etc.)
- Compreender os diferentes tipos de dados:
- vectores, factores, tabelas e listas
- Ler dados externos
- Possuir conhecimento básico relativamente às livrarias do R
- Possuir conhecimento básico de usar funções
Tipos de dados básicos
Vectores
Vectores são ou numéricos ou texto (estes não se misturam nos vectores).
Quando usa o comando 1:10, está a criar um vector numérico.
Pode definir objectos que seguram os vectores
meuVec1 <- 1:100
meuVec1 é agora um vector numérico!
A maneira mais simples para criar um vector é usar a função concatenar c()
meuVec2 <- c("a","b","c")
meuVec2 é agora um vector caracter/texto!
A função concatenar c() também define vectores numéricos
meuVec3 <-c(123, 4, 3652, 67, 12374)
meuVec1 é agora um vector numérico.
Usar as posições dos vectores
Pode usar qualquer parte dos valores no vector indicando apenas a sua posição nesse vector usando parêntesis rectos ([]) e essas posições.
meuVec1[10:20] – este comando vai buscar os valores do vector meuVec1 da posição 10 à posição 20
meuVec2[3] - este comando vai buscar o valor do vector meuVec2 que está na terceira posição
meuVec2[c(1,3)] - este comando vai buscar os valores do vector meuVec2 que estão nas primeira e terceira posições
Assim: está a usar um vector como parâmetro de outro vector
O que fazem os seguintes comandos?
meuVec3[4]
meuVec3[3:5]
meuVec3[c(3,5)]
Combinar vectores
Suponha que tem 5 candidatos a uma posição de emprego
Candidatos <- c("Alfredo", "Bruno", "Clara", "David", "Emilia")
e que tem as suas classificações:
Classificacoes <- c(18.3, 17.9, 18.6, 16.9, 17.7)
definidos como dois vectores independentes. Se os vectores tiverem o mesmo tamanho e ordem, facilmente poderá trabalhar com eles.
Por exemplo,
max(Classificacoes) dará a classificação mais alta.
Para ter o nome do candidato com a classificação mais alta:
Candidatos[which(Classificacoes == max(Classificacoes))]
which() é uma função genérica. O R tem uma função mais específica para o que estamos a fazer: which.max(). Então simplificaríamos desta forma:
Candidatos[which.max(Classificacoes)]
Juntar vectores
Para este propósito as funções cbind() - column bind [juntar por colunas] and rbind() - row bind [juntar por linhas] são os mais usadas
tabela1 <- cbind(Candidatos,Classificacoes)
tabela1
Uma vez misturado texto com números, tudo foi convertido a texto.
is.vector(tabela1) – NÃO!
is.matrix(tabela1) – SIM!
Matrizes são como vectores, não diferenciam tipos de dados.
Exemplo de rbind()
rbind(Candidatos,Classificacoes)
obtemos o mesmo mas transposto.
Factores
O tipo de dados factor é difícil de lidar até ser bem compreendido.
Normalmente quando importamos dados e uma coluna tem apenas texto e este é repetido muitas vezes, este é codificado internamente [no R] com números (1, 2, 3, 4,….) e os nomes são guardados como **levels()* [níveis].
Candidatos2 <- as.factor(Candidatos)
Candidatos2
cbind(Candidatos2,Classificacoes)
rbind(Candidatos2,Classificacoes)
Quadros de dados (data frames)
Um quadro de dados (data frame) é um tipo de dados que combina diferentes tipos juntos. Como o nome implica, é suposto trabalhar bem com dados estatísticos.
Por exemplo, para lidar com dados entre o R e o Excel – por via de uma library – o tipo natural de dados usado é o "data frame".
Classificacoes <- data.frame(nome=Candidatos, nota=Classificacoes)
Classificações
Classificacoes[which.max(Classificacoes[,2]),1]
Classificacoes[which.max(Classificacoes$nota),1]
Classificacoes$nome[which.max(Classificacoes$nota)]
Classificacoes2 <- data.frame(nome=Candidatos2, nota=Classificacoes)
Classificacoes2
Classificacoes2[which.max(Classificacoes2[,2]),1]
Classificacoes2$nome[which.max(Classificacoes2$nota)
Listas
Combinar tudo junto
- Ler um ficheiro de dados
Ler um ficheiro de dados
Ler um ficheiro CSV
Para simplicidade inicial
- Por favor crie uma pasta no seu computador, por exemplo "r-temp" no seu ambiente de trabalho
- De seguida, no R, faça-o o seu directório de trabalho usando File —> Change Dir .
- Depois de definir o seu directório de trabalho, guarde estes ficheiros na sua pasta do directório (use o botão direito do rato e clique "save destination link")
- Quando tiver terminado, descompacte o ficheiro
- Deverá ter dois ficheiros: HIV2016.csv e HIV2016.dta
Ler um ficheiro CSV é o mais natural para o R.
Apenas terá que saber que formato CSV está a usar:
- A maioria dos computadores europeus usam o formato europeu cujo separador é ";" – é CSV2
- Use read.csv2()
- Se está a usar o formato americano, cujo separador é "," – por defeito os dados do ECDC vêm neste formato - é CSV1
- Use read.csv()
O ficheiro CSV no seu directório de trabalho é CSV2.
read.csv2("HIV2016.csv")
Isto foi muito rápido e apenas poderá ver uma parte da base de dados. É previso criar um objecto para agarrar a base de dados.
datatemp <- read.csv2("HIV2016.csv")
agora o objecto datatemp "agarrou" os dados.
Isto foi muito simples porque definiu logo o seu directório de trabalho. Se não o tivesse feito, o código necessário seria algo como:
datatemp <- read.csv2("C:\\Users\\pnogu\\Desktop\\r-temp\\HIV2016.csv")
precisaria de indicar todo o caminho do ficheiro e - muito importante – duplicar cada "\" nesse caminho!
Agora poderá começar a analisar os dados.
names(datatemp) – dá-nos o nome das variáveis
nrow(datatemp) – dá-nos o número de registos da base de dados
Estatísticas descritivas muito básicas
table(datatemp$sex)
table(datatemp$idu)
table(datatemp$msm)
table(datatemp$seroco)
mean(datatemp$age)
sd(datatemp$age)
mean(datatemp$cd4)
mean(datatemp$cd4,na.rm=T)
sd(datatemp$cd4,na.rm=T)
summary(datatemp$cd4)
summary(datatemp$age)
Alguns gráficos básicos
hist(datatemp$age)hist(datatemp$cd4,col="yellow")
boxplot(datatemp$age,col="red")
boxplot(datatemp$age ~ datatemp$sex,col=c("pink","lightblue"))
boxplot(datatemp$age ~ datatemp$sex,col=c("pink","lightblue"),horizontal=T)
boxplot(datatemp$age ~ datatemp$sex,col=c("pink","lightblue"),horizontal=T,main="Age by sex")
boxplot(datatemp$cd4 ~ datatemp$msm,horizontal=T, main="CD4 by MSM")
boxplot(datatemp$age ~ datatemp$centrocod,horizontal=T,main="Age by centro")
pie(table(datatemp$sex))
Ler um ficheiro de dados a partir de um pacote estatístico conhecido
library(foreign)
datatemp2 <- read.dta("HIV2016.dta")
names(datatemp2)
Este ficheiro é reconhecido.
Se fosse uma versão mais recente do STATA, teria que se instalar um novo pacote chamado "readstata13".
library(readstata13)
datatemp2 <- read.dta13("HIV2016.csv")
Isto não é necessário agora.
Usando funções definida pelo utilizador
Let us define a function to get na absolute and relative frequencies for a single variable. R has certainly similar function, but let lets define ours to see how we define a function and how it is easily used.
table.freq <- function(v){
aux <- cbind(n=table(v),perc=prop.table(table(v))*100)
return
aux}
attach(datatemp2)
The attach() function allows you to refer direct to your dataset variable names. After it you can refer to age without refering it parental object (datatemp2$age)
table.freq(sex)
summary(age)
table.freq(idu)
table.freq(msm)
table.freq(sexwork)
table.freq(age2)
table.freq(seroco)
table.freq(idu)
summary(cd4)
detach(datatemp2)
Making crosstabs in R is not straight foreward. Let's install a package to do it.
library(descr)
attach(datatemp2)
#table 1 - version 1
crosstab(seroco,sex,prop.c=T,fisher=F,chisq=F)
crosstab(seroco,age2,prop.c=T,fisher=F,chisq=F)
crosstab(seroco,idu,prop.c=T,fisher=F,chisq=F)
crosstab(seroco,msm,prop.c=T,fisher=F,chisq=F)
crosstab(seroco,sexwork,prop.c=T,fisher=F,chisq=F)
crosstab(seroco,hete,prop.c=T,fisher=F,chisq=F)
crosstab(seroco,lasttestYgr,prop.c=T,fisher=F,chisq=F)
crosstab(seroco,centrocod,prop.c=T,fisher=F,chisq=F)
#table 1 - version 2
crosstab(sex,seroco,prop.r=T,fisher=F,chisq=F)
crosstab(age2,seroco,prop.r=T,fisher=F,chisq=F)
crosstab(idu,seroco,prop.r=T,fisher=F,chisq=F)
crosstab(msm,seroco,prop.r=T,fisher=F,chisq=F)
crosstab(sexwork,seroco,prop.r=T,fisher=F,chisq=F)
crosstab(hete,seroco,prop.r=T,fisher=F,chisq=F)
crosstab(lasttestYgr,seroco,prop.r=T,fisher=F,chisq=F)
crosstab(centrocod,seroco,prop.r=T,fisher=F,chisq=F)
#table 1 - version 3
vars <- c("sex","age2","idu","msm","sexwork","hete","lasttestYgr","centrocod")
table1 <- c()
for (v in vars){
table1 <- rbind(table1,crosstab(datatemp[,v],seroco)$tab)}
table1 <- cbind(table1,percent=table1[,"yes"]/table1[,"no"]*100)
dimnames(table1)[[2]] <- c("N","Seroconversions","Cumulative incidence (%)")
table1
Aula 2
Objectivos
Após este tutorial, os alunos deverão:
- Saber criar uma base de dados própria
- Possuir conhecimento básico de usar funções já existentes
- Criar as suas próprias funções
Criar uma base de dados própria
Criar base de dados em Excel
Para criar uma base de dados própria, o mais fácil é fazê-lo no Excel primeiro e posteriormente importar em R.
Vejamos a seguinte base de dados feita a partir das respostas dos alunos de um curso de R às seguintes variáveis:
Nome
Data de nascimento
Sexo
Indique o seu nível de concordância com a seguinte afirmação "Estou a gostar muito do Curso de R"
Indique o seu nível de concordância com a seguinte afirmação "O Curso de R tem um grande nível de dificuldade"
Dica: Ao atribuir nomes às variáveis, evite acentos e espaços e tente atribuir nomes simples mas com significado
Assim, vamos atribuir os seguintes nomes às variáveis:
Nome
Data
Sexo
Gosto
Dificuldade
Por questão de facilidade para posterior importação em R, tal como visto na aula 1, vamos guardar o ficheiro em formato CSV.
Importar a base de dados em R
Relembrando a aula 1, vamos importar o ficheiro em R:
nome <- " [colocar o caminho do ficheiro . nome do ficheiro .csv"
dados2 <- read.csv2(nome)
Dica: não esquecer de duplicar as barras no caminho do ficheiro
Criar as próprias funções
Vamos supor que queremos anonimizar os indivíduos da nossa base de dados. Queremos o código para cada indivíduo seja composto por: 5 letras retiradas do primeiro e último nome + data de nascimento + sexo.
Vejamos então alguns passos intermédios.
Elementos em determinadas posições
Definir o primeiro elemento do primeiro da lista
primeiro_elemento <- function(x){
return
x[[1]][1]}
a<- list(dados2$Sexo,dados2$Data)
primeiro_elemento(a)
Definir o último elemento do primeiro da lista
ultimo_elemento <- function(x){
return
x[length(x)]}
ultimo_elemento(a)
Vectores com nomes
Devolver vector com o número de nomes numa lista
n_nomes <- function(x){
return
unlist(lapply(strsplit(as.character(x)," "), length))}
Devolver um vetor com o primeiro nome de cada nome completo numa lista
primeiro_nome <- function(x){
return
unlist(lapply(strsplit(as.character(x)," "), primeiro_elemento))}
Devolver um vetor com o último nome de cada nome completo numa lista
ultimo_nome <- function(x){
return
unlist(lapply(strsplit(as.character(x)," "),ultimo_elemento))}
n_nomes (dados2$Nome)
primeiro_nome (dados2$Nome)
ultimo_nome (dados2$Nome)
Alguns passos para a função final
1. Letras do nome
Construir vector com as 5 letras retiradas do primeiro e último nome (regras slk)
slk_letras_nome <- function(x){
pn <- primeiro_nome(x)
un <- ultimo_nome(x)
un[pn==un] <- "999"
un <- toupper(substr(un,1,3))
pn <- toupper(substr(pn,4,5))
un[nchar(un)==2] <- paste(un[nchar(un)==2],2,sep="")
un[nchar(un)==1] <- paste(un[nchar(un)==2],22,sep="")
pn[nchar(pn)==0] <- "99"
pn[nchar(pn)==1] <- paste(pn[nchar(pn)==1],2,sep="")
return
paste(pn,un,sep="")}
slk_letras_nome (dados2$Nome)
2. Data de nascimento
Converter datas em texto para objetos tipo data (procura vários formatos de data)
converte_datas <- function(x){
datas <- as.Date(as.character(x),"%d-%m-%Y")
datas[is.na(datas)] <- as.Date(as.character(x[is.na(datas)]),"%d/%m/%Y")
datas[is.na(datas)] <- as.Date(as.character(x[is.na(datas)]),"%m/%d/%Y")
return
datas}
converte_datas (dados2$Data)
Converter datas para o formato usado pelo slk
slk_dataNasc <- function(x){
return
format(converte_datas(x),"%Y%m%d")}
3. Sexo
Converter sexo em factor para vetor de texto
converte_sexo <- function(x){
aux <- as.character(x)
aux[x=="Masculino"] <- 1
aux[x=="Feminino"] <- 2
aux[is.na(aux)] <- 9
return
aux}
converte_sexo(dados2$Sexo)
Função final
Construir vetor com os códigos SLK 581
slk_581 <- function(xnome,ydatan,zsexo){
return
paste(slk_letras_nome(xnome),slk_dataNasc(ydatan),converte_sexo(zsexo),sep="")}
slk_581 (dados2$Nome,dados2$Data,dados2$Sexo)
Definir função final que nos dá os dados anonimizados
dados_anonimizados <- data.frame(slk=slk_581(dados2$Nome,dados2[,2],dados2$Sexo),gosta=dados2[,4],dificil=dados2[,5])
dados_anonimizados
Aula 3
Objectivos
Após este tutorial, os alunos deverão:
• Possuir conhecimento básico de usar funções já existentes
• Criar as suas próprias funções
• Saber desenhar eles próprios gráficos específicos (em particular, gráficos tendo como base retângulos e quadrados)
Desenhar retângulos
Vamos começar por desenhar um retângulo simples com quatro retângulos no seu interior.
#retângulo à volta
plot(0,0,xlim=c(-.2,1.2),ylim=c(0,1),type="n",xaxt="n",yaxt="n",axes = F, frame.plot = F,xlab="",ylab="",main="Portugal - DALYs, 2015")
a <- .2
b <- .3
#4 retângulos no seu interior
rect(0,0,1,1)
rect(0,0,a,b,col="blue")
rect(0,1-a,b,1,col="lightblue")
rect(1-a,1-b,1,1,col="darkblue")
rect(1-b,0,1,a,col="pink")
Função genérica para retângulos
#Desenhar retângulos geral: desenha retângulos definindo tamanho da base e altura, pode escolher o canto e
fazer rotação (trocar a base pela altura).
**rectg <- function(a,b,xmax=1,ymax=1,ta=0,tb=0,canto=1,rot=F,col="white",lty=1,frame=T){
x <- a
y <- b
tx <- ta
ty <- tb
if (rot){
x <- b
y <- a
tx <- tb
ty <- ta}
if (frame) rect(0,0,xmax,ymax,lty=lty)
if (canto==1)rect(0+tx,0+ty,x+tx,y+ty,col=col,lty=lty)
if (canto==2)rect(0+ty,ymax-x-tx,y+ty,ymax-tx,col=col,lty=lty)
if (canto==3)rect(xmax-x-tx,ymax-y-ty,xmax-tx,ymax-ty,col=col,lty=lty)
if (canto==4)rect(xmax-y-ty,0+tx,xmax-ty,x+tx,col=col,lty=lty)}
#Exemplos
plot(0,0,xlim=c(-.2,1.2),ylim=c(0,1),type="n",xaxt="n",yaxt="n",axes = F, frame.plot = F,xlab="",ylab="",main="rectangulo geral")
rectg(0,0)
rectg(a,b)
rectg(a,b,canto=2)
rectg(a,b,canto=3)
rectg(a,b,canto=4)**
rectg(b,a)
rectg(a,b,rot=T)
rectg(a,b,rot=T,canto=2)
rectg(a,b,rot=T,canto=3)
rectg(a,b,rot=T,canto=4)
plot(0,0,xlim=c(-.2,1.2),ylim=c(0,1),type="n",xaxt="n",yaxt="n",axes = F, frame.plot = F,xlab="",ylab="",main="rectangulo geral")
rectg(0,0)
rectg(a,b,0.5,0.6,ta=0.1,tb=.05)
rectg(a,b,0.5,0.6,ta=0.1,tb=.05,canto=2)
rectg(a,b,0.5,0.6,ta=0.1,tb=.05,canto=3)
rectg(a,b,0.5,0.6,ta=0.1,tb=.05,canto=4)
rectg(a,b,0.5,0.6,ta=0.1,tb=.05,rot=T)
rectg(a,b,0.5,0.6,ta=0.1,tb=.05,rot=T,canto=2)
rectg(a,b,0.5,0.6,ta=0.1,tb=.05,rot=T,canto=3)
rectg(a,b,0.5,0.6,ta=0.1,tb=.05,rot=T,canto=4)
Função genérica para quadrados
Desenhar um quadrado mais não é que definir o tamanho da base igual à altura.
# Desenhar quadrado geral: simplificação da função rectangulo geral; fazendo o tamanho da base igual à altura.
quadradog <- function(a,xmax=1,ta=0,tb=0,canto=1,rot=F,col="white",lty=1,frame=F){
rectg(a,a,xmax=xmax,ymax=xmax,canto=canto,rot=rot,col=col,frame=frame,ta=ta,tb=tb,lty=lty)}
#Exemplos
plot(0,0,xlim=c(-.2,1.2),ylim=c(0,1),type="n",xaxt="n",yaxt="n",axes = F, frame.plot = F,xlab="",ylab="",main="Quadrado geral")
quadradog(.8)
quadradog(.5)
quadradog(.3,col="green")
quadradog(.2,col="white")
quadradog(.1,tb=.3,col="red")
quadradog(.1,ta=.3,col="red")
quadradog(.3,ta=.5,col="yellow")
Funções estruturantes para a Morbilidade Hospitalar
Gráficos base
Algumas siglas importantes a saber:
US – Utentes Saídos
Int – Internamentos
DI – Dias de Internamento
DC – Day Cases (utentes que ficaram menos de 24horas internados)
O – Óbitos
DesenhaCaixasMH <- function(us,int,dc,o,max,titulo="MH - episódios",ano="",canto=4,ta=0,tb=0,cores=c(),out=T){
if (length(cores)==0) cores <- c("lightgreen","green", "darkgreen")
if (canto==1){
ta0=tb
tb0=ta}
if (canto==2){
ta0=-ta
tb0=tb}
if (canto==3){
ta0=tb
tb0=-ta}
if (canto==4){
ta0=ta
tb0=-tb}
if (out)quadradog(1,canto=canto,col="lightgrey",ta=ta0,tb=tb0,lty=3)
quadradog(us/max,canto=canto,col=cores[1],ta=ta0,tb=tb0)
quadradog(int/max,canto=canto,col=cores[2],ta=ta0,tb=tb0)
if (o <= dc){
quadradog(dc/max,canto=canto,col=NA,ta=ta0,tb=tb0,lty=2)
quadradog(o/max,canto=canto,col=cores[3],ta=ta0,tb=tb0)}
if (o > dc){
quadradog(o/max,canto=canto,col=cores[3],ta=ta0,tb=tb0)
quadradog(dc/max,canto=canto,col=NA,ta=ta0,tb=tb0,lty=2)}}
# Definir o texto principal do gráfico
TextoPrincipalHM <- function(ano="",cex=0.8,ta=0,tb=0,loc=NA,m=1){
if (!is.na(loc))text(loc+tb,ta+0.5,paste(ano),cex=2*cex)}
# Definir o texto dos eixos
TextoEixosHM <- function(us,int,dc,o,max,ano="",canto=4,cex=0.8,ta=0,tb=0,loc=NA,m=1,TOp=2){
if(TOp==1){
epson <- 0.05
if (!is.na(loc)){
text(loc+tb,((us+int)/(2*max))*m+ta,paste(us,"US"),cex=cex)
text(loc+tb,((int+dc)/(2*max))*m+ta,paste(int,"Int"),cex=cex)
if (o <= dc){
if (abs(o/(2*max)-dc/(2*max))<=epson)text(loc+tb,(((int+dc)/2+dc)/(2*max))*m+ta,paste(dc,"DC"),cex=cex)
if (abs(o/(2*max)-dc/(2*max))>epson)text(loc+tb,(dc/max)*m+ta,paste(dc,"DC"),cex=cex)
text(loc+tb,(o/(2*max)+ta)*m,paste(o,"Ob"),cex=cex)}
if (o > dc){
if (abs(o/(2*max)-dc/(2*max))<=epson)text(loc+tb,(((int+o)/2+o)/(2*max))*m+ta,paste(o,"Ob"),cex=cex)
if (abs(o/(2*max)-dc/(2*max))>epson)text(loc+tb,(o/max)*m+ta,paste(o,"Ob"),cex=cex)
text(loc+tb,(dc/(2*max))*m+ta,paste(dc,"DC"),cex=cex)}
}}
if(TOp==2){
if (!is.na(loc)){
text(loc+tb,.6+ta,paste(us,"US","\n",int,"Int","\n",dc,"DC","\n",o,"Ob"),cex=cex)}}}
# Definição do gráfico final, com as funções acima
graficoMH_independente <- function(d,max=NA,titulo="MH - episódios",ano="",canto=4,cex=0.7,ta=0,tb=0,subt="",locTEixo=1.15,locTLg=-0.15,m=1,plt=T,TOp=2){
iperc=1.1
cores <- c("lightgreen","green", "darkgreen")
n <- nrow(d)
max0 <- max
if (is.na(max)) max0 <- max(d$US)
if (plt) plot(0,0,xlim=c(-.5,1.5),ylim=c(-0.5,n),type="n",xaxt="n",yaxt="n",axes = F, frame.plot = F,xlab="",ylab="",main=titulo,sub=subt)
for (i in 1:n){
DesenhaCaixasMH(us=d$US[i],int=d$int[i],dc=d$DC[i],o=d$O[i],max=iperc*max0,ta=i-1,tb=tb,ano=d$ano.x[i],canto=canto)
TextoEixosHM(us=d$US[i],int=d$int[i],dc=d$DC[i],o=d$O[i],max=iperc*max0,ta=i-1,ano=d$ano.x[i],cex=cex,canto=canto,loc=locTEixo,m=m,TOp=TOp)
TextoPrincipalHM(ta=i-1,ano=d$ano.x[i],cex=cex,loc=locTLg,m=m)}}
dados <- data.frame(ano.x=c(2010,2011,2012,2013,2014,2015),
US=c(6670,7256,7579,7937,8469,9402),DI=c(75625,79173,80357,82463,85794,95284),
DC=c(354,518,632,631,906,1675),O=c(541,631,671,664,711,695),int=c(6485,6929,7228,7582,7922,8446))
Dados
graficoMH_independente(dados,TOp=1)
graficoMH_independente(dados)
Gráficos duplos
# Criação de um gráfico duplo (ideal para comparações de dados) – VERSÃO 1
graficoMH_duplo <- function(d1,d2,proporcional=T,titulo="MH - episódios",ano="",canto=c(4,1),cex=c(0.6,0.6),ta=0,tb=0,subt="",locTEixo=1.15,locTLg=-0.15,plt=T){
n <-max(nrow(d1),nrow(d2))
plot(0,0,xlim=c(-.5,3.9),ylim=c(0,n),type="n",xaxt="n",yaxt="n",axes = F, frame.plot = F,xlab="",ylab="",main=titulo,sub=subt)
if (proporcional){
m1 <- 1
m2 <- 1
max1 <- max(d1$US)
max2 <- max(d2$US)
max0 <- max(max1,max2)
if (max1<max0){
m1 <- max0/max1
max1 <- max0}
if (max2<max0){
m2 <- max0/max2
max2 <- max0}
}
if (!proporcional){
max1 <- NA
max2 <- NA
}
graficoMH_independente(d1,canto=canto[1],locTEixo=1.25,locTLg=-0.3,max=max1,m=m1,plt=F,cex=cex[1])
graficoMH_independente(d2,canto=canto[2],locTEixo=1.75,locTLg=3.3,max=max2,m=m2,plt=F,tb=2,cex=cex[2])}
#Exemplo
dados <- data.frame(ano.x=c(2010,2010,2010,2011,2011,2012,2012,2013,2013,2014,2014,2015,2015),
tipo_p_s=c("A","P","S","P","S","P","S","P","S","P","S","P","S"),
US=c(5,586,6079,545,6711,487,7092,545,7392,487,7982,429,8973),
DI=c(5,3268,72352,2848,76325,2620,77737,3271,79192,2887,82907,2759,92525),
DC=c(0,17,337,26,492,31,601,37,594,16,890,18,1657),
O=c(0,14,527,33,598,16,655,31,633,22,689,19,676),
int=c(5,586,5894,545,6384,486,6742,545,7037,487,7435,429,8017))
dados
graficoMH_duplo(dados[dados$tipo_p_s=="S",c(1,3:7)],dados[dados$tipo_p_s=="P",c(1,3:7)],T)
graficoMH_duplo(dados[dados$tipo_p_s=="P",c(1,3:7)],dados[dados$tipo_p_s=="S",c(1,3:7)],T)
graficoMH_duplo(dados[dados$tipo_p_s=="S",c(1,3:7)],dados[dados$tipo_p_s=="P",c(1,3:7)],F)
graficoMH_duplo(dados[dados$tipo_p_s=="P",c(1,3:7)],dados[dados$tipo_p_s=="S",c(1,3:7)],F)
# Criação de um gráfico duplo – VERSÃO 2
graficoMH_duploV2 <- function(lista,proporcional=T,
titulo="MH - episódios",ano="",
subt="US - Utentes saídos; DI - Dias de Internamento; DC - Day Cases; O - Óbitos; Int - Internamentos",
canto=c(4,1),cex=c(0.6,0.6),ta=0,tb=c(0,2),
locTEixo=c(1.25,1.75),locTLg=c(-0.3,3.3),plt=T){
plot(0,0,xlim=c(-.5,3.9),ylim=c(0,6),type="n",xaxt="n",yaxt="n",axes = F,
frame.plot = F,xlab="Diagnóstico Principal - Diagnósticos Secundários",ylab="",main=titulo,sub=subt,cex.sub=0.6)
max0 <- maxSubLista(lista,"US")
n <-length(lista)
for (i in 1:n){
m1 <- 1
if (proporcional){
max <- max(lista[[i]]$US)
if (max<max0){
m1 <- max0/max
max <- max0}
}
if (!proporcional){max <- NA}
graficoMH_independente(lista[[i]],canto=canto[i],tb=tb[i],locTEixo=locTEixo[i],locTLg=locTLg[i],max=max,m=m1,plt=F,cex=cex[i])}
}
a <- list(dados[dados$tipo_p_s=="P",c(1,3:7)],dados[dados$tipo_p_s=="S",c(1,3:7)])
graficoMH_duploV2(a)
graficoMH_duploV2(a,proporcional=F)
graficoMH_duploV2(a,proporcional=T)
graficoMH_duploV2(a,ta=0,tb=c(0,1.5),locTEixo=c(1.25,2.75),locTLg=c(-0.3,3.3))
graficoMH_duploV2(a,ta=0,tb=c(0,1.5),
locTEixo=c(1.25,2.75),locTLg=c(-0.3,3.3),,proporcional=F)
Funções auxiliares
#Função que devolve um item de um determinado elemento de uma listasubListaItem <- function(l,pos1,pos2){
aux <- l[[pos1]][pos2]
return
aux}
#Função que devolve um item de cada um dos elementos de uma lista
subLista <- function(l,pos){
n <- length(l)
aux <- sapply(1:n,function(x){subListaItem(l,x,pos)})
return
aux}
#Função que devolve o valor máximo de todos os elementos devolvidos pela função subLista
maxSubLista <- function(l,pos){
aux <- max(unlist(subLista(l,pos)))
return
aux}
#Exemplo
a <- list(dados[dados$tipo_p_s=="P",c(1,3:7)],dados[dados$tipo_p_s=="S",c(1,3:7)])
subListaItem(a,1,2)
subLista(a,2)
maxSubLista(a,2)
maxSubLista(a,"US")
Gráficos multi
#Constrói gráfico com coluna para cada elemento/tabela da lista
graficoMH_multi <- function(lista,proporcional=T,op=1,
titulo="MH - episódios",ano="",
subt="US - Utentes saídos; DI - Dias de Internamento; DC - Day Cases; O - Óbitos; Int - Internamentos",
xlab="Diagnóstico principal",
canto=NA,locTEixo=NA,locTLg=NA,cex=0.6,ta=0,tb=c(0,2),plt=T){
n <-length(lista)
maxl <- maxLinhasVectorListas(lista)
if (op==1){
canto <- rep(4,n)
cex <-rep(cex,n)
tb=1.5*(0:n)
locTEixo <- 1.25+1.5*(0:n)
locTLg=c(-0.3,n*1.5+.3)}
#canto=c(4,1)
#locTEixo=c(1.25,1.75),locTLg=c(-0.3,3.3)
plot(0,0,xlim=c(-.5,n*1.5+.9),ylim=c(-0.3,maxl),type="n",xaxt="n",yaxt="n",axes = F,
frame.plot = F,xlab=xlab,ylab="",main=titulo,sub=subt,cex.sub=0.6)
max0 <- maxSubLista(lista,"US")
for (i in 1:n){
m1 <- 1
if (proporcional){
max <- max(lista[[i]]$US)
if (max<max0){
m1 <- max0/max
max <- max0}
}
if (!proporcional){max <- NA}
graficoMH_independente(lista[[i]],canto=canto[i],tb=tb[i],locTEixo=locTEixo[i],locTLg=locTLg[i],max=max,m=m1,plt=F,cex=cex[i])}
}
# Exemplo
graficoMH_multi(a)
graficoMH_multi(a,F)
Vejamos agora esta função aplicada a dados mais completos.
# Mais dados
dados <- data.frame(ano.x=c(2010,2010,2010,2010,2010,2010,2010,2010,2010,2010,2010,2010,2010,2010,2010,2011,2011,2011,2011,2011
,2011,2011,2011,2011,2011,2011,2011,2011,2012,2012,2012,2012,2012,2012,2012,2012,2012,2012,2012,2012,2012,2012,2013,2013,
2013,2013,2013,2013,2013,2013,2013,2013,2013,2013,2013,2013,2014,2014,2014,2014,2014,2014,2014,2014,2014,2014,2014,2014,
2014,2014,2015,2015,2015,2015,2015,2015,2015,2015,2015,2015,2015,2015,2015),
tipo_p_s=c("A","A","P","P","P","P","P","P","S","S","S","S","S","S","S","P","P","P","P","P","P","P","S","S","S","S","S",
"S","P","P","P","P","P","P","P","S","S","S","S","S","S","S","P","P","P","P","P","P","P","S","S","S","S","S","S","S","P",
"P","P","P","P","P","S","S","S","S","S","S","S","S","P","P","P","P","P","P","S","S","S","S","S","S","S"),
getário=c("[25,45)","[45,65)","[1,5)","[15,25)","[25,45)","[45,65)","[5,15)","[65,120)","[0,1)","[1,5)","[15,25)",
"[25,45)","[45,65)","[5,15)","[65,120)","[0,1)","[1,5)","[15,25)","[25,45)","[45,65)","[5,15)","[65,120)","[0,1)",
"[15,25)","[25,45)","[45,65)","[5,15)","[65,120)","[0,1)","[1,5)","[15,25)","[25,45)","[45,65)","[5,15)","[65,120)",
"[0,1)","[1,5)","[15,25)","[25,45)","[45,65)","[5,15)","[65,120)","[0,1)","[1,5)","[15,25)","[25,45)","[45,65)","[5,15)",
"[65,120)","[0,1)","[1,5)","[15,25)","[25,45)","[45,65)","[5,15)","[65,120)","[1,5)","[15,25)","[25,45)","[45,65)",
"[5,15)","[65,120)","[0,1)","[1,5)","[15,25)","[25,45)","[45,65)","[5,15)","[65,120)","","[1,5)","[15,25)","[25,45)",
"[45,65)","[5,15)","[65,120)","[0,1)","[1,5)","[15,25)","[25,45)","[45,65)","[5,15)","[65,120)"),
US=c(3,2,2,16,255,225,13,75,13,3,89,2534,2392,12,1036,1,3,23,230,207,10,71,16,61,2631,2819,14,1170,1,3,18,191,204,8,62,
5,1,85,2478,3246,12,1265,1,4,11,184,247,10,88,7,5,81,2306,3565,16,1412,1,15,137,257,4,73,1,1,70,2221,4092,7,1589,1,1,13,
130,215,4,66,7,1,67,2229,4904,14,1751),
DI=c(3,2,6,40,910,1510,111,691,79,6,571,33678,26595,238,11185,3,14,133,839,994,33,832,57,357,31296,32166,160,12289,5,10,
99,743,1288,42,433,19,1,640,27821,35992,372,12892,14,20,36,745,1598,41,817,110,19,968,26291,37438,182,14184,22,51,703,
1585,20,506,2,0,1221,23175,41153,264,17092,0,2,43,682,1227,21,784,41,3,680,23541,48895,149,19216),
DC=c(0,0,0,0,13,4,0,0,0,1,5,151,142,1,37,0,0,1,16,7,1,1,0,6,219,203,0,64,0,0,2,15,12,0,2,0,0,4,231,270,3,93,0,0,2,18,13,
0,4,0,0,2,231,266,1,94,0,0,7,7,0,2,0,1,4,314,468,1,102,0,0,1,9,5,0,3,0,0,4,410,1097,0,146),
O=c(0,0,0,0,2,6,0,6,0,0,0,169,219,1,138,0,0,1,5,13,0,14,0,0,177,267,0,154,0,0,1,5,6,0,4,0,0,1,148,317,0,189,0,0,0,5,15,0,
11,0,0,0,132,327,0,174,0,0,5,13,0,4,0,0,2,107,365,0,215,0,0,0,3,8,0,8,0,0,1,96,361,0,218),
int=c(3,2,2,16,255,225,13,75,13,2,87,2456,2312,11,1013,1,3,23,230,207,10,71,16,55,2492,2684,14,1123,1,3,18,190,204,8,62,
5,1,83,2353,3080,11,1209,1,4,11,184,247,10,88,7,5,79,2168,3408,15,1355,1,15,137,257,4,73,1,0,66,2080,3758,6,1524,0,1,13,
130,215,4,66,7,1,65,2077,4207,14,1646))
ge <- c("[0,1)","[1,5)","[5,15)","[15,25)","[25,45)","[45,65)","[65,120)")
lista_aux <- SelecionaGrupos(dados[dados$tipo_p_s=="P",],ge,"getário",c(1,4:8))
graficoMH_multi(lista_aux)
text(1.5*(0:6)+0.5,-.25,ge)
lista_aux <- SelecionaGrupos(dados[dados$tipo_p_s=="S",],c("[0,1)","[1,5)","[5,15)","[15,25)","[25,45)","[45,65)","[65,120)"),"getário",c(1,4:8))
graficoMH_multi(lista_aux,xlab="Diagnósticos secundários")
text(1.5*(0:6)+0.5,-.25,ge)
Funções auxiliares
# SelecionaGrupos - Constrói lista de tabelas
SelecionaGrupos <- function(l,grupos,var,colunas){
aux <- lapply(grupos,function(x){l[l[var]==x,colunas]})
return
aux}
#Exemplo
#Separar por 2 grupos/listas: diagnósticos principais e secundários (excepto coluna 2)
SelecionaGrupos(dados,c("P","S"),"tipo_p_s",c(1,3:7))
#Separar por 7 grupos/listas: os vários grupos etários (excepto coluna 2)
SelecionaGrupos(dados,c("[0,1)","[1,5)","[5,15)","[15,25)","[25,45)","[45,65)","[65,120)"),"getário",c(1,4:8))
**# maxLinhasVectorListas - conta o número máximo de linhas das tabelas que constituem os elentos da lista
maxLinhasVectorListas <- function(l){
n <- length(l)
aux <- max(sapply(1:n,function(x){nrow(l[[x]])}))
return
aux}
#Exemplos
lista_aux <- SelecionaGrupos(dados[dados$tipo_p_s=="S",],c("[0,1)","[1,5)","[5,15)","[15,25)","[25,45)","[45,65)","[65,120)"),"getário",c(1,4:8))
maxLinhasVectorListas(lista_aux)**
lista_aux <- SelecionaGrupos(dados[dados$getário=="[65,120)",],c("P","S"),"tipo_p_s",c(1,4:8))
maxLinhasVectorListas(lista_aux)
Mais dados
**dados <- data.frame(ano.x=c(2010,2011,2012,2013,2014,2015),US=c(84514,88789,91958,93668,95702,99348),
DI=c(1118833,1128825,1167933,1172246,1191782,1244200),DC=c(3949,4978,5592,6172,5884,6803),
O=c(16576,17047,18454,18455,18127,19330),int=c(82881,86083,89046,90310,92653,95401))
dados <- data.frame(ano.x=c(2010,2010,2010,2011,2011,2012,2012,2013,2013,2014,2014,2015,2015),
tipo_p_s=c("A","P","S","P","S","P","S","P","S","P","S","P","S"),
US=c(260,48320,35934,49238,39551,49614,42344,48189,45479,49149,46553,49449,49899),
DI=c(2765,507264,608804,510440,618385,510443,657490,495547,676699,499456,692326,501216,742984),
DC=c(0,1734,2215,1606,3372,1735,3857,1680,4492,1730,4154,1685,5118),
O=c(46,9436,7094,9518,7529,10143,8311,9740,8715,9308,8819,9759,9571),
int=c(260,48269,34352,49208,36875,49588,39458,48173,42137,49125,43528,49441,45960))**
Aula 4
trabalho prático em sala e apresentação para avaliação
Aula 5
d <- read.csv("http://pn-aulas.wikidot.com/local--files/curso-r/Formul%C3%A1rio%20sem%20t%C3%ADtulo.csv",encoding = "UTF-8")
library(openxlsx)
cam <- "C:\\Users\\paulonogueira\\Desktop\\lixo\\"
write.xlsx(d,paste0(cam,"questionario2018.xlsx"))
#criar um ficheiro de excel com as frequencias de todas as variáveis
wb <- createWorkbook("temp")
names(d) <- c("Data","Nome","Data de nascimento","Sexo","Gosto muito do Curso de R","O R é muito difil")
sapply(names(d),function(x){addWorksheet(wb,x)})
sapply(names(d),function(y){
a <- table(d[,y])
writeData(wb,y,data.frame(a[rev(order(as.numeric(a)))]))})
saveWorkbook(wb,paste0(cam,"questionário2018_freqs.xlsx"),overwrite = T)
datas.atuais <- as.Date(substr(d$Data,1,10))
datas.nasc <- as.Date(as.character(d$`Data de nascimento`))
idade <- trunc(as.numeric(difftime(datas.atuais, datas.nasc , units = c("days")))/365.248)
idade[idade==0]<- NA
sexo <- c("M","F","F","F","M","F","F","F","M","F")
- estatisticas sumárias
summary(idade)
boxplot(idade)
hist(idade)
- Testes estatísticos
- testar normalidade
ks.test(idade,"pnorm")
shapiro.test(idade)
- teste t
t.test(idade[sexo=="M"],idade[sexo=="F"])
t.test(idade ~ sexo)
kruskal.test(idade[!is.na(idade)], factor(sexo[!is.na(idade)]))
boxplot(idade ~ sexo)
- anova
oneway.test(idade ~ d$`Gosto muito do Curso de R`)
summary(aov(idade~d$`Gosto muito do Curso de R`))
plot(aov(idade~d$`Gosto muito do Curso de R`),2)
shapiro.test(aov(idade~d$`Gosto muito do Curso de R`)$residuals)
kruskal.test(idade[!is.na(idade)], d$`Gosto muito do Curso de R`[!is.na(idade)])
require(car)
leveneTest(idade ~ d$`Gosto muito do Curso de R`)
aov(idade~sexo)
summary(aov(idade~sexo))
plot(aov(idade~sexo),2)
- aula 1
- aula 2
- aula 3
A Disponibilizar
Aula 1
ficheiro_spss
ficheiro_csv
https://dl.dropboxusercontent.com/u/8854237/dados.csv
Materiais de versão mais antiga do Workshop R
Aula 2
Dúvida da aula: como colapsar os elementos de um vector de texto?
Considerem o seguinte exemplo em R
a <- c("A", "CD","BEF")
a
[1] "A" "CD" "BEF"
paste(a)
[1] "A" "CD" "BEF"
?paste
paste(a,collapse="")
[1] "ACDBEF"
paste(a,collapse="A")
[1] "AACDABEF"
paste(a,collapse="_")
[1] "A_CD_BEF"