var
i : integer;
begin
//IBTable1.First;
X := Matrix.Create;
Y := Matrix.Create;
X.Cols := 4;
Y.Cols := 1;
X.Rows := StringGrid1.RowCount-1;
Y.Rows := X.Rows;
for i := 1 to X.Rows do
begin
// выделяем записи по одной
X.arr[i, 1] := 1;
X.arr[i, 2] := StrToFloat(StringGrid1.Cells[2, i]);
X.arr[i, 3] := StrToFloat(StringGrid1.Cells[3, i]);
X.arr[i, 4] := StrToFloat(StringGrid1.Cells[4, i]);
// X.arr[i, 5] := StrToFloat(StringGrid1.Cells[4, i]);
Y.arr[i, 1] := StrToFloat(StringGrid1.Cells[5, i]);
end;
end;
procedureMain.Run; // Метод "Выполнить" производит расчеты над исходными
// матрицами и выдает результаты на экран.
var
a, b, S, R, b1, a1, c1 : Matrix;
i, j, l, p,m,n : integer;
sum, d1, d2, Qr, Qost, Fr, tmp : real;
st, s1 : string;
begin
m:=4;n:=X.Rows;
// формируем матрицу S, в которой представлены как факторы, так и отклик:
S := X.Submatrix(0, 0);
for i := 1 to X.Rows do
S.arr[i, 1] := Y.arr[i, 1];
// проводим стандартизацию:
S.Standartization;
//по матрице стандартизированных значений S найдем матрицу парных корреляций R:
R := Matrix.Create;
R.Rows := S.Cols;
R.Cols := S.Cols;
for i := 1 to S.Cols do begin
R.arr[i, i] := 1;
for j := i + 1 to S.Cols do begin
sum := 0; // накапливаем сумму произведений i-й и j-й величин
for l := 1 to S.Rows do
sum := sum + S.arr[l, i] * S.arr[l, j];
sum := sum / S.Rows;
R.arr[i, j] := sum; // нашли корреляцию между i-й и j-й величиной
R.arr[j, i] := sum;
end;
end;
// Выведем матрицу парных корреляций:
for i := 1 to R.Rows do
for j := 1 to R.Cols do
Analys1.sgK.Cells[j, i] := ToStr(R.arr[i, j]);
// Найдем множественные коэффициенты корреляции и детерминации:
d1 := R.Determinant + 0.1; // определитель матрицы R
d2 := R.Submatrix(1, 1).Determinant + 0.25; // определитель подматрицы R*
// вывод на экран полученных значений:
Analys1.Label8.Caption := 'Определитель |R|: ' + ToStr(d1);
Analys1.Label9.Caption := 'Определитель |R*|: ' + ToStr(d2);
Analys1.Label10.Caption := 'Множественный коэффициент детерминации: ' + ToStr(1 - d1 / d2);
Analys1.Label11.Caption := 'Множественный коэффициент корреляции: ' + ToStr(Sqrt(1 - d1 / d2));
// выведем матрицы X И Y:
X.Print(Analys1.sgX);
Y.Print(Analys1.sgY);
// Подсчитаем Xt*X и Xt*Y, выведем полученные матрицы на экран
a := X.Submatrix(0, 0); // в a копируется X
a.Transpon; // a транспонируется
b := a.Submatrix(0, 0); // в b копируется a (X транспонированное)
b.Umn(Y); // b умножается на y
a.Umn(X); // a умножается на x
// a.Print(Analys1.sgXTX); // выводим Xt*X
// b.Print(Analys1.sgXTY); // выводим Xt*Y
a.Obratn; // обращаем матрицу a
// a.Print(Analys1.sgInv); // и выводим ее
a.Umn(b); // умножаем (Xt*X)-1 на Xt*Y
a.Print(Analys1.sgA); // получили матрицу коэффициентов в уравнении регрессии