Paula Alves Condé
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)
}
