2009-08-28 4 views
3

Я пытаюсь использовать GLSMultipleLinearRegression (из пакета apache commons-math) для множественной линейной регрессии. Ожидается, что ковариационная матрица будет входной - я не уверен, как их вычислить. У меня есть один массив зависимых переменных и 3 массива независимых переменных.
Любая идея, как вычислить матрицу ковариации?Множественная линейная регрессия

Примечание: У меня есть 200 пунктов для каждой из 3-х независимых переменных

Благодарности
Bharani

+0

Для наглядности у вас есть 200 уравнений, которые вы пытаетесь решить? –

+0

Нет, это одно уравнение, как в y = bX + u, где у меня есть 3 независимых выходных переменных (x1, x2 и x3, как в вашем примере). Количество элементов в векторе равно 200, поэтому y - вектор 200, и поэтому x1, x2 и x3 – Bharani

+0

@Bharani, ладно, поэтому у вас есть 200 возможных решений уравнения с тремя независимыми переменными и одним зависимым. –

ответ

4

Если вы не знаете ковариации между ошибками, вы можете использовать итеративный подход. Сначала вы должны использовать обычные минимальные квадраты, вычислять ошибки и ковариации между ошибками. Затем вы применяете GLS с использованием рассчитанной матрицы ковариации и переоцениваете матрицу ковариации. Вы продолжите итерацию с использованием GLS с новой матрицей ковариации, пока не получите конвергенцию. Here is a link (.pdf предупреждение) на пример этого метода, а также связанное обсуждение взвешенных и итерационно взвешенных наименьших квадратов, где у вас нет корреляции между ошибками, принятыми в GLS.

+0

Я вижу, что пример использует R. Хотя нет ничего, что мешает мне делать то же самое через java. ограничивающий фактор. Я надеялся, что у этого сообщества есть встроенная поддержка. но похоже, что они не – Bharani

1

Вы пытались создать Covariance matrix directly from your data?

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(); 

Затем when you're doing your actual regression, у вас есть ковариационная матрица:

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 
+0

Да, я пытался это сделать - моя проблема в том, что у меня есть 200 элементов для каждого X, поэтому это не квадратная матрица, и GLS жалуется, что org.apache.commons.math.MathRuntimeException $ 4: несоответствие размера 200! = 3 Извините, что я должен был упомянуть, что в заявлении проблемы я отредактирую его сейчас – Bharani

+0

@Bharani, обновил ответ, чтобы попытаться ответить на ваш комментарий. –

1

Если вы не имеют представления о ковариации между ошибками, я бы использовал обычные минимальные квадраты (OLS) вместо обобщенных наименьших квадратов (GLS). Это сводится к тому, что матрица идентичности является ковариационной матрицей. По-видимому, библиотека реализует OLS в OLSMultipleLinearRegression.

+0

Я сначала попробовал OLS, но похоже, что GLS - это то, что нам нужно, и я должен найти способ оценить ковариацию. – Bharani

2

Только что наткнулся на Flanagan библиотека, которая делает это из коробки. Также получил почту из списка Обще пользователя, Обще математика в момент does not support FGLS - автоматическая оценка ковариационной матрицы

-Bharani

0

@Mark Лавин

Вы бы первым использовать метод наименьших квадратов , вычисление погрешностей и Ковариации между ошибками

Im немного запутано. Поскольку у нас есть только одна переменная ответа , остаточные ошибки должны быть 1 размерной переменной. Тогда где же вписывается ковариационная матрица ошибок?

+0

Переходя от 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 уже до мультипликативной константы. –

0

Вам необходимо организовать 3 случайных независимых вариатора в качестве векторов столбцов в матрице: x1, x2, x3 (N), где каждая строка является наблюдением (M). Это будет матрица MxN.

Вы затем подключите эту матрицу данных к ковариационной процедуре, предоставляемой Apache, например: Covariance.computeCovarianceMatrix (матрица RealMatrix).

+0

Да - сделано то, что, по-видимому, ковариационная матрица, требуемая GLS, - это MxM - попробуйте с единичным тестом, и вы получите сообщение об ошибке, о котором я уже упоминал (вы получите несоответствие измерения в этом случае, говорящее 200! = 3) – Bharani

+0

Значит, вам нужна матрица ковариации 3x3 в этом случае N = 3 и M = 200? Или это наоборот? C = Covariance.computeCovarianceMatrix (RealMatrix myData). C должна быть матрицей 3x3, которую вы затем подключаете к GLS. – 2009-09-10 20:50:30