Множественная линейная регрессия - PullRequest
3 голосов
/ 28 августа 2009

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

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

Спасибо
Bharani

Ответы [ 6 ]

4 голосов
/ 04 сентября 2009

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

2 голосов
/ 07 сентября 2009

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

-Bharani

1 голос
/ 03 сентября 2009

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

1 голос
/ 03 сентября 2009

Вы пытались создать матрицу ковариации непосредственно из ваших данных ?

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
0 голосов
/ 10 сентября 2009

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

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

0 голосов
/ 10 сентября 2009

@ Марк Лавин

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

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

...