J'ai une 191 échantillons, caractérisés par 920 variables. Ces échantillons ont 66 provenances, j'ai donc soit des duplicats, soit des triplicats.
Code : Tout sélectionner
mat <- matrix(data = rnorm(1:(191*920)), nrow=920, ncol = 191)
replicats <- c(rep(3, 20), rep(2, 4), rep(3, 39), rep(2,3)) # le nombre de répétitions de chaque provenance
replicats
[1] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
[49] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 2 2 2
J'ai calculé une matrice de corrélation sur l'ensemble des échantillons comme suit :
Code : Tout sélectionner
mat_corr <- rcorr(mat)$r
Code : Tout sélectionner
> mat_corr[1:6, 1:6]
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 1.0000000 0.47180548 0.1755502 -0.510588905 -0.65118471 0.130882787
[2,] 0.4718055 1.00000000 -0.1050931 -0.040122958 -0.37220522 -0.110187036
[3,] 0.1755502 -0.10509307 1.0000000 -0.232531709 -0.35047654 0.120629975
[4,] -0.5105889 -0.04012296 -0.2325317 1.000000000 0.01365126 -0.006923696
[5,] -0.6511847 -0.37220522 -0.3504765 0.013651262 1.00000000 -0.239185284
[6,] 0.1308828 -0.11018704 0.1206300 -0.006923696 -0.23918528 1.000000000
Je voudrais maintenant redécouper cette matrice "en diagonale", en prenant pour ma première condition les mat_corr[1:3,1:3] (car replicat[1]=3), puis mat_corr[4:6,4:6], etc.
En gros, je souhaite récupérer une liste de "mini matrices de corrélation" pour chaque condition, pour ensuite calculer la corrélation moyenne de chaque échantillon avec ses réplicats.
Pour l'instant je suis perdue dans des boucles :
Code : Tout sélectionner
liste_corr_repl <- list()
for (i in 1:nrow(mat_corr )) {
for (j in 1:(length(replicats))){
liste_corr_repl[i] <- mat_corr[i:(i+(replicats[j]-1)), i:(i+(replicats[j]-1))]
j <- j + replicats[i]
}
}
Mais ça ne donne rien...
Quelqu'un aurait une idée ?
Merci d'avance pour votre aide !