3 java statistics r chi-squared
我在JAVA中有两个4*4矩阵,其中一个矩阵包含观察计数和其他预期计数.
我需要一种自动的方法来计算这两个矩阵之间的卡方统计量的p值; 但是,就我所知,JAVA没有这样的功能.
我可以通过将两个矩阵读入R作为.csv文件格式,然后使用chisq.test函数计算卡方和p值,如下所示:
obs<-read.csv("obs.csv")
exp<-read.csv("exp.csv")
chisq.test(obs,exp)
Run Code Online (Sandbox Code Playgroud)
其中.csv文件的格式如下:
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
Run Code Online (Sandbox Code Playgroud)
给定这些命令,R将给出格式的输出:
X-squared = 20.6236, df = 9, p-value = 0.01443
Run Code Online (Sandbox Code Playgroud)
其中包括我正在寻找的p值.
有谁知道自动化过程的有效方法:
1)将我的矩阵从JAVA输出到.csv文件中2)将.csv文件上传到R 3)将.csv文件上的chisq.test调用到R中4)将输出的p值返回JAVA?
谢谢你的帮助....
Mad*_*one 12
有(至少)两种方式来解决这个问题.
您可以使用命令行执行Rscripts Rscript.exe.例如,在您的脚本中,您将拥有:
# Parse arguments.
# ...
# ...
chisq.test(obs, exp)
Run Code Online (Sandbox Code Playgroud)
您应该能够直接将它们传递给R而不是用Java创建CSV并让R读取它们.我不认为需要创建CSV并以这种方式传递数据,除非您的矩阵非常大.您可以传递的命令行参数的大小存在限制(我认为操作系统不同).
您可以将参数传递给Rscripts并使用commandArgs()函数或各种包(例如optparse或getopt)解析它们.有关更多信息,请参阅此主题.
在Java中有几种从命令行调用和读取的方法.我不太了解它给你的建议,但一些谷歌搜索将给你一个结果.从命令行调用脚本是这样的:
Rscript my_script.R
Run Code Online (Sandbox Code Playgroud)
JRI允许您直接从Java与R交谈.下面是一个如何将双数组传递给R并将R求和的示例(现在是Java):
// Start R session.
Rengine re = new Rengine (new String [] {"--vanilla"}, false, null);
// Check if the session is working.
if (!re.waitForR()) {
return;
}
re.assign("x", new double[] {1.5, 2.5, 3.5});
REXP result = re.eval("(sum(x))");
System.out.println(result.asDouble());
re.end();
Run Code Online (Sandbox Code Playgroud)
assign()这里的函数与在R中执行此操作相同:
x <- c(1.5, 2.5, 3.5)
Run Code Online (Sandbox Code Playgroud)
您应该能够找出如何扩展它以使用矩阵.
我认为JRI在开始时非常困难.因此,如果您希望快速完成此操作,命令行选项可能是最佳选择.我会说,一旦你设置它,JRI方法就不那么混乱了.如果你有在R和Java之间有很多来回的情况,它肯定比调用多个脚本更好.