J'ai une grande matrice ratase (appelez-la matrice code>) dans laquelle les lignes sont les caractéristiques et les colonnes sont les échantillons. Chaque colonne / échantillon appartient à 1 de 6 groupes. J'échantillons au hasard une certaine quantité de chaque groupe et stockez quel index ils appartiennent à la matrice d'origine.
> result
[1] "Astro-Endo : 0.115331575924872" "Astro-Micro : 0.935664046257304" "Astro-Neuron : 0.0271849565394441"
[4] "Astro-Oligo : 0.00147694402781699" "Astro-OPC : 0.0476580762532988" "Endo-Micro : 0.297672151508384"
[7] "Endo-Neuron : 2.38134038927696e-06" "Endo-Oligo : 0.0323129112432441" "Endo-OPC : 0.451258974150342"
[10] "Micro-Neuron : 0.000143621746738224" "Micro-Oligo : 0.0178171887595787" "Micro-OPC : 0.0692129715131915"
[13] "Neuron-Oligo : 6.68255453156116e-10" "Neuron-OPC : 6.201108273594e-07" "Oligo-OPC : 0.142213241936393"
3 Réponses :
Si j'ai tout compris, ce problème se résume à calculer une mesure de similarité pour un groupe de fonctionnalités. Je l'aborderais à l'aide de la bibliothèque code> proxy code> et J'ai généré un ensemble de données synthétiques pour illustrer le processus: p> proxy :: dist code> fonction, en particulier. Il permet d'utiliser une mesure de similarité personnalisée.
test_fun <- function(x,y) {wilcox.test(x,y)$p.value}
fs <- c(feature_set_1, feature_set_2, feature_set_3)
k <- 1
dist_mat <- vector(mode="list")
for (i in seq_along(fs)){
for (j in 1:i){
if (i>j) {
dist_mat[[k]] <- proxy::dist(feature_df[fs[[i]], ], feature_df[fs[[j]], ], method = test_fun, by_rows = TRUE)
k <- k+1
}
}
}
Si je comprends bien ce que vous avez fait, c'est effectuer le test dans chaque ensemble de fonctionnalités qui n'est pas ce que je veux faire. Je voulais faire la même chose, mais à travers les différentes fonctionnalités. Encore une fois à nouveau sur l'exemple que j'ai fourni dans résultat code> J'ai le groupe Astro étant comparé à tous les différents groupes (Neuron, endo, etc.). Dans votre exemple qui traduirait la fonctionnalité_set_1 étant comparé à Feature_set_2 ainsi que toutes les combinaisons "3 Choisissez 2". Y-a-t-il un moyen de faire ça?
Pour clarifier plus loin, tous les éléments de fonctionnalité_set_1 auraient le test Wilcox réalisé à nouveau tous les éléments de fonctionnalité_set_2. Vous faites quelque chose de similaire mais vous faites toute la comparaison dans chacune des «fonctionnalités» individuelles.
Cela fonctionne certainement, mais il est un peu difficile à déchiffrer lorsque la nouvelle comparaison de fonctionnalités commence et se termine (je suppose que cela pourrait être corrigé avec un étiquetage?). Mais je suis inquiet pour les boucles car il a fallu quelques secondes à courir (j'ai une matrice de l'ordre de 30 000+ par 100 000+). Je sais que ça va prendre un moment, mais je vais le tester sur le jeu de données d'origine.
i code> et
j code> sont des indices qui fonctionnent sur le jeu de fonctions.
j code> est tel qu'il est inférieur à
i code>. Cela permet une comparaison par paire sans exécutions en double (i, j est la même que J, I dans ce contexte). Pensez au triangle inférieur d'une matrice. Les boucles ne sont pas nécessairement lentes tant qu'elles sont correctement implémentées.
Oh, je viens de réaliser la façon dont vous avez abordé le problème était incorrect. J'ai réalisé que je ne l'ai pas expliqué aussi bien que je pensais et j'ai mal compris ce que vous avez fait. Donc, la méthode que vous avez écrite effectue le test en comparant TOUTES B> les fonctionnalités entre les différents échantillons. Je veux comparer une fonctionnalité b> mais depuis que chacun des éléments de "Feature_sets" contient une valeur pour cette fonctionnalité que je souhaite voir si une fonctionnalité est statistiquement différente parmi les trois "Feature_Sets". Désolé pour cette confusion.
Laissez-nous Continuez cette discussion en chat .
J'utiliserais EDIT: strong> p> Exemple: p> créé sur 2020-06-18 par le package Reprex (v0.3.0) sup> p> Edit # 2: strong> P> juste à Voir ce que mon approche vous donnerait dans environ 1/20 000e fois (sur ma machine, au moins) de l'approche de stupidwolf, essayez-la avec son exemple créé sur 2020-06-19 par le Paquet Reprex (v0.3.0) sup> p> p> paireWaywilcox code> à partir de
Scran code> pour cela - cela semble idéal pour votre problème.
Il effectue des tests de somme de classement par paires de Wilcoxon pour chaque ligne entre groupes de colonnes, où les groupes sont un vecteur des assignations de colonne.
MAT code> et
groupe code >:: p>
Ce n'est pas clair pour moi comment / ce qu'il s'agit de comparer et de calculer les statistiques de test sur. Cela semble comparer chaque valeur individuelle dans la matrice à d'autres par opposition à la mise en commun d'une caractéristique des 6 groupes (chacune avec une quantité x d'échantillon du groupe respectif) et effectuant le test à ce sujet, ce que je veux faire .
Voir la poste éditée, essayant de faire le point qu'il fait ce qu'il est censé faire. De petites différences proviennent de la façon dont les liens sont cassés.
Hey le deuxième édition semble vraiment prometteur. Cependant, chaque fois que j'exécute res code>, je reçois une erreur indiquant
erreur d'erreur dans eval (jsub, sddenv, parent.frame ()): objet 'rn' non trouvé code>. J'ai vérifié pour vous assurer que j'utilisais l'utilisation de @stupidwolf
Mat CODE> et
Groupe CODE> VARIABLES, mais je continue toujours à obtenir cette erreur.
RN CODE> est le nom de colonne généré automatiquement lors de la forcente d'une donnée.frame à une carte de données.Table à l'aide de
Garder.Rowne = true code>. Dans la partie ultérieure du code, j'ai renommé que la colonne sur
gène code>. Le code doit exécuter - voir l'exemple de reproductible complet lors de la modification finale. La deuxième modification n'a rien fait d'autre que d'appliquer un exemple différent et de contraindre les listes de résultats en une seule grande table.
Très probablement Le code que vous n'avez pas de sens pour les personnes qui ne connaissent pas ce type de données. Très probablement, vous avez une matrice d'expression génique et pour chaque ligne (Gene), vous souhaitez effectuer un test Wilcox par paire. Vous échantillon des métadonnées, donc probablement pas la meilleure chose à faire statistiquement, mais c'est un moyen d'organiser vos données. D'abord définir des données: p> Nous pouvons échantillonner efficacement en faisant: p> ci-dessous Vous devez décider 1 . Qu'il s'agisse d'utiliser une correction du FDR (que vous puissiez faire après), et que vous souhaitez que vous souhaitiez de telles données massives.frame: p> Ce qui précède prend un moment, mais il Devrait courir OK, vous pouvez également envisager de le parallementer. Le résultat ressemble à ceci: p> rang_index code>.
Comment parallementez-vous de telles opérations? Est-ce quelque chose que je dois écrire d'une manière ou quelque chose pour dire à mon ordinateur spécifiquement?