# É er(R)ando que se aprende - 3 Uma introdução a linguagem R para análise de dados - 3. Parte 3: http://bit.ly/aprendeerrando3 Parte 4: http://bit.ly/aprendeerrando4 Parte 1: http://bit.ly/aprendeerrando Parte 2: http://bit.ly/aprendeerrando2 ## Obtenção de dados > Link para download dos conjuntos de dados: https://drive.google.com/drive/folders/1Up7qIFrxjaAlCkdOQZpNrEM_JOYIQvsZ?usp=sharing ##### paises: > Area, tamanho populacional, taxas de nascimento e óbito, expectativa de vida e forma de governo de 249 países ##### dados_politicos: > Conjunto de dados políticos e institucionais de 36 países ```r #Carregando texto separado por tabulação (.tsv ou .txt) t <- read.table(f, header = TRUE, sep = "\t", stringsAsFactors = FALSE) head(t) tail(t) #Carregando texto separado por vírgula (.csv) v <- read.table(f, header = TRUE, sep = ",", stringsAsFactors = FALSE) head(v) tail(v) #Carregando arquivo do excel (.csv) install.packages("readxl") library("readxl") e <- read_excel(f, sheet = 1, col_names = TRUE) head(e) tail(e) str(e) # OU install.packages("XLConnect") install.packages("XLConnectJars") library("XLConnect") library("XLConnectJars") e1 <- readWorksheetFromFile(f, sheet = 1, header = TRUE) head(d) #Criando um arquivo excel no R writeWorksheetToFile(e2, e, sheet = "myData", clearSheets = TRUE) ``` ### Explorando os dados ```r d <- read.csv(f, header = TRUE, sep = ",", stringsAsFactors = FALSE) head(d) summary(d) names(d) #Como saber a densidade populacional dos países? d$density <- d$population/d$area #Quais são os 10 países com maior densidade populacional? d <- d[order(-d$density), ] d[1:10, ] #E os países com menor densidade populacional? d <- d[order(d$density), ] d[1:10, ] #Extraindo os países que começam com "A" até "F" e calculando a média e o tamanho populacional desses países new <- d[grep("^[A-F]", d$country), ] summary(new) mean(new$population, na.rm = TRUE) mean(new$area, na.rm = TRUE) #Criando um histograma com os dados em log() de tamanho populacional e area par(mfrow = c(1, 2)) # Nos dá dois paineis attach(d) # Com essa função, não precisamos usar $ para acessar as colunas do conjunto de dados hist(log(population), freq = FALSE, col = "red", main = "População", xlab = "log(Tamanho populacional)", ylab = "density", ylim = c(0, 0.2)) hist(log(area), freq = FALSE, col = "red", main = "Tamanho da area", xlab = "log(Area)", ylab = "density", ylim = c(0, 0.2)) #Inserindo linha de média e estimativa de distribuição par(mfrow = c(1, 1)) # Estabelece um painel e redesenha o histograma acima de log(Tamanho populacional) hist(log(population), freq = FALSE, col = "white", main = "Histograma com média e densidade", xlab = "log(Tamanho populacional)", ylab = "Densidade", ylim = c(0, 0.2)) abline(v = mean(log(population), na.rm = TRUE), col = "blue") lines(density(log(population), na.rm = TRUE), col = "green") detach(d) ``` ### Medidas de tendência e variância > São essenciais para analises descritivas e teste de hipótese ##### Conceitos importantes: * População: Conjunto com todos os dados do conjunto de dados; * Amostra: Uma ou mais observações da população; * Parâmetro: Uma característica mensurável na população; * Estatística: Uma característica mensurável na amostra. #### Medidas de tendência * Moda: Valor mais comum observado; * Mediana: Valor medio em uma seria ordenado de valores; * Média: Soma de todos os valores, divido pela quantidade de valores #### Medidas de disperção * Amplitude: Diferença entre o máximo e mínimo; * Interquartil: 25th até 75th quartil; ```r summary() ``` * Soma dos quadrados: Soma dos desvios quadrados da média ![](https://i.imgur.com/rpv114Z.png) * Variância populacional: Média da soma dos quadrados de toda a população; ![](https://i.imgur.com/JuIZZDS.png) * Variância amostral: Média da soma dos quadrados da amostra. Aqui perde-se um grau de liberdade; ![](https://i.imgur.com/9t4nH0Q.png) * Desvio padrão populacional: Raiz quadrada da variância populacional; ![](https://i.imgur.com/89ci8nW.png) * Desvio padrão amostral: Raiz quadrada da variância amostral; ![](https://i.imgur.com/M2lFpcC.png) ![](https://i.imgur.com/ucqN7Qe.png) > Descrição de incerteza na estimação de parametros * Erro padrão: Verifica a confiabilidade da média. É a medida de variação da média amostral em relação à media da população. * Através do erro padrão pode-se inferir um intervalo de confiança. * Enquanto o desvio padrão mostra o indice de disperção da amostra em relação à media, o erro padrão avalia a confiabilidade da média. ![](https://i.imgur.com/KAIjF66.png) > Intervalo de confiança: Provável faixa de valores que uma estimativa cairia caso a amostragem fosse repetida. > Ex: Um intervalo de confiança de 95% descreve os valores em que uma estatística, calculada a partir de uma amostra repetida, deverá cair 95% das vezes. ```r #Analise de uma distribuição normal de números aleatórios set.seed(1) x <- rnorm(10000, 0, 1) hist(x) #Plotar a densidade e a distribuição de probabilidade x <- seq(from = -4, to = 4, by = 0.01) plot(x, dnorm(x), cex = 0.4) plot(x, pnorm(x), cex = 0.4) x <- seq(from = 0, to = 1, by = 0.01) plot(qnorm(x), x, cex = 0.4) #Cálculo do intervalo de confiança x <- c(1:15) m <- mean(x) n <- length(x) v <- var(x) s <- sd(x) e <- sqrt(v/n) upper <- mean(x) + qnorm(0.975, mean = 0, sd = 1) * se(x) lower <- mean(x) + qnorm(0.025, mean = 0, sd = 1) * se(x) # or lower <- mean(x) - qnorm(0.975)*se(x) ci <- c(lower, upper) ci #Interpretação do IC #Baseados no conjunto de dados, temos 95% probabilidade que a verdadeira média da população esteja entre o máximo e o mínimo; #É esperado que em uma reamostragem, os valores da distribuição caiam no mesmo intervalo 95% das vezes ``` ### Teste de hipótese * Hipótese nula (H0): Afirma que um parametro da população é um valor hipotético * Hipótese alternativa(H1): É a hipotese acreditada ser verdadeira por quem faz a análise * valor *p*: A probabilidade de que a hipótese nula seja verdadeira ```r #Peso de macacos em 2016. Estima-se que em 2016, os macacos estiveram mais pesados em comparação com os macacos de outros anos com média de 4,9kg. A média de 2016 é de 5.324kg. Ela é significantemente maior? #H0? #H1? ``` ###### Teste T > Usado para comparar duas amostras idependentes ```r library(curl) f <-curl("https://raw.githubusercontent.com/fuzzyatelin/fuzzyatelin.github.io/master/AN597_Fall17/vervet-weights.csv") d <- read.csv(f, header = TRUE, sep = ",", stringsAsFactors = FALSE) head(d) mean(d$weight) #Calculo de media, desvio padrão e o erro padrão da média pesoinicial <- 4.9 pesos <- d$weight m <- mean(x) s <- sd(x) n <- length(x) sem <- s/sqrt(n) t <- t.test(x = pesos, mu = pesoinicial, alternative = "greater") # x é o vetor de dados a ser analisado # mu é a media verdadeira, a ser comparada com os novos dados # alternative diz como a hipótese alternativa deve ser em relação à hipotese nula, nesse caso h1 deve ser maior que h0 ``` ## Análises filogenéticas > Aprendendo sobre arvores filogenéticas e os diferentes métodos de construção no R. Usaremos um conjunto de dados de amostras de influenza dos eua de 1993-2008. ```r install.packages(c("adegenet", "phangorn", "stats", "ape", "ade4")) ``` ### Tipos de árvores filogenéticas >Árvore enraizada ![](https://i.imgur.com/lLVn7Ud.gif) > Árvore não enraizada ![](https://i.imgur.com/zXolkrL.gif) >Diferentes tipos de representação ![](https://i.imgur.com/XRh4314.jpg) ### Principais métodos de reconstrução de árvores * Baseada em distância Encontra a "distância genética" entre taxons e agrupa espécies usando a distância * Máxima parsimônia * Máxima verossimilhança ## Iniciando as análises ```r #Importando os dados dna <- fasta2DNAbin(file="http://adegenet.r-forge.r-project.org/files/usflu.fasta") dna #Lendo as anotações dos dados annot <- read.csv("http://adegenet.r-forge.r-project.org/files/usflu.annot.csv", header=TRUE, row.names=1) annot ``` * Análise baseada em distância >UPGMA: Método mais simples, assume a mesma velocidade evolutiva em todas as linhagens. Todos os braços tem a mesma distância da raiz. > Neighbor-joining: Seleciona os dois nóss mais próximos da arvore e os define como vizinhos. Faz isso até todos os nós terem sido pareados. ![](https://i.imgur.com/OpjWFF7.png) ```r #Encontrar as distâncias genéticas D <- dist.dna(dna, model = "TN93") length(D) #numero de distancias pareadas temp <- as.data.frame(as.matrix(D)) table.paint(temp, cleg=0, clabel.row=.5, clabel.col=.5) #Quanto mais escuro, maior a distância #Construindo a árvore tre <- nj(D) class(tre) tre <- ladderize(tre) tre plot(tre, cex = 0.6) title("Árvore neighbor-joining") #ou h_cluster <- hclust(D, method = "average", members = NULL) plot(h_cluster, cex = 0.6) #Melhorando a visualização plot(tre, show.tip=FALSE) title("Árvore NJ não enraizada") myPal <- colorRampPalette(c("red","yellow","green","blue")) tiplabels(annot$year, bg=num2col(annot$year, col.pal=myPal), cex=.5) temp <- pretty(1993:2008, 5) legend("bottomleft", fill=num2col(temp, col.pal=myPal), leg=temp, ncol=2) #Árvore não enraizada plot(tre, type = "Não enraizado", show.tip = FALSE) title("Árvore NJ não enraizada") tiplabels(tre$tip.label, bg = num2col(annot$year, col.pal = myPal), cex = 0.5) # Criando uma árvore enraizada tre2 <- root(tre, out = 1) tre2 <- ladderize(tre2) plot(tre2, show.tip=FALSE, edge.width=2) title("Rooted NJ tree") tiplabels(tre$tip.label, bg=transp(num2col(annot$year, col.pal=myPal),.7), cex=.5, fg="transparent") axisPhylo() temp <- pretty(1993:2008, 5) legend("topright", fill=transp(num2col(temp, col.pal=myPal),.7), leg=temp, ncol=2) #Verificando se o método foi apropriado para o conjunto de dados #Método NJ x <- as.vector(D) y <- as.vector(as.dist(cophenetic(tre2))) plot(x, y, xlab="original pairwise distances", ylab="pairwise distances on the tree", main="Is NJ appropriate?", pch=20, col=transp("black",.1), cex=3) abline(lm(y~x), col="red") cor(x,y)^2 #Método UPGMA tre3 <- as.phylo(hclust(D,method="average")) y <- as.vector(as.dist(cophenetic(tre3))) plot(x, y, xlab="original pairwise distances", ylab="pairwise distances on the tree", main="Is UPGMA appropriate?", pch=20, col=transp("black",.1), cex=3) abline(lm(y~x), col="red") cor(x,y)^2 #Bootstraping myBoots <- boot.phylo(tre2, dna, function(e) root(nj(dist.dna(e, model = "TN93")),1)) myBoots plot(tre2, show.tip=FALSE, edge.width=2) title("NJ tree + bootstrap values") tiplabels(frame="none", pch=20, col=transp(num2col(annot$year, col.pal=myPal),.7), cex=3, fg="transparent") 16 axisPhylo() temp <- pretty(1993:2008, 5) legend("topright", fill=transp(num2col(temp, col.pal=myPal),.7), leg=temp, ncol=2) nodelabels(myBoots, cex=.6) temp <- tre2 N <- length(tre2$tip.label) toCollapse <- match(which(myBoots<70)+N, temp$edge[,2]) temp$edge.length[toCollapse] <- 0 tre3 <- di2multi(temp, tol=0.00001) plot(tre3, show.tip=FALSE, edge.width=2) title("NJ tree after collapsing weak nodes") tiplabels(tre3$tip.label, bg=transp(num2col(annot$year, col.pal=myPal),.7), cex=.5, fg="transparent") axisPhylo() temp <- pretty(1993:2008, 5) legend("topright", fill=transp(num2col(temp, col.pal=myPal),.7), leg=temp, ncol=2)