Aqui você vê as diferenças entre duas revisões dessa página.
Ambos lados da revisão anterior Revisão anterior Próxima revisão | Revisão anterior | ||
02_tutoriais:tutorial9:start [2024/09/10 17:04] 127.0.0.1 edição externa |
02_tutoriais:tutorial9:start [2024/09/11 12:48] (atual) |
||
---|---|---|---|
Linha 47: | Linha 47: | ||
<code rsplus> | <code rsplus> | ||
- | macho=c(120,107,110,116, 114, 111, 113,117,114,112) | + | macho <- c(120,107,110,116, 114, 111, 113,117,114,112) |
- | femea=c(110,111,107, 108,110,105,107,106,111,111) | + | femea <- c(110,111,107, 108,110,105,107,106,111,111) |
macho | macho | ||
femea | femea | ||
- | sexo=rep(c("macho", "femea"), each=10) | + | sexo <- rep(c("macho", "femea"), each=10) |
sexo | sexo | ||
- | mf=c(macho,femea) | + | mf <- c(macho,femea) |
mf | mf | ||
- | macho.m=mean(macho) | + | macho.m <- mean(macho) |
macho.m | macho.m | ||
- | femea.m=mean(femea) | + | femea.m <- mean(femea) |
femea.m | femea.m | ||
- | macho.m-femea.m | + | macho.m - femea.m |
- | dif.mf=diff(tapply(mf,sexo,mean)) | + | dif.mf <- diff(tapply(mf,sexo,mean)) |
dif.mf | dif.mf | ||
</code> | </code> | ||
Linha 75: | Linha 75: | ||
<code rsplus> | <code rsplus> | ||
- | s1.mf=sample(mf) | + | s1.mf <- sample(mf) |
s1.mf | s1.mf | ||
diff(tapply(s1.mf,sexo,mean)) | diff(tapply(s1.mf,sexo,mean)) | ||
##+1 | ##+1 | ||
- | s2.mf=sample(mf) | + | s2.mf <- sample(mf) |
s2.mf | s2.mf | ||
diff(tapply(s2.mf,sexo,mean)) | diff(tapply(s2.mf,sexo,mean)) | ||
Linha 141: | Linha 141: | ||
<code rsplus> | <code rsplus> | ||
- | bicaudal=sum(result>=result[1]| result<=(result[1]*-1)) | + | bicaudal <- sum(result >= result[1]| result <= (result[1]*-1)) |
bicaudal | bicaudal | ||
length(result) | length(result) | ||
- | p.bi=bicaudal/length(result) | + | p.bi <- bicaudal/length(result) |
p.bi | p.bi | ||
</code> | </code> | ||
- | Para se os machos são maiores que as fêmeas: | + | Para a hipótese direcionada se os machos tem mandíbulas maiores que as fêmeas: |
<code rsplus> | <code rsplus> | ||
- | unicaudal=sum(result>=result[1]) | + | unicaudal <- sum(result >= result[1]) |
unicaudal | unicaudal | ||
- | p.uni=unicaudal/length(result) | + | p.uni <- unicaudal/length(result) |
p.uni | p.uni | ||
</code> | </code> | ||
Linha 201: | Linha 201: | ||
mean(sample(macho, replace = TRUE)) | mean(sample(macho, replace = TRUE)) | ||
</code> | </code> | ||
- | Perceba que as últimas linhas de comando produzem valores diferentes apesar de serem as mesmas. Esse processo é similar ao que usamos para fazer amostras de uma distribuição conhecida com o //rnorm()// e //rpois()//, só que agora os valores passíveis de serem amostrados são apenas aqueles presentes nos nossos dados. | + | Perceba que as duas últimas linhas de comando produzem valores diferentes, apesar de serem identicas. Esse processo é similar ao que usamos para fazer amostras de uma distribuição conhecida com o //rnorm()// e //rpois()//, só que agora os valores passíveis de serem amostrados são apenas aqueles presentes nos nossos dados.as mesmas |
Se repetirmos esse procedimento muitas vezes e guardarmos os resultados de cada simulação de amostras com reposição, teremos um conjunto de pseudo-valores que representam a distribuição do nosso parâmetro e portanto, podemos calcular o intervalo de confiança que desejarmos a partir dessa distribuição. | Se repetirmos esse procedimento muitas vezes e guardarmos os resultados de cada simulação de amostras com reposição, teremos um conjunto de pseudo-valores que representam a distribuição do nosso parâmetro e portanto, podemos calcular o intervalo de confiança que desejarmos a partir dessa distribuição. | ||
Como repetimos uma operação muitas vezes no R? Usando novamente os ciclos produzidos pela função ''for(... in ...)'', vamos fazer então 100 simulações: | Como repetimos uma operação muitas vezes no R? Usando novamente os ciclos produzidos pela função ''for(... in ...)'', vamos fazer então 100 simulações: | ||
Linha 215: | Linha 215: | ||
</code> | </code> | ||
- | Agora precisamos calcular o intervalo de confiança, chamado **intervalo bootstrap**, para o limite que interessa (95%, 99%...). Vamos calcular para um intervalo de 90%. Uma forma de faze-lo é ordenando os valores e olhado quais valores estão nos extremos com 5% de cada lado. | + | Agora precisamos calcular o intervalo de confiança, chamado **intervalo bootstrap**, para o limite que interessa (95%, 99%...). Para calcular um intervalo de 90% podemos ordenar o vetor e verificar quais valores estão nos limite das posições com 5% de cada lado. Como o vetor tem cem posições só precisamos olhar a posição ''6'' e a posição ''95'' |
+ | |||
<code rsplus> | <code rsplus> | ||
sort(resulta) | sort(resulta) | ||
Linha 221: | Linha 223: | ||
sort(resulta)[95] ## o valore que deixa os 5 maiores de fora | sort(resulta)[95] ## o valore que deixa os 5 maiores de fora | ||
</code> | </code> | ||
+ | |||
+ | |||
Podemos também usar a função ''quantile()'' definindo os quantis de interesse: | Podemos também usar a função ''quantile()'' definindo os quantis de interesse: | ||
+ | |||
<code rsplus> | <code rsplus> | ||
- | quantile(resulta, prob=c(0.05, 0.95)) | + | quantile(resulta, prob = c(0.05, 0.95)) |
</code> | </code> | ||
- | Definitivamente, fazer só 100 simulações, não parece adequado. Existem muitos arranjos possíveis de 10 elementos reamostrados com reposição((se não estou equivocado o número de arranjos é 10¹⁰, mas como no nosso cálculo a ordem dos elementos não importa, esse número é efetivamente menor)). Refaça o código com 1000 (mil) iterações e recalcule o intervalo. | + | Definitivamente, fazer só 100 simulações, não parece adequado. Existem muitos arranjos possíveis de 10 elementos reamostrados com reposição((a combinatória com reposição de 10 elementos em conjuntos de 10 é da ordem de 92378)). Refaça o código com 1000 (mil) iterações e recalcule o intervalo. |
Linha 247: | Linha 252: | ||
A informação de interesse é a correlação da ocorrência de tesourinha entre diferentes regiões biogeográficas: Eurasia, África, Madagascar, Oriente, Austrália, Nova Zelândia, América do Sul e América do Norte. Valores positivos próximos a 1 representam composições de comunidades muito parecidas, valores próximos a -1 representam composição muito distintas. Vamos reconstruir essa matriz no objeto ''data.coef'': | A informação de interesse é a correlação da ocorrência de tesourinha entre diferentes regiões biogeográficas: Eurasia, África, Madagascar, Oriente, Austrália, Nova Zelândia, América do Sul e América do Norte. Valores positivos próximos a 1 representam composições de comunidades muito parecidas, valores próximos a -1 representam composição muito distintas. Vamos reconstruir essa matriz no objeto ''data.coef'': | ||
<code rsplus> | <code rsplus> | ||
- | data.coef<-matrix(c(NA, .30, .14, .23, .30, -0.04, 0.02, -0.09, NA, NA, .50,.50, .40, 0.04, 0.09, -0.06, NA, NA, NA, .54, .50, .11, .14, 0.05, rep(NA, 4), .61, .03,-.16, -.16, rep(NA, 5), .15, .11, .03, rep(NA, 6), .14, -.06, rep(NA, 7), 0.36, rep(NA, 8)), nrow=8, ncol=8) | + | data.coef <- matrix(c(NA, .30, .14, .23, .30, -0.04, 0.02, -0.09, NA, NA, .50,.50, .40, 0.04, 0.09, -0.06, NA, NA, NA, .54, .50, .11, .14, 0.05, rep(NA, 4), .61, .03,-.16, -.16, rep(NA, 5), .15, .11, .03, rep(NA, 6), .14, -.06, rep(NA, 7), 0.36, rep(NA, 8)), nrow=8, ncol=8) |
rownames(data.coef) <- c("Eur_Asia", "Africa", "Madag", "Orient", "Austr", "NewZea", "SoutAm", "NortAm") | rownames(data.coef) <- c("Eur_Asia", "Africa", "Madag", "Orient", "Austr", "NewZea", "SoutAm", "NortAm") | ||
colnames(data.coef) <- c("Eur_Asia", "Africa", "Madag", "Orient", "Austr", "NewZea", "SoutAm", "NortAm") | colnames(data.coef) <- c("Eur_Asia", "Africa", "Madag", "Orient", "Austr", "NewZea", "SoutAm", "NortAm") | ||
Linha 256: | Linha 261: | ||
<code rsplus> | <code rsplus> | ||
- | dist.atual<-matrix(c(NA,1,2,1,2,3,2,1, NA, NA, 1,2,3,4,3,2, NA, NA, NA,3,4,5,4,3, rep(NA, 4),1,2,3,2, rep(NA, 5), 1,4,3, rep(NA, 6), 5,4, rep(NA, 7), 1, rep(NA, 8)), nrow=8, ncol=8) | + | dist.atual <- matrix(c(NA,1,2,1,2,3,2,1, NA, NA, 1,2,3,4,3,2, NA, NA, NA,3,4,5,4,3, rep(NA, 4),1,2,3,2, rep(NA, 5), 1,4,3, rep(NA, 6), 5,4, rep(NA, 7), 1, rep(NA, 8)), nrow=8, ncol=8) |
dist.atual | dist.atual | ||
- | dist.deriva<- matrix(c(NA,1,2,1,2,3,2,1, NA, NA, 1,1,1,2,1,2, NA, NA, NA,1,1,2,2,3, rep(NA, 4),1,2,2,2, rep(NA, 5), 1,2,3, rep(NA, 6), 3,4, rep(NA, 7), 1, rep(NA, 8)), nrow=8, ncol=8) | + | dist.deriva <- matrix(c(NA,1,2,1,2,3,2,1, NA, NA, 1,1,1,2,1,2, NA, NA, NA,1,1,2,2,3, rep(NA, 4),1,2,2,2, rep(NA, 5), 1,2,3, rep(NA, 6), 3,4, rep(NA, 7), 1, rep(NA, 8)), nrow=8, ncol=8) |
# colocando nomes nas matrizes | # colocando nomes nas matrizes | ||
rownames(dist.atual) <- colnames(dist.atual)<- c("Eur_Asia", "Africa", "Madag", "Orient", "Austr", "NewZea", "SoutAm", "NortAm") | rownames(dist.atual) <- colnames(dist.atual)<- c("Eur_Asia", "Africa", "Madag", "Orient", "Austr", "NewZea", "SoutAm", "NortAm") | ||
- | colnames(dist.deriva)<- rownames(dist.deriva)<- c("Eur_Asia", "Africa", "Madag", "Orient", "Austr", "NewZea", "SoutAm", "NortAm") | + | colnames(dist.deriva) <- rownames(dist.deriva)<- c("Eur_Asia", "Africa", "Madag", "Orient", "Austr", "NewZea", "SoutAm", "NortAm") |
# olhando as matrizes | # olhando as matrizes | ||
dist.atual | dist.atual | ||
Linha 273: | Linha 278: | ||
$$ r = \frac{\sum_1^n (x_i - \bar{x})(y_i - \bar{y})}{\sqrt{\sum_1^n{(x_i-\bar{x})^2}}\sqrt{\sum_1^n{(y_i-\bar{y})^2}}}$$ | $$ r = \frac{\sum_1^n (x_i - \bar{x})(y_i - \bar{y})}{\sqrt{\sum_1^n{(x_i-\bar{x})^2}}\sqrt{\sum_1^n{(y_i-\bar{y})^2}}}$$ | ||
+ | |||
<code rsplus> | <code rsplus> | ||
- | cor12<-cor(as.vector(data.coef), as.vector(dist.atual), use="complete.obs") | + | cor12 <- cor(as.vector(data.coef), as.vector(dist.atual), use="complete.obs") |
- | cor13<-cor(as.vector(data.coef), as.vector(dist.deriva), use="complete.obs") | + | cor13 <- cor(as.vector(data.coef), as.vector(dist.deriva), use="complete.obs") |
cor12 ## correlação com a distancia atual | cor12 ## correlação com a distancia atual | ||
cor13 ## correlação com a distancia antes da deriva | cor13 ## correlação com a distancia antes da deriva | ||
Linha 286: | Linha 292: | ||
<code rsplus> | <code rsplus> | ||
- | data.sim<-data.coef # copia da matriz que será aleatorizada | + | data.sim <- data.coef # copia da matriz que será aleatorizada |
data.sim | data.sim | ||
Linha 294: | Linha 300: | ||
data.sim # olhando a matriz | data.sim # olhando a matriz | ||
data.sim[8:1, 8:1] # uma matriz baguncada mas que mantem certa estrutura | data.sim[8:1, 8:1] # uma matriz baguncada mas que mantem certa estrutura | ||
- | sim.pos<-sample(1:8) # posicoes permutadas | + | sim.pos <- sample(1:8) # posicoes permutadas |
sim.pos | sim.pos | ||
- | data.sim<-data.sim[sim.pos, sim.pos] # aqui uma matriz verdadeiramente permutada | + | data.sim <- data.sim[sim.pos, sim.pos] # aqui uma matriz verdadeiramente permutada |
- | cor12.sim<-cor(as.vector(data.sim), as.vector(dist.atual), use="pairwise.complete.obs") | + | cor12.sim <- cor(as.vector(data.sim), as.vector(dist.atual), use="pairwise.complete.obs") |
- | cor13.sim<-cor(as.vector(data.sim), as.vector(dist.deriva), use="pairwise.complete.obs") | + | cor13.sim <- cor(as.vector(data.sim), as.vector(dist.deriva), use="pairwise.complete.obs") |
cor12.sim | cor12.sim | ||
cor13.sim | cor13.sim | ||
Linha 309: | Linha 315: | ||
<code rsplus> | <code rsplus> | ||
- | res.cor=data.frame(sim12=rep(NA, 5000), sim13=rep(NA,5000)) | + | res.cor <- data.frame(sim12=rep(NA, 5000), sim13=rep(NA,5000)) |
str(res.cor) | str(res.cor) | ||
- | res.cor[1,]<-c(cor12, cor13) | + | res.cor[1,] <- c(cor12, cor13) |
str(res.cor) | str(res.cor) | ||
for(s in 2:5000) | for(s in 2:5000) | ||
{ | { | ||
- | sim.pos<-sample(1:8) | + | sim.pos <- sample(1:8) |
- | data.sim<-data.sim[sim.pos, sim.pos] | + | data.sim <- data.sim[sim.pos, sim.pos] |
- | res.cor[s,1]<-cor(as.vector(data.sim), as.vector(dist.atual), use="pairwise.complete.obs") | + | res.cor[s,1] <- cor(as.vector(data.sim), as.vector(dist.atual), use="pairwise.complete.obs") |
- | res.cor[s,2]<-cor(as.vector(data.sim), as.vector(dist.deriva), use="pairwise.complete.obs") | + | res.cor[s,2] <- cor(as.vector(data.sim), as.vector(dist.deriva), use="pairwise.complete.obs") |
} | } | ||
Linha 328: | Linha 334: | ||
<code rsplus> | <code rsplus> | ||
str(res.cor) | str(res.cor) | ||
- | par(mfrow=c(2,1)) | + | par(mfrow = c(2,1)) |
hist(res.cor[,1]) | hist(res.cor[,1]) | ||
- | abline(v=res.cor[1,1], col="red") | + | abline(v = res.cor[1,1], col = "red") |
hist(res.cor[,2]) | hist(res.cor[,2]) | ||
- | abline(v=res.cor[1,2], col="red") | + | abline(v = res.cor[1,2], col = "red") |
#### calculando o P ########### | #### calculando o P ########### | ||
- | p12=sum(res.cor[,1]<= res.cor[1,1])/(dim(res.cor)[1]) | + | p12 <- sum(res.cor[,1] <= res.cor[1,1])/(dim(res.cor)[1]) |
p12 | p12 | ||
- | p13=sum(res.cor[,2]<= res.cor[1,2])/(dim(res.cor)[1]) | + | p13 <- sum(res.cor[,2]<= res.cor[1,2])/(dim(res.cor)[1]) |
p13 | p13 | ||