0

可能重复:
是否有用于更好线性回归的 Java 库?(例如,迭代地重新加权最小二乘)

我有以下代码 inf R,但我需要在 java 中实现相同的东西。我数学不是很厉害,所以需要一些帮助。

test_trait <- c( -0.48812477 , 0.33458213, -0.52754476, -0.79863471, -0.68544309, -0.12970239,  0.02355622, -0.31890850,0.34725819 , 0.08108851)

geno_A <- as.factor(c("Sub_0001"=1, "Sub_0002"=0, "Sub_0003"=1, "Sub_0004"=2, "Sub_0005"=0, "Sub_0006"=0, "Sub_0007"=1, "Sub_0008"=0, "Sub_0009"=1, "Sub_0010"=0))

geno_B <- as.factor(c("Sub_0001"=0, "Sub_0002"=0, "Sub_0003"=0, "Sub_0004"=1, "Sub_0005"=1, "Sub_0006"=0, "Sub_0007"=0, "Sub_0008"=0, "Sub_0009"=0, "Sub_0010"=0) )

fit <- lm(test_trait ~ geno_A*geno_B)
res <- anova(fit)
p.value <- res[3,5]

编辑 1:我在发布此问题之前检查了 Apache Commons Math 库并检查了是否有 Java 库可以提供更好的线性回归?(例如,迭代地重新加权最小二乘),但我的问题是我无法确定我的情况是简单线性回归还是多重回归。

test_trait包含从遗传性状表达的身高geno_Ageno_B. geno_A并且geno_B等位基因

4

2 回答 2

2

谷歌搜索java linear regression引导我找到一些有趣的链接,其中这个 SO 问题:

是否有用于更好线性回归的 Java 库?(例如,迭代地重新加权最小二乘)

于 2013-01-29T09:52:03.213 回答
0

y = a + b*x可以使用以下等式计算线性回归:

b = (n*Σ(X*Y) - (ΣX)*(ΣY)) / (n*Σ(X^2) - (ΣX)^2)
a = (ΣY - b*(ΣX)) / n

这里 Σ(A) 是 A 的所有可用值的总和,n - 这些值的数量(X、Y 对的数量)。

如果需要直接对您的自定义数据结构进行回归,则可能首选自己的实现。库需要传递它支持的数据结构,可能需要克隆大量数据或以其他次优方式设计数据结构。

另一方面,如果数据量不大或者double[]对您的项目来说结构足够好,来自 Apache Commons 的SimpleRegression可能适用于最常见的情况。

于 2013-01-29T09:58:30.540 回答