J'aimerais créer des courbes d'accumulation, notamment des courbes d'accumulation métriques, en utilisant le bootstrapping et les boucles for. Je souhaite échantillonner (avec remplacement) le nombre total de parcelles dans mon ensemble de données d'exemple, en commençant par 1 et en remontant jusqu'au nombre total ( n \=1 max n ). Chacun sera échantillonné 1000 fois.
Je ne pense pas qu'un paquet, tel que Vegan, puisse m'aider dans ce domaine, puisque je ne cherche pas à obtenir des courbes d'accumulation d'espèces, mais que j'ai plutôt besoin de calculer des métriques basées sur des données d'abondance et le coefficient de conservatisme d'une espèce végétale (veuillez me corriger si je me trompe !).
Mon jeu de données d'exemple est une matrice, avec des parcelles, des noms d'espèces végétales, des valeurs d'abondance et des valeurs c (coefficients de conservatisme) :
https://docs.google.com/spreadsheets/d/1v-93sV4ANUXpObVbtixTo2ZQjiOKemvQ_cfubZPq9L4/edit?usp=sharing
Pour chacune des 1000 itérations pour chaque n Pour chaque échantillon, j'ai besoin de construire une matrice qui contiendra les résultats des 1000 itérations, avec le nom de l'espèce, l'abondance et la valeur c, puis d'éliminer toute espèce en double dans cet échantillon. Pour chaque itération, je dois ensuite calculer les métriques de végétation. Il est important que je ne calcule pas la métrique pour l'ensemble des 1000 itérations, mais pour chaque itération individuelle.
Je vais répéter pour n +1 jusqu'à max n . À la fin, idéalement, j'introduirai ces résultats dans une matrice de mes résultats finaux, dont les rangées sont n max n et 1000 colonnes avec des métriques calculées pour chacune de ces 1000 itérations. Je ferai ensuite la moyenne des itérations, puis je créerai une courbe d'accumulation de la mesure que je souhaite à partir de ces moyennes.
Le code que j'ai pensée a été utile est inclus ci-dessous, avec un exemple différent d'ensemble de données, y compris les métriques qui m'intéressent de calculer.
https://docs.google.com/spreadsheets/d/1GcH2aq3qZzgTv2YkN-uMpnShblgsuKxAPYKH_mLbbh8/edit?usp=sharing
d<-Example2
d<-data.matrix(d)
MEANC<-function(x){
mean(x, na.rm=TRUE)
}
FQI<-function(x){
mean(x, na.rm=TRUE)*sqrt(sum(!is.na(x)))
}
RICH<-function(x){
totalsprich<-sum(x)
sum(x!=0, na.rm=TRUE)
}
shannon <- function(x){
totalCov <- sum(x, na.rm=TRUE)
(sum(x / totalCov * log(x / totalCov), na.rm=TRUE)) * -1
}
#for this particular example, the only two functions (metrics) that will work will be RICH and shannon
nrep<-1000
totalQuads<-nrow(d)
bootResultSD<-data.frame(matrix(nrow=nrep, ncol=totalQuads) )
bootResultMean<-data.frame(matrix(nrow=nrep, ncol=totalQuads) )
for(j in 1:totalQuads){
for(i in 1:nrep){
bootIndex<-sample(1:totalQuads, j, replace=FALSE)
bootSample<-d[bootIndex, na.rm=TRUE, drop=FALSE]
VALUES<-apply(bootSample, 1, shannon)
bootResultSD[i, j]<-sd(VALUES, na.rm=TRUE)
bootResultMean[i, j]<-mean(VALUES, na.rm=TRUE)
}
}
VALUES
bootResultSD
bootResultMean
meanDATA <- apply(bootResultMean, 2, mean, na.rm=TRUE)
meanDATASD <- apply(bootResultSD[-1], 2, mean, na.rm=TRUE)
Le problème avec ce que j'ai créé auparavant est qu'il calcule les paramètres par parcelle, au lieu de cumuler les parcelles et de recalculer les paramètres sur la base de chaque échantillon cumulé. Voici ce que j'ai créé jusqu'à présent à partir du code ci-dessus, mais je ne pense pas que ce soit ce dont j'ai besoin :
for(j in 1:totalQuads){
for(i in 1:nrep){
bootIndex<-sample(1:totalQuads, 10, replace=TRUE)
bootSample<-d[bootIndex, na.rm=TRUE, drop=FALSE]
booted<-bootSample[!duplicated(bootSample[,2]),]
bootResultSD[i, j]<-sd(booted, na.rm=TRUE)
bootResultMean[i, j]<-mean(booted, na.rm=TRUE)
}
}
Je ne sais pas comment procéder au-delà de ce point. Merci d'avance !