====== Paula Alves Condé ====== {{:bie5782:01_curso2009:alunos:trabalho_final:paula_alves_conde.jpg|Paula Condé}} Mestranda em Ecologia, Instituto de Biologia, USP. Março de 2009 ===== Proposta ===== ==== Principal ==== Uma função para análise exploratória de dados que sejam dois vetores através de apresentações gráficas, resumos e opções de simulação de uma distribuição nula para teste unicaudal, bicaudal e teste t. Apresenta gráficos para exploração das variáveis, como histograma, boxplot, plot, qqnorm, e também retorna um gráfico de simulação de uma distribuição nula para teste unicaudal, bicaudal e teste t. É uma função integrando a análise exploratória de dados através de apresentações gráficas e opções de simulação usadas na função “simula”. == (Reformulada para responder aos comentários abaixo) == === Comentários === == Paulo == Idéia promissora, mas algumas coisas não ficaram claras para mim, veja se estão para você: - boxplot e qqnorm são gráficos para uma variável e sua função receberá duas. Um gráfico para cada uma? - Que simulação será feita e que gráfico será retornado? Há vários pontos importantes aqui, a começar pela pergunta que se pretende responder com a simulação, o que vai determinar o tipo de simulação feita, o melhor modo de mostrar os resultados, etc. ==== Plano B ==== Uma função para planilha de dados (data frame) organizados com cada indivíduo da amostra nas linhas e com uma coluna com o nome das espécies correspondente a cada indivíduo. A função retorna uma matriz e gráfico do rank de abundância das espécies, e terá argumento de opção para aplicar a função para apenas algum ou vários subconjuntos da coleta dos dados (como locais, armadilhas, meses ou parcelas) os quais você queira saber essas informações (abundância de cada espécie). E quem sabe também apresente cálculos de medidas ecológicas (como índices de diversidade e equitabilidade). === Comentários === == Paulo == Bem geral e factível. Se entendi sua planilha tem uma linha para cada indivíduo, obrigatoriamente um fator que identifica a espécie, e outro fatores opcionais que podem ser usados para separar os dados em subconjuntos, é isto? Uma dica: resista à tentação de usar a função ''sort'', e opte pela ''order'', que parece mais difícil, mas é bem mais poderosa. Só ela pode resolver problemas de ordenação mais complicados como este. Outra sugestão: você pode oferecer a opção da planilha ter uma linha por espécie, e um campo de abundância de cada espécie. ===== Página de Ajuda ===== analix package:nenhum R Documentation Análise exploratória de duas variáveis e opção para simulação nula com teste unicaudal, bicaudal e teste t. Description: Apresenta sumário das variáveis e os principais gráficos para uma análise exploratória de dados, índice de correlação entre duas variáveis, e retorna uma simulação de uma distribuição nula com testes estatísticos. Usage: analix <- function(dados1,dados2,teste="N") Arguments: dados1: Vetor numérico. Valores de uma amostra ou variável. dados2: numérico. Valores de uma amostra ou variável. teste: lógico. Qual o tipo de teste na simulação nula? Details: Os valores das amostras (dados1,dados2) são plotados em gráficos de histograma, boxplot, qqnorm e "dados2" em função de "dados1", com linha da regressão linear simples. É apresentado um sumário de cada variável (ou amostra) com o índice de correlação entre elas. Também são simulados uma hipótese nula para os dados com opção de teste unicaudal (teste="uni"), teste bicaudal (teste="bi"), teste t de Student (teste="t") ou sem simulação e teste estatístico (teste="N"). As simulações são feitas com repetição de 1000 de uma distribuição uniforme dos dados. Value: São gerados um conjunto de seis gráficos para análise exploratória dos dados, e um gráfico com o resultado da simulação de hipótese nula com o teste estatístico escolhido. Author(s): Paula Alves Condé paula.conde@usp.br References: Exploratory data analysis. http://en.wikipedia.org/wiki/Exploratory_data_analysis Null hypothesis. http://en.wikipedia.org/wiki/Null_hypothesis Statistical hypothesis testing. http://en.wikipedia.org/wiki/Hypothesis_testing See Also: 'qqnorm' para analisar a normalidade dos dados. 'simula' simulação da hipótese nula com testes estatísticos. Examples: dados1=round(rnorm(10,mean=6,sd=3),2) dados2=round(rnorm(10,mean=7.5,sd=3.2),2) ## Sem simulações e teste, apenas exploração gráfica das variáveis: analix(dados1,dados2,teste="N") ## Exploração gráfica + Simulação de uma distribuição nula com teste bicaudal: analix(dados1,dados2,teste="bi") ## Exploração gráfica + Simulação de uma distribuição nula com teste unicaudal: analix(dados1,dados2,teste="uni") ## Exploração gráfica + Simulação de uma distribuição nula com teste t: analix(dados1,dados2,teste="t") ===== Código da Função ===== analix <- function(dados1,dados2,teste="N") { ### Função utilizada para analise exploratória de duas variáveis. ### A entrada de dados deve ser feita por dois objetos vetores de mesmo tamanho. ### Também faz simulação de uma distribuição nula para teste unicaudal, bicaudal ## e teste t. cat("Para fazer simulação de uma distribuição nula, no caso de teste unicaudal o + primeiro vetor deve ser o dos dados que seriam maiores.\n As opçoes de teste são + (entre aspas):\n\t uni (normal unicaudal)\n\t bi (normal bicaudal) \n\t + t (distribuição t)\n") ### Autora: Paula Alves Condé ### Data: 01/04/2009 ### Trabalho final ### Disciplina "Uso da Linguagem R para Analise de Dados Ecologicos" - BIE5782. x11() par(mfrow=c(3,2),bty="l") ## Produz Histograma dos "dados1" hist(dados1,col="red",main=paste(c("Histograma",substitute(dados1)))) ## Produz Histograma dos "dados2" hist(dados2,col="blue",main=paste(c("Histograma",substitute(dados2)))) ## Produz Boxplot das duas variáveis boxplot(dados1,dados2,main="Boxplot",names=c(substitute(dados1), + substitute(dados2))) ## Plota "dados2" em função dos "dados1" com a reta de regressão ## linear simples para ver a relação entre as variáveis plot(dados2~dados1,main=paste(c(substitute(dados2),"~",substitute(dados1))) + ,pch=16,xlab=deparse(substitute(dados1)),ylab=deparse(substitute(dados2))) abline(lm(dados2~dados1),col="purple",lwd=2) ## Gráfico QQNorm para "Dados1" qqnorm(dados1) qqline(dados1,col="red") mtext(deparse(substitute(dados1)),side=3) ## Gráfico QQNorm para "Dados2" qqnorm(dados2) qqline(dados2,col="blue") mtext(deparse(substitute(dados2)),side=3) ## Sumário das variáveis e índice de correlação name.xy <- paste(deparse(substitute(dados1)), "e", deparse(substitute + (dados2))) cat("Dados:", name.xy, "\n") n <- length(dados1) sumx <- sum(dados1^2) - sum(dados1)^2/n sumy <- sum(dados2^2) - sum(dados2)^2/n sumxy <- sum(dados1 * dados2) - sum(dados1) * sum(dados2)/n correl <- sumxy/sqrt(sumx * sumy) concluindo<- list(summary(dados1),summary(dados2),correl) names(concluindo)<- c(substitute(dados1), substitute(dados2), + "correlação") ### Fazendo simulação de uma distribuição nula para teste unicaudal, bicaudal ## ou teste t. nsim=1000 resultado<-rep(NA,nsim) dif = mean(dados1) - mean(dados2) dif.abs = round(abs(dif), 1) cat("\n Diferença absoluta observada entre as médias das variáveis = ",dif.abs, + "\n") v1 = var(dados1) v2 = var(dados2) n1 = length(dados1) n2 = length(dados2) s12 = sqrt((v1/n1) + (v2/n2)) tvalor = abs(dif/s12) med = mean(c(dados1, dados2)) des = sd(c(dados1, dados2)) res = rep(NA,nsim) arco = rainbow(nsim) x11() if (teste == "bi") { meu.cex = 900/nsim plot(runif(50, 0, (dif.abs * 1.5)), 0:49, type = "n", xlim = c(0, dif.abs * 1.5), ylim = c(0, (0.08 * nsim)), xlab = "Diferença absoluta", ylab = "Frequência", main = "Simulação") for (i in 1:nsim) { res[i] = abs(round(mean(rnorm(n1, mean = med, sd = des)) - mean(rnorm(n2, mean = med, sd = des)), 1)) stripchart(res, method = "stack", add = T, cex = meu.cex, pch = 15, col = arco[i]) } res.menor <- res[res < dif.abs] stripchart(res.menor, method = "stack", add = T, cex = meu.cex, pch = 15, col = "dark green") legend(5, (6 * nsim), legend = paste(sum(res >= dif.abs), "valores >= ", round(dif.abs, 1)), bty = "n", text.col = "red") abline(v = dif.abs, col = "red") } if (teste == "uni") { meu.cex = 1700/nsim plot(runif(50, (dif.abs * -1.5), (dif.abs * 1.5)), 0:49, type = "n", xlim = c((dif * -1.5), (dif * 1.5)), ylim = c(0, (0.04 * nsim)), xlab = " Diferença Absoluta", ylab = "Frequência", main = "Simulação") for (i in 1:nsim) { res[i] = round(mean(rnorm(n1, mean = med, sd = des)) - mean(rnorm(n2, mean = med, sd = des)), 1) stripchart(res, method = "stack", add = T, cex = meu.cex, pch = 15, col = arco[i]) } res.menor <- res[res < dif.abs & res > (-1 * dif.abs)] stripchart(res.menor, method = "stack", add = T, cex = meu.cex, pch = 15, col = "dark green") legend((dif.abs * 0.5), (0.038 * nsim), legend = paste(sum(res >= dif.abs), "valores >= ", round(dif, 1)), bty = "n", text.col = "red") legend((dif.abs * -1.4), (0.038 * nsim), legend = paste(sum(res <= (dif.abs * -1)), "valores <= -", round(dif, 1)), bty = "n", text.col = "red") abline(v = dif.abs, col = "red") abline(v = (-1 * dif.abs), col = "red") } if (teste == "t") { meu.cex = 1300/nsim cat("\t\nValor t observado = ", tvalor, "\n") plot(runif(50, (-0.7 * dif.abs), (0.7 * dif.abs)), runif(50, 0, (nsim/20)), type = "n", xlim = c((-0.8 * dif.abs), (0.8 * dif.abs)), ylim = c(0, (nsim/20)), xlab = " valor t ", ylab = "Frequência", main = "Simulação") for (i in 1:nsim) { simula1 = rnorm(n1, mean = med, sd = des) simula2 = rnorm(n2, mean = med, sd = des) difs = mean(simula1) - mean(simula2) vs1 = var(simula1) vs2 = var(simula2) ss12 = sqrt((vs1/n1) + (vs2/n2)) tsimula = difs/ss12 res[i] = round(tsimula, 1) stripchart(res, method = "stack", add = T, cex = meu.cex, pch = 15, col = arco[i]) } tvalor.vf = res < round(tvalor, 1) & res > round((-1 * tvalor), 1) ntvalor = sum(tvalor.vf == F) res.menor = res[tvalor.vf] stripchart(res.menor, method = "stack", add = T, cex = meu.cex, pch = 15, col = "dark green") legend((tvalor * 0.2), (nsim/22), legend = paste(sum(res >= round(tvalor, 1)), "valores >= ", round(tvalor, 1)), bty = "n", text.col = "red") legend((tvalor * -0.9), (nsim/22), legend = paste(sum(res <= round((tvalor * -1), 1)), "valores <= -", round(tvalor, 1)), bty = "n", text.col = "red") abline(v = tvalor, col = "red") abline(v = (-1 * tvalor), col = "red") cat("\n\tProbabilidade erro I = ", ntvalor/nsim, "\n") } return(concluindo) } ===== Arquivo da Função ===== {{:bie5782:01_curso2009:alunos:trabalho_final:analix.r|analix.r}}