Math 多元线性回归

Math 多元线性回归,math,apache-commons,linear-regression,Math,Apache Commons,Linear Regression,我正在尝试使用GLSMultipleLinearRegression(来自apache commons数学包)进行多元线性回归。它需要一个协方差矩阵作为输入——我不知道如何计算它们。我有一个因变量数组和三个自变量数组。 知道如何计算协方差矩阵吗 注:3个自变量各有200项 谢谢 Bharani您是否尝试过创建一个新的应用程序 使用评论中的信息,我们知道有3个独立变量、1个因变量和200个样本。这意味着您将拥有一个包含4列和200行的数据数组。最终结果如下所示(为了解释我的意思,请明确输入所有内容

我正在尝试使用GLSMultipleLinearRegression(来自apache commons数学包)进行多元线性回归。它需要一个协方差矩阵作为输入——我不知道如何计算它们。我有一个因变量数组和三个自变量数组。
知道如何计算协方差矩阵吗

注:3个自变量各有200项

谢谢
Bharani

您是否尝试过创建一个新的应用程序

使用评论中的信息,我们知道有3个独立变量、1个因变量和200个样本。这意味着您将拥有一个包含4列和200行的数据数组。最终结果如下所示(为了解释我的意思,请明确输入所有内容):

然后,得到协方差矩阵:

MultipleLinearRegression regression = new GLSMultipleLinearRegression();
// Assumes you put your independent variables in x and dependent in y
// Also assumes that you made your covariance matrix as shown above 
regression.addData(y, x, omega); // we do need covariance

如果您不知道误差之间的协方差,我将使用普通最小二乘法(OLS)而不是广义最小二乘法(GLS)。这相当于将单位矩阵作为协方差矩阵。该库似乎在中实现了OLS

如果不知道误差之间的协方差,可以采用迭代方法。首先使用普通最小二乘法计算误差和误差之间的协方差。然后使用计算出的协方差矩阵应用GLS,并重新估计协方差矩阵。您将继续使用带有新协方差矩阵的GLS进行迭代,直到收敛。(.pdf警告)此方法的一个示例,以及有关加权和迭代加权最小二乘法的相关讨论,其中您在GLS中假设的误差之间没有相关性。

刚刚遇到了一个现成的库。还收到了一封来自commons用户列表的邮件,commons目前正在进行数学计算-自动估计协方差矩阵

-巴拉尼

@Mark Lavin

你首先要用普通的 平方,计算误差,以及 误差之间的协方差


我有点困惑。。因为我们只有一个响应变量,所以剩余误差应该是一维变量。那么误差的协方差矩阵在哪里合适呢?

您需要将3个随机独立变量组织为矩阵中的列向量:x1、x2、x3(N),其中每一行是一个观测值(M)。这将是一个MxN矩阵

然后将此数据矩阵插入Apache提供的协方差例程,例如:
ComputeConvariace.ComputeConvariaceMatrix(RealMatrix matrix)。

是的,我试过这样做-我的问题是,我每个X有200个项目,所以它不是一个平方矩阵,GLS抱怨org.apache.commons.math.MathRuntimeException$4:维度不匹配200!=3对不起,我应该提到,在问题陈述中,我现在将对其进行编辑。我首先尝试了OLS,但它看起来像GLS是我们需要的,我应该找到一些方法来估计协方差。为了清楚起见,你有200个方程要解?不,这是一个方程,如y=bX+u,其中我有3个独立的输出变量(x1、x2和x3,如示例中所示).向量中的项数为200,因此y是200的向量,x1、x2和x3@Bharani,好的,你有200个候选解,一个方程有三个自变量和一个因变量。我看到这个例子是用R。虽然没有什么阻止我通过java做同样的事情,但我想时间是限制因素tor.我希望commons有一个内置的支持。但是看起来他们没有从OLS移动到GLS。你打破了错误是独立正态分布的假设:var e~N(0,s^2*I),其中I是单位矩阵。相反,你假设存在一个协方差矩阵C,使得var e~N(0,s^2*C)。然后将(y-Xb)“*C^(-1)(y-Xb)最小化,而不是(y-Xb)*(y-Xb)这里C是一个平方矩阵,大小等于回归变量的数量。GLS的问题是你必须知道C已经达到了一个乘法常数。是的-这样做显然GLS需要的协方差矩阵是MxM-用单元测试试试,你会得到我已经提到的错误(在这种情况下,你会得到一个维度不匹配,比如说200!=3)所以你想要一个3x3的协方差矩阵,在这种情况下,N=3,M=200?或者反过来呢?C=convariance.computeConvariaceMatrix(RealMatrix myData)。C应该是3x3矩阵,然后插入GLS。
double [] data = new double [4][];
data[0] = new double[]{y[0], x[0][0], x[1][0], x[2][0]};
data[1] = new double[]{y[1], x[0][1], x[1][1], x[2][1]};
data[2] = new double[]{y[2], x[0][2], x[1][2], x[2][2]};
// ... etc.
data[199] = new double[]{y[199], x[0][199], x[1][199], x[2][199]};
Covariance covariance = new Covariance().computeCovarianceMatrix(data);
double [][] omega = covariance.getCovarianceMatrix().getData();
MultipleLinearRegression regression = new GLSMultipleLinearRegression();
// Assumes you put your independent variables in x and dependent in y
// Also assumes that you made your covariance matrix as shown above 
regression.addData(y, x, omega); // we do need covariance