#Exercicios 8 - Reamostragem e Simulacao #1) Os palmitos estão distribuídos aleatoriamente na floresta? #Hipotese nula: os palmitos se distribuem aleatoriamente no espaco. #1.1 Baixar e ler o arquivo eutad=read.table("palmadulto.csv", header = T, as.is=T) #Conferir os dados head(eutad) dim(eutad) ?read.table str(eutad) tail(eutad) summary(eutad) class(eutad) #dataframe #nao precisa transformar em matriz #eutad=as.matrix(eutad) #transformei o data frame em matriz #1.2 Criar objeto para guardar as distancias entre cada individuo dist=matrix(NA, ncol=102, nrow=102) dist #1.3 Calcule a distancia observada entre cada individuo e guarde o resultados em dist: #O calculo da distancia entre 2 pontos esta relacionada com o calculo da hipotenusa de um triangulo de pitagoras, onde a hipotenusa^2=(x1-x0)^2 + (y1-y0)^2. Como eu quero colocar os dados em uma matriz, eu uso os contadores "i" e "j". Na matriz a posicao [1,2] (linha 1, coluna 2) e = ao valor da posicao [2,1]. Por isso que o contador j, sera (i+1) for(i in 1:101) { for(j in (i+1):102) { difx2=(eutad$gx[i]-eutad$gx[j])^2 dify2=(eutad$gy[i]-eutad$gy[j])^2 dist[i,j]<-sqrt(difx2 + dify2) dist[j,i]<-sqrt(difx2 + dify2) } } #1.4. Verifique o objeto dist e calcule o parametro chamado de distancia media do vizinho mais proximo (MNN): dist (nn<-apply(dist, 1, min, na.rm=TRUE)) #em todas as linhas (argumento =1),pegar os menores valores da distancia entre as palmeiras, e remova os NA da matriz dist (mnn<-mean(nn)) #Calculo da media do observado #1.5. Crie um vetor resultado, com 1000 NA's, para guardar os valores de cada simulacao. resultado=rep(NA, 1000) resultado #1.6. Guarde o valor da media do observado na primeira posicao de resultado: resultado[1]=mnn #1.7. Crie um ciclo com contador (k) que vai de 2 a 1000: #1.8 Dentro do ciclo: #1.8.1. Crie o objetos xsim, um vetor com valores amostrados aleatoriamente de uma distribuicao uniforme (comando: runif) de 0 a 320 (o tamanho x da parcela). Lembre-se de sortear a mesmo quantidade de valores que a populaacao de palmito observado: #1.8.2. Faca o mesmo que no passo anterior e guarde no objeto ysim; #1.8.3. Como no topico anterior, crie uma matriz para guardar as distancias entre cada valor xy simulados; #1.8.4. Crie os ciclos para o calculo das distâncias como no topico anterior; #1.8.5. Guarde o valor da distancia media do vizinho mais proximo dos dados simulados na posicao i do vetor resultado; for(k in 2:1000) #1.7 { xsim= runif(n=102, min= 0, max=320) #1.8.1 # n=numero de observacoes, no meu caso o numero de linhas ysim=runif (102,0,320) #1.8.2 xy=matrix(NA, ncol=102, nrow=102) #1.8.3 for(i in 1:101) #1.8.4 { for(j in (i+1):102) { difx2=(xsim[i]-xsim[j])^2 dify2=(ysim[i]-ysim[j])^2 xy[i,j]<-sqrt(difx2 + dify2) xy[j,i]<-sqrt(difx2 + dify2) } } nnsim=apply(xy, 1, min, na.rm=TRUE) resultado[k]=mean(nnsim) #1.8.5 } #1.9. Faca um histograma dos valores simulados e coloque uma linha vermelha vertical na posicao do valor observado; hist(resultado) abline(v = resultado[1], col="red") #1.10. Calcule a probabilidade do valor MNN observado ser gerado por uma distribuicao espacial aleatoria. resultado1=resultado - mean(resultado) #centralizei o histograma para o zero hist(resultado1) p=sum(abs(resultado1) >=(abs(resultado1[1])))/length(resultado1) p # p=0.056 #Portanto os palmitos sao distribuidos de forma aleatoria na floresta. ################### #2) Simulando o teste de uma regressao linear vert=read.table("vertebrados.txt", sep = ";", dec = ",", header = T, as.is=T) head(vert) tail(vert) ?read.table str(vert) summary(vert) #removendo os NA vert=na.exclude(vert) head(vert) #2.1 Calcular a inclinacao da reta do modelo linear: mod=lm(log(vert$brain) ~ log(vert$body)) summary(mod) inc=coef(mod) [[2]] inc #2.2 Criar um vetor para guardar o resultado das simulacoes: inc.sim= rep(NA, 1000) inc.sim[1]=inc #Guardei na 1a posicao do vetor o valor da inclinacao da reta head(inc.sim) #Simulacao for(i in 2:1000) { sim_brain=sample(vert$brain) #2.3 Desordenar o vetor brain inc.sim[i]=coef(lm(log(sim_brain) ~ log(vert$body))) [[2]] #2.4 Calcular a inclinacao da reta para o modelo linear sim_brain ~ body } head(vert) #2.5 Histograma par(mfrow=c(1,1)) hist(inc.sim) abline(v=inc.sim[1], col="red") #2.6 Calcular o valor do p p=sum(abs(inc.sim)>=inc.sim[1])/length(inc.sim) #teste unicaudal p #A comparacao da media observada com os valores aleatorios mostraram que ha diferenca significativa (p=0.001). Logo, a massa do corpo tem efeito sobre a massa do cerebro.