Appel R à partir de JAVA pour obtenir Chi-carré de la statistique et de la p-valeur
J'ai deux 4*4 matrices de JAVA, où une matrice contient nombre observé et l'autre compte.
J'ai besoin d'un moyen automatisé pour calculer la p-valeur du chi-carré statistique entre ces deux matrices; toutefois, JAVA n'a pas cette fonction autant que je suis conscient.
Je peux calculer le khi-carré et sa p-valeur en lisant les deux matrices en R comme .formats de fichiers csv, puis à l'aide de la chisq.fonction de test comme suit:
obs<-read.csv("obs.csv")
exp<-read.csv("exp.csv")
chisq.test(obs,exp)
où le format de l' .les fichiers csv serait comme suit:
A, C, G, T
A, 197.136, 124.32, 63.492, 59.052
C, 124.32, 78.4, 40.04, 37.24
G, 63.492, 40.04, 20.449, 19.019
T, 59.052, 37.24, 19.019, 17.689
Compte tenu de ces commandes, R vous donnera une sortie de la forme:
X-squared = 20.6236, df = 9, p-value = 0.01443
qui comprend la valeur de p que je cherchais.
Personne ne sait d'une manière efficace pour automatiser le processus d':
1) de la Sortie de mon matrices de JAVA .les fichiers csv
2) Téléchargement de la .les fichiers csv dans la R
3) l'Appel de la chisq.essai sur l' .les fichiers csv dans la R
4) Retour de la sortie de la p-valeur en JAVA?
Merci pour toute aide....
OriginalL'auteur | 2013-04-15
Vous devez vous connecter pour publier un commentaire.
Il y a (au moins) deux façons d'aller à ce sujet.
Ligne de commande & Scripts
Vous pouvez exécuter Rscripts à partir de la ligne de commande avec
Rscript.exe
. E. g. dans votre script, vous aurait:Plutôt que de créer des volumes csv en Java et ayant R lecture, vous devriez être en mesure de passer directement à R. je ne vois pas la nécessité de créer des CSVs et de transmettre les données de cette façon, à MOINS que votre matrices sont assez grandes. Il y a des limitations sur la taille des arguments de ligne de commande vous pouvez passer (varie selon le système d'exploitation je pense).
Vous pouvez passer des arguments dans Rscripts et les analyser à l'aide de la
commandArgs()
fonctions ou avec différents logiciels (par exemple, optparse ou getopt). Voir ce fil de discussion pour plus d'informations.Il y a plusieurs moyens d'appel et de la lecture à partir de la ligne de commande en Java. Je ne connais pas assez pour vous donner des conseils, mais un peu de recherche sur google vous donnera un résultat. Appel d'un script à partir de la ligne de commande se fait comme ceci:
JRI
JRI vous permet de parler à la R directement à partir de Java. Voici un exemple de la façon dont vous voulez passer un tableau double de R et de R en somme (c'est Java maintenant):
La fonction
assign()
ici est le même que le faire dans la R:Vous devriez être en mesure de travailler sur la façon de prolonger ce travail par une matrice.
Je pense que JRI est assez difficile au début. Donc, si vous voulez obtenir ce fait rapidement l'option de ligne de commande est probablement le meilleur. Je dirais que le JRI approche est moins salissant une fois que vous avez mis en place. Et si vous avez des situations où vous avez beaucoup d'allers et retours entre la R et la Java, c'est certainement mieux que l'appel de plusieurs scripts.
J'obtiens les erreurs suivantes: import org.rosuda.JRI.REXP ne peut pas être résolu, import org.rosuda.JRI.Rengine ne peut pas être résolu, Rengine ne peut pas être résolu à un type. Aucune idée sur ce que pourrait en être la cause? Merci encore une fois...
Je vois que vous avez déjà ouvert une autre question à ce sujet. Si vous éprouvez toujours de la difficulté à mettre, je vous conseille d'utiliser ce plugin je l'ai suggéré dans ma réponse (dernier lien). Il prend soin de tout le stress de la mise JRI qui peut être étonnamment difficile.
OriginalL'auteur MadScone
Consulter cette page JRI
Formulaire de Description de leur site:
OriginalL'auteur rarry
RCaller 2.2 pouvez faire ce que vous voulez faire. Supposons que la fréquence de la matrice est donnée que dans votre question. Il en a résulté p.valeur et df variables peuvent être calculés et retourné à l'aide du code ci-dessous:
La sortie est:
Vous pouvez obtenir les détails techniques dans ici
OriginalL'auteur jbytecode
Rserve est une autre façon d'obtenir vos données à partir de Java à la recherche et au dos. C'est un serveur qui prend en R scripts comme une chaîne de caractères entrées. Vous pouvez utiliser de la chaîne de l'analyse et de la conversion en Java pour convertir les matrices dans des chaînes de caractères qui peuvent être entrés dans R.
Voici quelques informations sur Rserve. Incidemment, c'est aussi la façon de Tableau peut communiquer avec les R ainsi avec leur R de connexion.
https://cran.r-project.org/web/packages/Rserve/index.html
OriginalL'auteur Vikas Kache
1) de la Sortie de mon matrices de JAVA .les fichiers csv
Utiliser tout de CSV libraies, je vous recommande http://opencsv.sourceforge.net/
2) Téléchargement de la .les fichiers csv dans la R
3) l'Appel de la chisq.essai sur l' .les fichiers csv en R
2 & 3 a quasiment la même,
Vous feriez mieux de créer paramétrées script à exécuter dans R.
De sorte que vous pouvez exécuter
et l'utilisation des noms uniques pour les fichiers csv par exemple:
Et puis vous utilisez
4) Retour de la sortie de la p-valeur en JAVA?
Vous ne pouvez lire la sortie de la R si vous utilisez getRuntime().exec() pour appeler R.
Je vous recommande aussi de prendre un coup d'oeil à Apache Statistiques de la Lib & Comment calculer la valeur p de ChiSquare. Peut-être que vous pouvez vivre sans R à tous 🙂
OriginalL'auteur Vasily
Je recommande de n'utiliser qu'une bibliothèque Java qui fait un ChiSquare test pour vous. Il y en a assez:
Ce n'est pas une liste complète, mais ce que j'ai trouvé en 5 minutes à chercher.
OriginalL'auteur ziggystar