【问题标题】:Java Generalized Linear Model Library [closed]Java 广义线性模型库 [关闭]
【发布时间】:2023-03-06 15:00:01
【问题描述】:

我正在尝试将一些 R 代码移植到 Java/Scala 并需要一个等效的 glm 函数。是否有任何 Java/Scala 库可以解决具有准泊松错误和日志链接功能的广义线性模型?

到目前为止,我发现:

我没有构建自己的求解器的知识。

更新:我应该要求免费/开源。算数似乎要花 1500 美元购买一个 MAC 地址。

【问题讨论】:

  • 作为最后的手段,您可以使用 rJava/JRI 从 Java 调用 R 的 glm。
  • 我在回答中添加了一些其他的可能性,还有Logistic Regression in Java。不过老实说,在查看了所有可用的内容之后,Rex 建议从 Java 调用 R 可能是您最好的选择。

标签: java scala statistics


【解决方案1】:

是否有任何 Java/Scala 库可以解决广义线性模型 具有准泊松误差和日志链接功能?

到目前为止,我发现:

  • 算数,但是不知道怎么得到帽子矩阵。

按照算数这个例子,貌似可以得到一个投影矩阵或者帽子值。

Examples/src/com/numericalmethod/suanshu/examples/LinearRegression.java

这里是示例代码的概要,尽管听起来您可能想要构建一个更具体的GLMProblem,而不是在此处创建的基类 LMProblem:

LMProblem problem = new LMProblem( 
    new DenseVector(new double[]{2.32, 0.452, 4.53, 12.34, 32.2}), 
    new DenseMatrix(new double[][]{ 
        {1.52, 2.23, 4.31}, 
        {3.22, 6.34, 3.46}, 
        {4.32, 12.2, 23.1}, 
        {10.1034, 43.2, 22.3}, 
        {12.1, 2.12, 3.27} 
    }), 
    true); 

OLSRegression regression = new OLSRegression(problem);
OLSResiduals residuals = regression.residuals();

ImmutableVector hatValues = residuals.leverage(); // gets the leverage (R hatvalues)
ImmutableMatrix hHat = residuals.hHat(); // gets the projection matrix, H-hat

希望对您有所帮助。

其他可能性

另见Logistic Regression in Java

【讨论】:

    【解决方案2】:

    试试https://github.com/chen0040/java-glm,它支持广泛的发行系列。

    【讨论】:

    • 为什么投反对票?
    【解决方案3】:

    最后我使用了Rserve、rjson 和 json4s 的组合(在 Scala 中工作)。

    我更喜欢使用 rjson 和 json4s 将数据传入和传出 Rserve。

    将数据推入 R,运行命令,获取结果:(未经测试)

        val rInput = 
            ("MyTable" -> 
                ("ColA" -> 1 to 10) ~
                ("ColB" -> 11 to 20)
            ) ~
            ("config" -> 5)
        rConnection.assign("jsonIn", compact(render(json)))
        rConnection.parseAndEval("""
            parsedJSON = fromJSON(jsonIn)
            myData = as.data.frame(parsedJSON$MyTable)
            config = parsedJSON$config
            results = various.r.commands
            toJSON(list("res1" = results[[1]],"res2" = results[[1]]))
        """)
        val rOut = JsonMethods.parse(rExpression.asString())
    

    获取 Rserve 连接,必要时启动进程:

    def ensureRunning(initialAttempts: Int = 1, postStartAttempts: Int = 10, daemonizeThreads: Boolean = true){
        getConnection(initialAttempts)
            .recoverWith{case _ => 
                startRserve(daemonizeThreads)
                getConnection(postStartAttempts)
            }
            .map(_.close())
            .recover{case _ => throw new Exception("Failed to find or start Rserve")}
            .get
    }
    
    @tailrec
    def getConnection(countdown: Int): Try[RConnection] = {
        if(countdown == 0) Failure(new ConnectException("Could not connect to Rserve"))
        else try{
            val c = new RConnection()
            log.debug("Rserve connection confirmed")
            Success(c)
        } catch {
            case _: Exception => 
                val newCountdown = countdown - 1
                log.debug("Searching for Rserve {} tries left",newCountdown)
                Thread.sleep(100)
                getConnection(newCountdown)
        }
    }
    
    private def startRserve(daemonizeThreads: Boolean){
        implicit def toLines(in: InputStream) = Source.fromInputStream(in).getLines
    
        log.info("Starting new Rserve process (daemon = {})", daemonizeThreads)
        val io = 
            new ProcessIO(
                    in => in.close,
                    out => {
                        out.foreach(log.info)
                        out.close   
                    },
                    err => {
                        err.foreach(log.error)
                        err.close   
                    },
                    daemonizeThreads
            )
        Process("R CMD Rserve --no-save --slave").run(io)
    }
    

    【讨论】:

      猜你喜欢
      • 2016-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-29
      • 1970-01-01
      • 2015-10-06
      • 1970-01-01
      • 2018-04-04
      相关资源
      最近更新 更多