Exercícios 8. Reamostragem e Simulação #------------------------------------------------------------------------------------------------- #Exercício 1 #------------------------------------------------------------------------------------------------- eutad <- read.table("palmadulto.txt", header= TRUE, as.is = TRUE, sep= "\t", dec= ".") head(eutad) str(eutad)#verificando estrutura dos dados #1.2. Crie o objeto para guardar as distâncias entre cada indivíduo: dist=matrix(NA, ncol=102, nrow=102) #1.3. Calcule a distãncia observada entre cada indivíduo e guarde o resultados em dist: 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 parâmetro chamado de distância média do vizinho mais próximo (MNN): dist (nn<-apply(dist, 1, min, na.rm=TRUE)) (mnn<-mean(nn))#[1] 14.76015 ################### Simulando ############ #1.5. Crie um vetor resultado, com 1000 NA's, para guardar os valores de cada simulação. resultado <- rep(NA,1000) resultado #1.6. Guarde o valor observado na primeira posição de resultado; resultado[1] <- (mnn) resultado #1.7. Crie um ciclo com contador (k) que vai de 2 a 1000; for(k in 2:1000) { xsim <- round(runif(102, min = 0, max = 320),1) #1.8.1. Crie o objetos xsim, um vetor com valores amostrados aleatoriamente de uma distribuição uniforme de 0 a 320 (o tamanho x da parcela), arredondando o valor para uma casa decimal2). Lembre-se de sortear o mesmo quantidade de valores que a população de palmito observado; ysim <- round(runif(102, min = 0, max = 320),1) #1.8.2. Faça o mesmo que no passo anterior e guarde no objeto ysim; rdist=matrix(NA, ncol=102, nrow=102) #1.8.3. Como no tópico anterior, crie uma matriz para guardar as distâncias entre cada valor xy simulados; for(a in 1:101)#1.8.3. Crie os ciclos para o calculo das distâncias como no tópico anterior; { for(b in (a+1):102) { rdifx2=(eutad$gx[a]-eutad$gx[b])^2 rdify2=(eutad$gy[a]-eutad$gy[b])^2 rdist[a,b]<-sqrt(rdifx2 + rdify2) rdist[b,a]<-sqrt(rdifx2 + rdify2) } } (rnn<-apply(rdist, 1, min, na.rm=TRUE)) (resultado[k] <- mean(rnn))#1.8.4. Guarde o valor da distância média do vizinho mais próximo dos dados simulados na posição k do vetor resultado; }#1.8.5. Feche o ciclo. resultado #1.9. Faça um histograma dos valores simulados e coloque uma linha vermelha vertical na posição do valor observado; media <- mean(resultado) simu <- resultado - media hist(simu) abline (v=resultado[1], lty=2, col="red") #1.10. Calcule a probabilidade de uma distribuição espacial aleatória gerar valores iguais ou mais extremos do que o valor MNN observado. unicaudal=sum(resultado>=resultado[1]) unicaudal p.uni=unicaudal/length(resultado) p.uni p.bi #------------------------------------------------------------------------------------------------- #Exercício 2. Simulando o teste de uma regressão linear #------------------------------------------------------------------------------------------------- #upload dos dados animais <- read.table("animais.txt", header= TRUE, as.is = TRUE, sep= ";", dec= ",") animais str(animais) animais = na.omit(animais)#retirando NAs logbrain = log(animais$brain) #log de brain logbody = log(animais$body) #log de body #2.1. Calcule a inclinação da relação log(brain) ~ log(body) inclinacao = sum((logbody - mean(logbody))*(logbrain - mean(logbrain)))/sum((logbody-mean(logbody))^2) coeficiente <- coef(lm(logbrain~logbody)) #2.2. Crie um vetor para guardar o resultado de simulações; res.inclinacao <- rep(NA, 1000) #2.3. Guarde o valor observado no objeto criado em 2.2 res.inclinacao[1] <-inclinacao #2.4. Abra um ciclo de 2 a 1000; for (i in 2:1000) { sim_brain <- sample(animais$brain)#2.5. Desordene o vetor brain e guarde no objeto sim_brain; resp.inclinacao[i] <- coef(lm(log(sim_brain)~log(body), data=animais))[[2]]#2.6. Calcule a inclinação entre o log(sim_brain) ~ log(body) e guarde no vetor resultado }#2.7. Feche o ciclo; #2.8. Faça o histograma dos valores simulados e compare com o valor observado da inclinação da relação; hist(resp.inclinacao) abline(v = inclinacao, col="red") #2.9. Calcule a probabilidade da inclinação observada ter sido gerada por variáveis que são independentes p=sum(resp.inclinacao>=resp.inclinacao[1])/length(resp.inclinacao)