我正在尝试使用 GLSMultipleLinearRegression (来自 apache commons-math 包)进行多元线性回归。它期望协方差矩阵作为输入——我不知道如何计算它们。我有一组因变量和 3 个自变量数组。
知道如何计算协方差矩阵吗?
注意:我对 3 个自变量中的每一个都有 200 个项目
谢谢巴拉尼
_
我正在尝试使用 GLSMultipleLinearRegression (来自 apache commons-math 包)进行多元线性回归。它期望协方差矩阵作为输入——我不知道如何计算它们。我有一组因变量和 3 个自变量数组。
知道如何计算协方差矩阵吗?
注意:我对 3 个自变量中的每一个都有 200 个项目
谢谢巴拉尼
_
如果您不知道错误之间的协方差,您可以采用迭代方法。您将首先使用普通最小二乘法,计算误差以及误差之间的协方差。然后,您将使用计算出的协方差矩阵应用 GLS 并重新估计协方差矩阵。您将使用带有新协方差矩阵的 GLS 继续迭代,直到收敛。这是此方法示例的链接(.pdf 警告)以及加权和迭代加权最小二乘的相关讨论,其中您在 GLS 中假设的错误之间没有相关性。
您是否尝试过直接从数据创建协方差矩阵?
new Covariance().computeCovarianceMatrix(data)
使用评论中的信息,我们知道有 3 个自变量、1 个因变量和 200 个样本。这意味着您将拥有一个包含 4 列和 200 行的数据数组。最终结果将如下所示(明确键入所有内容以尝试解释我的意思):
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
如果您不知道误差之间的协方差,我会使用普通最小二乘 (OLS) 而不是广义最小二乘 (GLS)。这相当于将单位矩阵作为协方差矩阵。该库似乎在OLSMultipleLinearRegression
.
@马克拉文
您将首先使用普通最小二乘法,计算误差以及误差之间的协方差
我有点困惑..由于我们只有一个响应变量,残差应该是一维变量。那么误差的协方差矩阵在哪里适合呢?
您需要将 3 个随机独立变量组织为矩阵中的列向量:x1、x2、x3 (N),其中每行是一个观察值 (M)。这将是一个 MxN 矩阵。
然后将此数据矩阵插入 Apache 提供的协方差例程,例如:Covariance.computeCovarianceMatrix(RealMatrix matrix)。