📄 unit1.pas
字号:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, RegComp, ComCtrls, Buttons;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
RegComp1: TRegComp;
Label1: TLabel;
Button3: TButton;
Button4: TButton;
Button5: TButton;
RichEdit1: TRichEdit;
SpeedButton1: TSpeedButton;
sbExit: TSpeedButton;
CheckBox1: TCheckBox;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure SpeedButton1Click(Sender: TObject);
procedure sbExitClick(Sender: TObject);
procedure CheckBox1Click(Sender: TObject);
private
{ Private declarations }
public
fTxt: Textfile;
NumberObs: integer;
NumberVars: integer;
MDistances,
EDists,
NEDists: TResidualsArray;
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
begin
// Arbitrary, but component allows max of 10 and 1000 respectively
NumberVars := 8;
NumberObs := 800;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
i,j: integer;
begin
Screen.cursor:= crHourglass;
Randomize; // Use quasi-random values for the example here
RegComp1.MVPrepare; // Initialize container array(s)
// You must call this once during life of the program;
// Normally as soon as any processing takes place...
// Assign some values to X1..X15 vars:
for i:= 1 to NumberVars do
for j:= 0 to NumberObs-1 do
RegComp1.PRegressData^[i,j]:= j + Random(2000);
// Assign values to Y var:
for j:= 0 to NumberObs-1 do
RegComp1.Y[j]:= j + Random(1000);
Screen.cursor:= crDefault;
Button2.Enabled:= TRUE;
Button3.Enabled:= TRUE;
Button4.Enabled:= TRUE;
Button5.Enabled:= TRUE;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
MVStatRec: TMultStatRec;
begin
Screen.cursor:= crHourglass;
with RegComp1 do begin
MVStatRec:= MVRegression(PRegressData,Y,NumberVars,NumberObs);
RichEdit1.Lines.Add(MVRegressionMemo(MVStatRec));
end;
Screen.cursor:= crDefault;
end;
procedure TForm1.Button3Click(Sender: TObject);
var
i: integer;
begin
Screen.cursor:= crHourglass;
with RegComp1 do begin
MVPredictedY(PRegressData,Y,Predicted,NumberVars,NumberObs);
MVResiduals(PRegressData,Y,Residuals,NumberVars,NumberObs);
AssignFile(fTxt,'Predicted_Residuals.txt');
Rewrite (fTxt);
Writeln(fTxt,' Y|Predicted Values|Residuals:');
for i:= 0 to NumberObs-1 do
Writeln(fTxt,Format('Obs %5d: %8.3f, %8.3f, %8.3f ',[i, Y[i], Predicted[i], Residuals[i] ]));
CloseFile(fTxt);
end;
RichEdit1.Lines.LoadFromFile('Predicted_Residuals.txt');
Screen.cursor:= crDefault;
end;
procedure TForm1.Button4Click(Sender: TObject);
var
i: integer;
begin
Screen.cursor:= crHourglass;
with RegComp1 do begin
MVPredictedY(PRegressData,Y,Predicted,NumberVars,NumberObs);
MVPredictedYCILower(PRegressData,Y,CILower,NumberVars,NumberObs);
MVPredictedYCIUpper(PRegressData,Y,CIUpper,NumberVars,NumberObs);
MVPredictedYPILower(PRegressData,Y,PILower,NumberVars,NumberObs);
MVPredictedYPIUpper(PRegressData,Y,PIUpper,NumberVars,NumberObs);
AssignFile(fTxt,'Confidence_Prediction_Intervals.txt');
Rewrite (fTxt);
Writeln(fTxt,' Y PredictedY Confidence Intrvls Prediction Intrvls');
for i:= 0 to NumberObs-1 do
Writeln(fTxt,Format('Obs %5d: %8.3f, %8.3f %8.3f, %8.3f %8.3f, %8.3f',[i, Y[i], Predicted[i], CILower[i], CIUpper[i], PILower[i], PIUpper[i] ]));
CloseFile(fTxt);
end;
RichEdit1.Lines.LoadFromFile('Confidence_Prediction_Intervals.txt');
Screen.cursor:= crDefault;
end;
procedure TForm1.Button5Click(Sender: TObject);
var
i: integer;
begin
Screen.cursor:= crHourglass;
with RegComp1 do begin
MahalanobisDistances(PRegressData,MDistances,NumberVars,NumberObs);
EuclideanDistances(PRegressData,EDists,NumberObs,NumberVars);
NormEuclideanDistances(PRegressData,NEDists,NumberObs,NumberVars);
AssignFile(fTxt,'ParametricDistances.txt');
Rewrite (fTxt);
Writeln(fTxt,' Distance Measure: Mahalanobis Norm Euclidean Euclidean ');
for i:= 0 to NumberObs-1 do
Writeln(fTxt,Format('Obs %5d: %14.3f %14.3f %14.3f ',[i, MDistances[i],
NEDists[i], EDists[i] ]));
CloseFile(fTxt);
end;
RichEdit1.Lines.LoadFromFile('ParametricDistances.txt');
Screen.cursor:= crDefault;
end;
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
RichEdit1.Clear;
end;
procedure TForm1.sbExitClick(Sender: TObject);
begin
Close;
end;
procedure TForm1.CheckBox1Click(Sender: TObject);
begin
RegComp1.ScanData:= CheckBox1.Checked;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -