## Codigo Aula Programação ### source("simula.r") macho=c(120,107,110,116, 114, 111, 113,117,114,112) femea=c(110,111,107, 108,110,105,107,106,111,111) simula( # simula(macho,femea) ### escrever a função para mostrar a inserção no RKward ################################## #SLIDE ################################################## source("eda.shape") # copia eda.shape aqui # # # # ######################################################## ### modificando eda.shape ################################################################## eda.shape1 <- function(x) { x11() # abre um dispositivo grafico par(mfrow = c(2,2)) hist(x,main="Histograma de x") # titulo boxplot(x, main="BoxPlot de x") #titulo iqd <- summary(x)[5] - summary(x)[2] plot(density(x,width=2*iqd),xlab="x",ylab="",type="l", main="Distribuição de densidade de x") # titulo qqnorm(x,col="red",main="Gráfico Quantil x Quantil",xlab="Quantil Teórico",ylab="Quantil da Amostra") # titulo qqline(x) par(mfrow=c(1,1)) } ###################################################################### ### executando eda.shape1(rnorm(500,6)) ####### VOLTA APRESENTAÇão ### FAZENDO VERSÕES PIORADAS DE FUNçÕES EXISTENTES!!!! ###funções simples media <-function(x) { soma=sum(x) nobs=length(x) media=soma/nobs return(media) } ######################################### ls() media media() dados=rnorm(20,2,1) media(dados) dados1=rnorm(200,2,1) media(dados1) dados2=(rnorm(10000,2,1)) media(dados2) sd(dados) dados3=rnorm(20,2,001) media(dados3) dados4=rnorm(200,2,001) media(dados4) dados[2]<-NA dados media(dados) mean(dados) mean(dados,na.rm=T) media(dados,na.rm=T) args(media) ######################################## # volta para a apresentação ####################################################### ##Uma função mais elaborada, considerando a ##presença e excluíndo NA por padrão, e lançando mensagem na tela ##sobre o número de NAs removidos. Note que é uma função com dois argumentos ##que permite ao usuário tomar a decisão de remover ou não NAs, diferente da função ##mean() em que o padrão é invertido. Note que vamos sobrepor o objeto anterior. ######################################################## media<-function(x,rmNA=TRUE) { if(rmNA==TRUE) { dados=(na.omit(x)) n.NA=length(x)-length(dados) cat("\t", n.NA," valores NA excluídos\n") } else { dados=x } soma=sum(dados) nobs=length(dados) media=soma/nobs return(media) } ###calcular a média do vetor dados.dens dados media(dados) media(dados)->minha.media ########################################## ###função para calcular variância variancia<-function(x) { source("media.r") med=media(x) dados=na.omit(x) disvquad=(dados-med)^2 vari=sum(disvquad)/(length(dados)-1) return(vari) } ###Calcular a variância de dados e comparando com a função do R! variancia(dados) var(dados) var(dados,na.rm=T) ## O índices de dispersão nos ajuda a verificar se os dados são distribuidos aleatório, agregado ou uniforme ########################################## # volta apresentação ######################################### ############################################# ID.curso<-function(x) { id=variancia(x)/media(x) return(id) } ############################################ ###Tomando dados simulado de contagem de uma espécie em uma amostra de 20 parcelas de 20x20m, ###podemos verificar o padrão de dispersão dessa espécie, utilizando o �ndice de Dispersão (razão variância / média) ###Antes vamos simular dados com parânetros conhecidos: ## 1. Simulando Aleatório aleat=rpois(200,5) aleat ## 2. Uniforme unif=runif(200,0,4) unif unif=round(unif,0) unif ## 3. Agregado agreg=rnbinom(200,size=20, mu=5) # vinte arvores em média 5 spp agreg ##Calcular o coeficiente de dispers�o ID.curso(aleat) ID.curso(unif) ID.curso(agreg) agreg ##Quando o valor próximo a 1 é considerada aleatória. ##Podemos fazer um teste de significância simplificado ##################################################################### #VOLTA A APRESENTAçÃO ##################################################################### test.ID <- function(x, nsim=1000) { ID.curso=function(x){var(x)/mean(x)}# essa função precisa das funcoes media e ID.curso dados=na.omit(x) ndados=length(dados) med=mean(dados) id=var(dados)/med simula.aleat=rpois(length(x)*nsim, lambda=med) sim.dados=matrix(simula.aleat,ncol= ndados) sim.ID=apply(sim.dados,1,ID.curso) quant.ID=quantile(sim.ID, probs=c(0.025,0.975)) if(id>=quant.ID[1] & id<=quant.ID[2]) { cat("\n\n\n\t distribuição aleatória para alfa=0.05 \n\t ID= ",id,"\n\n\n") } if(id < quant.ID[1]) { cat("\n\n\n\t distribuição uniforme, p<0.025 \n\t ID= ",id,"\n\n\n") } if(id>quant.ID[2]) { cat("\n\n\n\t distribuição agregado, p>0.975 \n\t ID= ",id,"\n\n\n") } resulta=c(id,quant.ID) names(resulta)<-c("Indice de Dispersão", "critico 0.025", "critico 0.975") return(resulta) } ###################################################################### ###### Testanto os dados simulados test.ID(aleat) test.ID(agreg) test.ID(unif) ##################################################################### #CONTINUA: Apresenta ciclos ##################################################################### ############ CICLOS ################## ############ ###Um outro instrumento importante para programar em R é o loop. ###Ele permite a aplicação de uma função ou tarefa a uma sequência pré determinada de dados ###Vamos novamente simular dados Espécies (ind) x Parcelas x1=rpois(20,1) x2=rpois(20,2) x3=rpois(20,3) x4=rpois(20,1) sp.oc=matrix(c(x1,x2,x3,x4), ncol=4) colnames(sp.oc)<-c("plot A", "plot B", "plot C", "plot D") rownames(sp.oc)<-paste("sp", c(1:20)) str(sp.oc) dim(sp.oc) head(sp.oc) ## Uma função para contar espécies por parcelas #### ## Mais uma vez uma função já conhecida e piorada!! ##################################################### n.spp<-function(dados) { nplot=dim(dados)[2] resultados=rep(0,nplot) names(resultados)<-paste("n.spp", c(1:nplot)) dados[dados>0]=1 for(i in 1:(dim(dados)[2])) { cont.sp=sum(dados[,i]) resultados[i]=cont.sp } return(resultados) } ##### Aplicando a funçãoo n.spp(sp.oc) ###BONITO! apply(sp.oc>0, 2, sum) ################################################ ## VOLTA A APRESENTACÃO ################################################## ###mais função!! SIMILARIDADE sim<-function(dados) { nplot=dim(dados)[2] similar=matrix(1,ncol=nplot,nrow=nplot) rownames(similar)<-paste("plot", c(1:nplot)) colnames(similar)<-paste("plot", c(1:nplot)) dados[dados>0]=1 for(i in 1:(nplot-1)) { m=i+1 for(m in m:nplot) { co.oc=sum(dados[,i]>0 & dados[,m]>0) total.sp=sum(dados[,i])+sum(dados[,m])-co.oc similar[i,m]=co.oc/total.sp similar[m,i]=co.oc/total.sp } } return(similar) } ######################################################### sp.oc sim(sp.oc) dist(sim(sp.oc)) debug(sim) sim(sp.oc) Q undebug(sim) ########################################################## ####FIM!!!!!!!!!!!!