eutad<-read.table("palmadulto.txt", header=T) head(eutad) #Criando dist, a matriz que guardará as distâncias entre as plantas: dist=matrix(NA, ncol=102, nrow=102) dist #Calculando as distâncias pelo teorema de pitagoras e guardando 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) } } dist #vetor com valores das menores distâncias para cada indivíduo: nn<-apply(dist,1,min,na.rm=TRUE) nn #média dos valores d menores distâncias: mnn<-mean(nn) mnn #1.5 Crie um vetor resultado, com 1000 NAs, para guardar os valores de cada simulação: resultado<-rep(NA, 1000) resultado #1.6 Guarde o valor observado na primeira posição do vetor resultado resultado[1]<-mnn resultado[1] #1.7 Crie um ciclo com contador (k), que vai de 2 a 1000. #1.8 Dentro do ciclo: for(k in 2:1000) { #1.8.1 Crie o objeto xsim, um vetor com valores amostrados aleatoriamente de uma distribuição uniforme de 0 a 320: #1.8.2 E faça o mesmo que o passo anterior, guardando no objeto ysim xsim<-round(runif(102,0,320),1) ysim <- round(runif(102,0,320),1) xsim ysim rxy<-data.frame(xsim,ysim) head(rxy) #1.8.3 Como no topico anterior, crie uma matriz para guardar as distâncias entre cada valor xy simulados m.xy <- matrix(NA, ncol=102, nrow=102) #1.8.3 Crie os ciclos para os calculos das distâncias como no topico anterior: for(i in 1:101) { for(j in (i+1):102) { difx2 <- (xsim[i]-xsim[j])^2 dify2 <- (ysim[i]-ysim[j])^2 m.xy[i,j] <- sqrt(difx2 + dify2) m.xy[j,i] <- sqrt(difx2 + dify2) } } #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 resultado[k] <- mean(apply(m.xy,1,min,na.rm=TRUE)) #1.8.5 Feche o ciclo } #1.9 Faça um histograma dos valores simulados e coloque uma linha vermelha vertical na posição do valor observado resultado mean(resultado) res<-resultado-mean(resultado) res hist(res) res[1] abline(v = res[1], col="red") #1.10 Calcule a probabilidade de uma distribuição espacial aleatoria gerar valores iguais ou mais extremos do que o valor MNN observado #Calculo do p-valor: pvalor = sum(res<=res[1]|res>=res[1]*-1)/length(resultado) pvalor ##Exercício 2 ##Simulando o teste de uma regressão linear animais<-read.table("animais.txt", sep=";", dec=",", header=TRUE, as.is= TRUE) animais head(animais) str(animais) #2.1 Calcule a inclinação da relação log(brain)~log(body) animais$logbody<-log(animais$body) head(animais) animais$logbrain<-log(animais$brain) plot(animais$logbrain~animais$logbody) mod1<-lm(animais$logbrain~animais$logbody) summary(mod1) coef(mod1) beta<-0.7522607 #2.2 Crie um vetor para guardar o resultado de simulações; #2.3. Guarde o valor observado no objeto criado em 2.2; #2.4. Abra um ciclo de 2 a 1000; #2.5. Desordene o vetor brain e guarde no objeto sim_brain; #2.6. Calcule a inclinação entre o log(sim_brain) ~ log(body) e guarde no vetor resultado; #2.7. Feche o ciclo; a<-rep(NA, 1000) a[1]<-beta head(a) for(c in 2:1000) { sim_brain<-sample(animais$brain) a[c]<-coef(lm(log(sim_brain)~animais$logbody, animais))[2] } head(a) #2.8 Faça o histograma dos valores simulados e compare com o valor observado da inclinação da reta hist(a) abline(v=beta, col="red") #2.9 Calcule a probabilidade da inclinação observada ter sido gerada por variáveis que são independentes p.valor<- sum(a>=beta)/length(a) p.valor