Dans un étude spatiale, je cherche à montrer que les pieds d'une espèce végétale rélévée sont significativement à proximité de structures.
Les n pieds sont distribués aléatoirement 1000 fois, puis la distance de ces 1000*n pieds est calculée sous SIG. Il me suffit alors de comparer ma distance moyenne réelle à mes 1000 distances moyennes théoriques pour extraire la p-value.
Ayant réitéré la démarche sur plusieurs espèces, j'ai remarqué que le nombre de pieds distribués à une une nette influence sur la distribution des 1000 distances moyennes théoriques. La distance moyenne seuil pour un p-value de 0.05 varie donc avec le nombre de pieds (équivalent de dll). Je cherche à obtenir la courbe d'évolution de cette distance seuil par rapport au nombre de pieds distribués.
J'ai donc distribué aléatoirement un très grand nombre de points (100000) dans l'espace de ma zone d'étude et calculé leur distance par rapport aux structures paysagères.
J'ai ensuite importé la table attributaire de ces points sour R (data_base). Les deux champs de cette table sont: ID (le numéro de tirage du point) et DIST (distance aux structures paysagères).
J'arrive à créer une table de 100000 lignes et de i colonnes contenant les numéros de distributions aléatoires de i pieds (tempo_ID2).
J'arrive à créer une table de 100000 lignes et de i colonnes contenant i*les distances des 100000 points aléatoires (tempo_dist).
Code : Tout sélectionner
for (i in 1:100)
{
table<-matrix(0,2,i)
table[1,]<-c(1:i)
tempo_table<-matrix(table[1,], length(data_base$ID),ncol(table),byrow=T)
tempo_ID<-matrix(data_base$ID, length(data_base$ID),ncol(table))
tempo_ID2<-floor((tempo_ID/tempo_table)+1)
tempo<-replace(tempo_ID2, tempo_ID2>1000, NA)
tempo_dist<-matrix(data_base$DIST, length(data_base$ID),ncol(table))
Je cherche maintenant à aggréger la colonne i de tempo_dist par la colonne i de tempo_ID2 afin d'obtenir mes 1000 distances moyennes théoriques pour chaque distribution de i pieds.
La fin du code est :
Code : Tout sélectionner
res<-matrix(0, 1000,ncol(table))
res[,i]<- aggregate(tempo_dist[,i], list(tempo[,i]),FUN=mean)$x
}
Malheureusement, je n'arrive pas à gérer cette fonction aggregate dans la boucle au sens où j'optiens cette erreur:
Code : Tout sélectionner
Erreur dans res[, i] <- aggregate(tempo_dist[, i], list(tempo[, i]), FUN = mean)$x :
le nombre d'objets à remplacer n'est pas multiple de la taille du remplacement
J'ai remplacé toutes valeurs >1000 par NA dans tempo afin d'obtenir toujours le même nombre de groupes, mais celà ne semble pas suffire.
Quelqu'un saurait-il comment déjouer ce problème?
J'avais aussi essayé:
Code : Tout sélectionner
for (i in 1:8)
{
table<-matrix(0,2,i)
table[1,]<-c(1:i)
tempo_ID<-matrix(data_base$ID, length(data_base$ID),ncol(table))
tempo_ID2<-floor((tempo_ID/tempo_table)+1)
tempo<-replace(tempo_ID2, tempo_ID2>1000, NA)
tempo2<-cbind(data_base$DIST, tempo)
table[2,i]<-(sort(aggregate(tempo2[,1], list(tempo2[,i+1]),FUN=mean)$x))[50]
}
mais j'obtiens dans "table" des distances de 0, sauf pour la valeur de i la plus forte.
Merci d'avance,
Tino[/code]