2017-02-16 2 views
0

Le package MINERVA fournit une fonction pour réaliser le MIC (Maximal Information Coefficient). La description du paquet stipule que la fonction mine (x, y) ne fonctionne qu'avec 2 matrices A et B de même taille. Ici, je voudrais obtenir la valeur du coefficient MIC obtenue à partir de la corrélation de deux matrices A et B de taille différente, respectueusement, A est n par m et B est n par z, avec n étant le nombre d'observations (rangées). En d'autres termes, mon but est d'obtenir une matrice C de m x z, qui renvoie, pour chaque valeur, on donne les valeurs de coefficient de corrélation MIC (et, si possible, la valeur de P associée, si seulement).Corrélation MIC entre 2 matrices dans R

Je fournis un exemple de ce que je veux avec la corrélation de Pearson.

set.seed(1) 
x <- matrix(rnorm(20), nrow=5, ncol=10) 
y <- matrix(rnorm(15), nrow=5, ncol=20) 
P <- cor(x, y=y) 

J'ai envoyé un auteur du paquet MINERVA sans succès, est-il possible que je peux appliquer la fonction de la mine pour obtenir le désiré m par z corrélation?

Répondre

0

Permettez-moi de répondre à mes propres questions. Dans le code ci-dessous, j'utilise la fonction de boucle, qui n'est peut-être pas la façon la plus intelligente/la plus rapide de le faire, mais cela fonctionne comme prévu.

library(minerva) 
set.seed(1) 
x <- matrix(rnorm(20), nrow=5, ncol=10) 
y <- matrix(rnorm(15), nrow=5, ncol=20) 

Result = matrix(ncol = ncol(y),nrow = ncol(x)) 
for(i in 1:ncol(x)) 
{Thisvar = x[,i] 
    print(i) 
for(k in 1:ncol(y)) 
    {Thisvar2 = y[,k] 
    res = mine(Thisvar,Thisvar2, master=TRUE, use="all.obs") 
    Result[i,k] = res$MIC 
}}