You've already forked lazarus-ccr
Further refactoring of the item_banking units. Remove the overloads from matrixlib writing reports to OutputFrm.
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@7456 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
@ -73,7 +73,6 @@ procedure TCodesForm.DisplayBtnClick(Sender: TObject);
|
|||||||
var
|
var
|
||||||
currentno: integer;
|
currentno: integer;
|
||||||
i: integer;
|
i: integer;
|
||||||
outline: string;
|
|
||||||
lReport: TStrings;
|
lReport: TStrings;
|
||||||
begin
|
begin
|
||||||
lReport := TStringList.Create;
|
lReport := TStringList.Create;
|
||||||
|
@ -246,7 +246,6 @@ end;
|
|||||||
procedure TMCItemForm.CodeBrowseBtnClick(Sender: TObject);
|
procedure TMCItemForm.CodeBrowseBtnClick(Sender: TObject);
|
||||||
var
|
var
|
||||||
i: integer;
|
i: integer;
|
||||||
outline: string;
|
|
||||||
nochoices: integer;
|
nochoices: integer;
|
||||||
lReport: TStrings;
|
lReport: TStrings;
|
||||||
begin
|
begin
|
||||||
|
@ -186,7 +186,24 @@ object TestSpecsForm: TTestSpecsForm
|
|||||||
BorderSpacing.Right = 8
|
BorderSpacing.Right = 8
|
||||||
BevelOuter = bvNone
|
BevelOuter = bvNone
|
||||||
BorderStyle = bsSingle
|
BorderStyle = bsSingle
|
||||||
|
ClientHeight = 459
|
||||||
|
ClientWidth = 725
|
||||||
TabOrder = 6
|
TabOrder = 6
|
||||||
|
OnPaint = Panel1Paint
|
||||||
|
object Memo: TMemo
|
||||||
|
Left = 4
|
||||||
|
Height = 451
|
||||||
|
Top = 4
|
||||||
|
Width = 717
|
||||||
|
Align = alClient
|
||||||
|
BorderSpacing.Around = 4
|
||||||
|
Font.Height = -13
|
||||||
|
Font.Name = 'Courier New'
|
||||||
|
Font.Pitch = fpFixed
|
||||||
|
Font.Quality = fqDraft
|
||||||
|
ParentFont = False
|
||||||
|
TabOrder = 0
|
||||||
|
end
|
||||||
end
|
end
|
||||||
object SelectItemBtn: TButton
|
object SelectItemBtn: TButton
|
||||||
AnchorSideLeft.Control = Panel1
|
AnchorSideLeft.Control = Panel1
|
||||||
|
@ -14,6 +14,7 @@ type
|
|||||||
|
|
||||||
TTestSpecsForm = class(TForm)
|
TTestSpecsForm = class(TForm)
|
||||||
GroupBox1: TGroupBox;
|
GroupBox1: TGroupBox;
|
||||||
|
Memo: TMemo;
|
||||||
NoItemsEdit: TEdit;
|
NoItemsEdit: TEdit;
|
||||||
Label8: TLabel;
|
Label8: TLabel;
|
||||||
SelectedEdit: TEdit;
|
SelectedEdit: TEdit;
|
||||||
@ -42,14 +43,15 @@ type
|
|||||||
ReturnBtn: TButton;
|
ReturnBtn: TButton;
|
||||||
SaveDialog1: TSaveDialog;
|
SaveDialog1: TSaveDialog;
|
||||||
procedure FormShow(Sender: TObject);
|
procedure FormShow(Sender: TObject);
|
||||||
|
procedure Panel1Paint(Sender: TObject);
|
||||||
procedure ReturnBtnClick(Sender: TObject);
|
procedure ReturnBtnClick(Sender: TObject);
|
||||||
procedure SelectItemBtnClick(Sender: TObject);
|
procedure SelectItemBtnClick(Sender: TObject);
|
||||||
procedure SelectChoiceBoxItemClick(Sender: TObject; Index: integer);
|
procedure SelectChoiceBoxItemClick(Sender: TObject; Index: integer);
|
||||||
procedure SkipBtnClick(Sender: TObject);
|
procedure SkipBtnClick(Sender: TObject);
|
||||||
procedure ShowMCItem(Sender: TObject; index : integer);
|
procedure ShowMCItem(AIndex: integer);
|
||||||
procedure ShowTFItem(Sender: TObject; index : integer);
|
procedure ShowTFItem(AIndex: integer);
|
||||||
procedure ShowEssayItem(Sender: TObject; index : integer);
|
procedure ShowEssayItem(AIndex: integer);
|
||||||
procedure ShowMatchItem(Sender: TObject; index : integer);
|
procedure ShowMatchItem(AIndex: integer);
|
||||||
private
|
private
|
||||||
{ private declarations }
|
{ private declarations }
|
||||||
public
|
public
|
||||||
@ -90,50 +92,70 @@ begin
|
|||||||
NoItemsEdit.Text := '0';
|
NoItemsEdit.Text := '0';
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TTestSpecsForm.Panel1Paint(Sender: TObject);
|
||||||
|
begin
|
||||||
|
//
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TTestSpecsForm.SelectChoiceBoxItemClick(Sender: TObject; Index: integer);
|
procedure TTestSpecsForm.SelectChoiceBoxItemClick(Sender: TObject; Index: integer);
|
||||||
var
|
var
|
||||||
nomc, notf, nomatch, noessay, i : integer;
|
//nomc, notf, nomatch, noessay, i : integer;
|
||||||
response : string;
|
//response: string;
|
||||||
|
i, response: Integer;
|
||||||
begin
|
begin
|
||||||
nomc := StrToInt(MCNoEdit.Text);
|
//nomc := StrToInt(MCNoEdit.Text);
|
||||||
notf := StrToInt(TFNoEdit.Text);
|
//notf := StrToInt(TFNoEdit.Text);
|
||||||
nomatch := StrToInt(MatchNoEdit.Text);
|
//nomatch := StrToInt(MatchNoEdit.Text);
|
||||||
noessay := StrToInt(EssayNoEdit.Text);
|
//noessay := StrToInt(EssayNoEdit.Text);
|
||||||
case Index of
|
case Index of
|
||||||
0 : begin // Select multiple choice items
|
0 : begin // Select multiple choice items
|
||||||
SelectedEdit.Text := 'MC';
|
SelectedEdit.Text := 'MC';
|
||||||
for i := 1 to nomc do
|
for i := 1 to StrToInt(MCNoEdit.Text) do
|
||||||
begin
|
begin
|
||||||
ShowMCItem(self,i);
|
ShowMCItem(i);
|
||||||
response := InputBox('Add item to test','Add?','Y');
|
response := MessageDlg('Add item to test?', mtConfirmation, [mbYes, mbNo], 0);
|
||||||
if response = 'Y' then SelectItemBtnClick(self) else SkipBtnClick(self);
|
if response = mrYes then SelectItemBtnClick(self) else SkipBtnClick(self);
|
||||||
|
//response := InputBox('Add item to test','Add?','Y');
|
||||||
|
//if response = 'Y' then SelectItemBtnClick(self) else SkipBtnClick(self);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
1 : begin // Select true or false items
|
1 : begin // Select true or false items
|
||||||
SelectedEdit.Text := 'TF';
|
SelectedEdit.Text := 'TF';
|
||||||
for i := 1 to notf do
|
for i := 1 to StrToInt(TFNoEdit.Text) do
|
||||||
begin
|
begin
|
||||||
ShowTFItem(self,i);
|
ShowTFItem(i);
|
||||||
|
response := MessageDlg('Add item to test?', mtConfirmation, [mbYes, mbNo], 0);
|
||||||
|
if response = mrYes then SelectItemBtnclick(self) else SkipBtnClick(self);
|
||||||
|
{
|
||||||
response := InputBox('Add item to test','Add?','Y');
|
response := InputBox('Add item to test','Add?','Y');
|
||||||
if response = 'Y' then SelectItemBtnClick(self) else SkipBtnClick(self);
|
if response = 'Y' then SelectItemBtnClick(self) else SkipBtnClick(self);
|
||||||
|
}
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
2 : begin // Select Essay items
|
2 : begin // Select Essay items
|
||||||
SelectedEdit.Text := 'Essay';
|
SelectedEdit.Text := 'Essay';
|
||||||
for i := 1 to noessay do
|
for i := 1 to StrToInt(EssayNoEdit.Text) do
|
||||||
begin
|
begin
|
||||||
ShowEssayItem(self,i);
|
ShowEssayItem(i);
|
||||||
|
response := MessageDlg('Add item to test?', mtConfirmation, [mbYes, mbNo], 0);
|
||||||
|
if response = mrYes then selectItemBtnClick(self) else SkipBtnClick(self);
|
||||||
|
{
|
||||||
response := InputBox('Add item to test','Add?','Y');
|
response := InputBox('Add item to test','Add?','Y');
|
||||||
if response = 'Y' then SelectItemBtnClick(self) else SkipBtnClick(self);
|
if response = 'Y' then SelectItemBtnClick(self) else SkipBtnClick(self);
|
||||||
|
}
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
3 : begin // Select matching items
|
3 : begin // Select matching items
|
||||||
SelectedEdit.Text := 'Matching';
|
SelectedEdit.Text := 'Matching';
|
||||||
for i := 1 to nomc do
|
for i := 1 to StrToInt(MatchNoEdit.Text) do // was: "nomc", should probably be "nomatch"
|
||||||
begin
|
begin
|
||||||
ShowMatchItem(self,i);
|
ShowMatchItem(i);
|
||||||
|
response := MessageDlg('Add item to test?', mtConfirmation, [mbYes, mbNo], 0);
|
||||||
|
if response = mrYes then SelectItemBtnClick(self) else SkipBtnClick(self);
|
||||||
|
{
|
||||||
response := InputBox('Add item to test','Add?','Y');
|
response := InputBox('Add item to test','Add?','Y');
|
||||||
if response = 'Y' then SelectItemBtnClick(self) else SkipBtnClick(self);
|
if response = 'Y' then SelectItemBtnClick(self) else SkipBtnClick(self);
|
||||||
|
}
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
@ -144,159 +166,90 @@ begin
|
|||||||
ShowMessage('Item skipped');
|
ShowMessage('Item skipped');
|
||||||
end;
|
end;
|
||||||
|
|
||||||
// ToDoo: This must be moved to OnPaint handler.
|
procedure TTestSpecsForm.ShowMCItem(AIndex : integer);
|
||||||
procedure TTestSpecsForm.ShowMCItem(Sender: TObject; index : integer);
|
|
||||||
var
|
var
|
||||||
outline: string;
|
|
||||||
nochoices: integer;
|
nochoices: integer;
|
||||||
space: integer;
|
|
||||||
begin
|
begin
|
||||||
Panel1.Canvas.Clear;
|
ItemNoEdit.Text := IntToStr(ItemBankFrm.MCItemInfo[AIndex].itemnumber);
|
||||||
space := Panel1.Canvas.Height div 9;
|
MajorCodeEdit.Text := IntToStr(ItemBankFrm.MCItemInfo[AIndex].MajorCode);
|
||||||
ItemNoEdit.Text := IntToStr(ItemBankFrm.MCItemInfo[index].itemnumber);
|
MinorCodeEdit.Text := IntToStr(ItemBankFrm.MCItemInfo[AIndex].MinorCode);
|
||||||
MajorCodeEdit.Text := IntToStr(ItemBankFrm.MCItemInfo[index].MajorCode);
|
|
||||||
MinorCodeEdit.Text := IntToStr(ItemBankFrm.MCItemInfo[index].MinorCode);
|
|
||||||
|
|
||||||
outline := ItemBankFrm.MCItemInfo[index].ItemStem;
|
Memo.Lines.Clear;
|
||||||
Panel1.Canvas.TextOut(1, space, outline);
|
Memo.Lines.Add(ItemBankFrm.MCItemInfo[AIndex].ItemStem);
|
||||||
|
|
||||||
nochoices := ItemBankFrm.MCItemInfo[index].NoChoices ;
|
nochoices := ItemBankFrm.MCItemInfo[AIndex].NoChoices ;
|
||||||
if nochoices > 0 then
|
if nochoices > 0 then
|
||||||
begin
|
Memo.Lines.Add(Format('Choice A %s', [ItemBankFrm.MCItemInfo[AIndex].ChoiceOne]));
|
||||||
outline := Format('Choice A %s', [ItemBankFrm.MCItemInfo[index].ChoiceOne]);
|
|
||||||
Panel1.Canvas.TextOut(1, space*2, outline);
|
|
||||||
end;
|
|
||||||
|
|
||||||
if nochoices > 1 then
|
if nochoices > 1 then
|
||||||
begin
|
Memo.Lines.Add(Format('Choice B %s', [ItemBankFrm.MCItemInfo[AIndex].ChoiceTwo]));
|
||||||
outline := Format('Choice B %s', [ItemBankFrm.MCItemInfo[index].ChoiceTwo]);
|
|
||||||
Panel1.Canvas.TextOut(1, space*3, outline);
|
|
||||||
end;
|
|
||||||
|
|
||||||
if nochoices > 2 then
|
if nochoices > 2 then
|
||||||
begin
|
Memo.Lines.Add(Format('Choice C %s', [ItemBankFrm.MCItemInfo[AIndex].ChoiceThree]));
|
||||||
outline := Format('Choice C %s', [ItemBankFrm.MCItemInfo[index].ChoiceThree]);
|
|
||||||
Panel1.Canvas.TextOut(1, space*4, outline);
|
|
||||||
end;
|
|
||||||
|
|
||||||
if nochoices > 3 then
|
if nochoices > 3 then
|
||||||
begin
|
Memo.Lines.Add(Format('Choice D %s', [ItemBankFrm.MCItemInfo[AIndex].ChoiceFour]));
|
||||||
outline := Format('Choice D %s', [ItemBankFrm.MCItemInfo[index].ChoiceFour]);
|
|
||||||
Panel1.Canvas.TextOut(1, space*5, outline);
|
|
||||||
end;
|
|
||||||
|
|
||||||
if nochoices > 4 then
|
if nochoices > 4 then
|
||||||
begin
|
Memo.Lines.Add(Format('Choice E %s', [ItemBankFrm.MCItemInfo[AIndex].ChoiceFive]));
|
||||||
outline := Format('Choice E %s', [ItemBankFrm.MCItemInfo[index].ChoiceFive]);
|
Memo.Lines.Add(Format('Correct Choice %s', [ItemBankFrm.MCItemInfo[AIndex].CorrectChoice]));
|
||||||
Panel1.Canvas.TextOut(1, space*6, outline);
|
Memo.Lines.Add(Format('Graphic Image %s', [ItemBankFrm.MCItemInfo[AIndex].PicName]));
|
||||||
end;
|
|
||||||
|
|
||||||
outline := Format('Correct Choice %s', [ItemBankFrm.MCItemInfo[index].CorrectChoice]);
|
|
||||||
Panel1.Canvas.TextOut(1, space*7, outline);
|
|
||||||
|
|
||||||
outline := Format('Graphic Image %s', [ItemBankFrm.MCItemInfo[index].PicName]);
|
|
||||||
Panel1.Canvas.TextOut(1, space*8, outline);
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
// ToDoo: This must be moved to OnPaint handler.
|
procedure TTestSpecsForm.ShowTFItem(AIndex : integer);
|
||||||
procedure TTestSpecsForm.ShowTFItem(Sender: TObject; index : integer);
|
|
||||||
var
|
|
||||||
outline: string;
|
|
||||||
space: integer;
|
|
||||||
begin
|
begin
|
||||||
Panel1.Canvas.Clear;
|
ItemNoEdit.Text := IntToStr(ItemBankFrm.TFItemInfo[AIndex].itemnumber);
|
||||||
space := Panel1.Canvas.Height div 9;
|
MajorCodeEdit.Text := IntToStr(ItemBankFrm.TFItemInfo[AIndex].MajorCode);
|
||||||
ItemNoEdit.Text := IntToStr(ItemBankFrm.TFItemInfo[index].itemnumber);
|
MinorCodeEdit.Text := IntToStr(ItemBankFrm.TFItemInfo[AIndex].MinorCode);
|
||||||
MajorCodeEdit.Text := IntToStr(ItemBankFrm.TFItemInfo[index].MajorCode);
|
|
||||||
MinorCodeEdit.Text := IntToStr(ItemBankFrm.TFItemInfo[index].MinorCode);
|
Memo.Lines.Clear;
|
||||||
Panel1.Canvas.TextOut(1,space,ItemBankFrm.TFItemInfo[index].ItemStem);
|
Memo.Lines.Add(ItemBankFrm.TFItemInfo[AIndex].ItemStem);
|
||||||
Panel1.Canvas.TextOut(1,space*2,ItemBankFrm.TFItemInfo[index].CorrectChoice);
|
Memo.Lines.Add(ItemBankFrm.TFItemInfo[AIndex].CorrectChoice);
|
||||||
Panel1.Canvas.TextOut(1,space*3,ItemBankFrm.TFItemInfo[index].PicName);
|
Memo.Lines.Add(ItemBankFrm.TFItemInfo[AIndex].PicName);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
// ToDo: This must be moved to OnPaint handler
|
procedure TTestSpecsForm.ShowEssayItem(AIndex : integer);
|
||||||
procedure TTestSpecsForm.ShowEssayItem(Sender: TObject; index : integer);
|
|
||||||
var
|
|
||||||
outline: string;
|
|
||||||
space: integer;
|
|
||||||
begin
|
begin
|
||||||
Panel1.Canvas.Clear;
|
ItemNoEdit.Text := IntToStr(ItemBankFrm.EssayInfo[AIndex].itemnumber);
|
||||||
space := Panel1.Canvas.Height div 9;
|
MajorCodeEdit.Text := IntToStr(ItemBankFrm.EssayInfo[AIndex].MajorCode);
|
||||||
ItemNoEdit.Text := IntToStr(ItemBankFrm.EssayInfo[index].itemnumber);
|
MinorCodeEdit.Text := IntToStr(ItemBankFrm.EssayInfo[AIndex].MinorCode);
|
||||||
MajorCodeEdit.Text := IntToStr(ItemBankFrm.EssayInfo[index].MajorCode);
|
|
||||||
MinorCodeEdit.Text := IntToStr(ItemBankFrm.EssayInfo[index].MinorCode);
|
Memo.Lines.Clear;
|
||||||
Panel1.Canvas.TextOut(1, space, ItemBankFrm.EssayInfo[index].ItemStem);
|
Memo.Lines.Add(ItemBankFrm.EssayInfo[Aindex].ItemStem);
|
||||||
Panel1.Canvas.TextOut(1, space*2, ItemBankFrm.EssayInfo[index].Answer);
|
Memo.Lines.Add(ItemBankFrm.EssayInfo[AIndex].Answer);
|
||||||
Panel1.Canvas.TextOut(1, space*3, ItemBankFrm.EssayInfo[index].PicName);
|
Memo.Lines.Add(ItemBankFrm.EssayInfo[AIndex].PicName);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
// ToDo: This must be moved to OnPaint handler
|
procedure TTestSpecsForm.ShowMatchItem(AIndex : integer);
|
||||||
procedure TTestSpecsForm.ShowMatchItem(Sender: TObject; index : integer);
|
|
||||||
var
|
var
|
||||||
outline: string;
|
|
||||||
space: integer;
|
|
||||||
noleft, noright: integer;
|
noleft, noright: integer;
|
||||||
begin
|
begin
|
||||||
Panel1.Canvas.Clear;
|
noleft := ItemBankFrm.MatchInfo[AIndex].NLeft;
|
||||||
noleft := ItemBankFrm.MatchInfo[index].NLeft;
|
noright := ItemBankFrm.MatchInfo[AIndex].NRight;
|
||||||
noright := ItemBankFrm.MatchInfo[index].NRight;
|
ItemNoEdit.Text := IntToStr(ItemBankFrm.MatchInfo[AIndex].itemnumber);
|
||||||
space := Panel1.Canvas.Height div 13;
|
MajorCodeEdit.Text := IntToStr(ItemBankFrm.MatchInfo[AIndex].MajorCode);
|
||||||
ItemNoEdit.Text := IntToStr(ItemBankFrm.MatchInfo[index].itemnumber);
|
MinorCodeEdit.Text := IntToStr(ItemBankFrm.MatchInfo[AIndex].MinorCode);
|
||||||
MajorCodeEdit.Text := IntToStr(ItemBankFrm.MatchInfo[index].MajorCode);
|
|
||||||
MinorCodeEdit.Text := IntToStr(ItemBankFrm.MatchInfo[index].MinorCode);
|
|
||||||
// do left and right stems
|
// do left and right stems
|
||||||
|
Memo.Lines.Clear;
|
||||||
if noleft > 0 then
|
if noleft > 0 then
|
||||||
begin
|
Memo.Lines.Add(Format('Left Item 1 %s', [ItemBankFrm.MatchInfo[AIndex].Left1]));
|
||||||
outline := Format('Left Item 1 %s', [ItemBankFrm.MatchInfo[index].Left1]);
|
|
||||||
Panel1.Canvas.TextOut(1, space, outline);
|
|
||||||
end;
|
|
||||||
if noright > 0 then
|
if noright > 0 then
|
||||||
begin
|
Memo.Lines.Add(Format(' Right Item 1 %s', [ItemBankFrm.MatchInfo[AIndex].Right1]));
|
||||||
outline := Format(' Right Item 1 %s', [ItemBankFrm.MatchInfo[index].Right1]);
|
|
||||||
Panel1.Canvas.TextOut(1, space*2, outline);
|
|
||||||
end;
|
|
||||||
if noleft > 1 then
|
if noleft > 1 then
|
||||||
begin
|
Memo.Lines.Add(Format('Left Item 2 %s', [ItemBankFrm.MatchInfo[AIndex].Left2]));
|
||||||
outline := Format('Left Item 2 %s', [ItemBankFrm.MatchInfo[index].Left2]);
|
|
||||||
Panel1.Canvas.TextOut(1, space*3, outline);
|
|
||||||
end;
|
|
||||||
if noright > 1 then
|
if noright > 1 then
|
||||||
begin
|
Memo.Lines.Add(Format(' Right Item 2 %s', [ItemBankFrm.MatchInfo[AIndex].Right2]));
|
||||||
outline := Format(' Right Item 2 %s', [ItemBankFrm.MatchInfo[index].Right2]);
|
|
||||||
Panel1.Canvas.TextOut(1, space*4, outline);
|
|
||||||
end;
|
|
||||||
if noleft > 2 then
|
if noleft > 2 then
|
||||||
begin
|
Memo.Lines.Add(Format('Left Item 3 %s', [ItemBankFrm.MatchInfo[AIndex].Left3]));
|
||||||
outline := Format('Left Item 3 %s', [ItemBankFrm.MatchInfo[index].Left3]);
|
|
||||||
Panel1.Canvas.TextOut(1, space*5, outline);
|
|
||||||
end;
|
|
||||||
if noright > 2 then
|
if noright > 2 then
|
||||||
begin
|
Memo.Lines.Add(Format(' Right Item 3 %s', [ItemBankFrm.MatchInfo[AIndex].Right3]));
|
||||||
outline := Format(' Right Item 3 %s', [ItemBankFrm.MatchInfo[index].Right3]);
|
|
||||||
Panel1.Canvas.TextOut(1, space*6, outline);
|
|
||||||
end;
|
|
||||||
if noleft > 3 then
|
if noleft > 3 then
|
||||||
begin
|
Memo.Lines.Add(Format('Left Item 4 %s', [ItemBankFrm.MatchInfo[AIndex].Left4]));
|
||||||
outline := Format('Left Item 4 %s', [ItemBankFrm.MatchInfo[index].Left4]);
|
|
||||||
Panel1.Canvas.TextOut(1, space*7, outline);
|
|
||||||
end;
|
|
||||||
if noright > 3 then
|
if noright > 3 then
|
||||||
begin
|
Memo.Lines.Add(Format(' Right Item 4 %s', [ItemBankFrm.MatchInfo[AIndex].Right4]));
|
||||||
outline := Format(' Right Item 4 %s', [ItemBankFrm.MatchInfo[index].Right4]);
|
|
||||||
Panel1.Canvas.TextOut(1, space*8, outline);
|
|
||||||
end;
|
|
||||||
if noleft > 4 then
|
if noleft > 4 then
|
||||||
begin
|
Memo.Lines.Add(Format('Left Item 5 %s', [ItemBankFrm.MatchInfo[AIndex].Left5]));
|
||||||
outline := Format('Left Item 5 %s', [ItemBankFrm.MatchInfo[index].Left5]);
|
|
||||||
Panel1.Canvas.TextOut(1, space*9, outline);
|
|
||||||
end;
|
|
||||||
if noright > 4 then
|
if noright > 4 then
|
||||||
begin
|
Memo.Lines.Add(Format(' Right Item 5 %s', [ItemBankFrm.MatchInfo[AIndex].Right5]));
|
||||||
outline := Format(' Right Item 5 %s', [ItemBankFrm.MatchInfo[index].Right5]);
|
Memo.Lines.Add(ItemBankFrm.MatchInfo[AIndex].CorrectChoice);
|
||||||
Panel1.Canvas.TextOut(1, space*10, outline);
|
Memo.Lines.Add(ItemBankFrm.MatchInfo[AIndex].PicName);
|
||||||
end;
|
|
||||||
Panel1.Canvas.TextOut(1, space*11, ItemBankFrm.MatchInfo[index].CorrectChoice);
|
|
||||||
Panel1.Canvas.TextOut(1, space*12, ItemBankFrm.MatchInfo[index].PicName);
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
initialization
|
initialization
|
||||||
|
@ -143,7 +143,6 @@ end;
|
|||||||
procedure TTFItemForm.CodeBrowseBtnClick(Sender: TObject);
|
procedure TTFItemForm.CodeBrowseBtnClick(Sender: TObject);
|
||||||
var
|
var
|
||||||
i: integer;
|
i: integer;
|
||||||
outline: string;
|
|
||||||
lReport: TStrings;
|
lReport: TStrings;
|
||||||
begin
|
begin
|
||||||
lReport := TStringList.Create;
|
lReport := TStringList.Create;
|
||||||
|
@ -84,32 +84,33 @@ type
|
|||||||
procedure ResetBtnClick(Sender: TObject);
|
procedure ResetBtnClick(Sender: TObject);
|
||||||
procedure ResponseScrollChange(Sender: TObject);
|
procedure ResponseScrollChange(Sender: TObject);
|
||||||
procedure VarListSelectionChange(Sender: TObject; User: boolean);
|
procedure VarListSelectionChange(Sender: TObject; User: boolean);
|
||||||
|
|
||||||
private
|
private
|
||||||
{ private declarations }
|
{ private declarations }
|
||||||
FAutoSized: Boolean;
|
FAutoSized: Boolean;
|
||||||
NoItems : integer;
|
NoItems : integer;
|
||||||
NoSelected : integer;
|
NoSelected : integer;
|
||||||
NCases : integer; // count of good records (not counting key if included)
|
NCases : integer; // count of good records (not counting key if included)
|
||||||
ColNoSelected : IntDyneVec;
|
ColNoSelected : IntDyneVec;
|
||||||
ColLabels, RowLabels : StrDyneVec;
|
ColLabels, RowLabels : StrDyneVec;
|
||||||
Responses: array[1..5] of StrDyneVec;
|
Responses: array[1..5] of StrDyneVec;
|
||||||
RespWghts: array[1..5] of DblDyneVec;
|
RespWghts: array[1..5] of DblDyneVec;
|
||||||
Means, Variances, StdDevs : DblDyneVec;
|
Means, Variances, StdDevs : DblDyneVec;
|
||||||
CorMat : DblDyneMat; // correlations among items and total score
|
CorMat : DblDyneMat; // correlations among items and total score
|
||||||
Data : DblDyneMat; //store item scores and total score
|
Data : DblDyneMat; //store item scores and total score
|
||||||
IDCol, FNameCol, LNameCol : integer;
|
IDCol, FNameCol, LNameCol : integer;
|
||||||
MaxRespNo: integer;
|
MaxRespNo: integer;
|
||||||
procedure ItemScores;
|
procedure ItemScores;
|
||||||
procedure ScoreReport(AReport: TStrings);
|
procedure ScoreReport(AReport: TStrings);
|
||||||
procedure Alpha(AReport: TStrings);
|
procedure Alpha(AReport: TStrings);
|
||||||
procedure Cors(AReport: TStrings);
|
procedure Cors(AReport: TStrings);
|
||||||
procedure SimMR(AReport: TStrings);
|
procedure SimMR(AReport: TStrings);
|
||||||
procedure Hoyt(AReport: TStrings);
|
procedure Hoyt(AReport: TStrings);
|
||||||
procedure StepKR(AReport: TStrings);
|
procedure StepKR(AReport: TStrings);
|
||||||
procedure PlotScores;
|
procedure PlotScores;
|
||||||
procedure PlotMeans;
|
procedure PlotMeans;
|
||||||
|
|
||||||
procedure UpdateBtnStates;
|
procedure UpdateBtnStates;
|
||||||
|
|
||||||
public
|
public
|
||||||
{ public declarations }
|
{ public declarations }
|
||||||
@ -194,21 +195,25 @@ end;
|
|||||||
|
|
||||||
procedure TTestScoreFrm.ResponseScrollChange(Sender: TObject);
|
procedure TTestScoreFrm.ResponseScrollChange(Sender: TObject);
|
||||||
var
|
var
|
||||||
item, respno : integer;
|
item, respno: integer;
|
||||||
begin
|
begin
|
||||||
item := StrToInt(ItemNoEdit.Text);
|
item := StrToInt(ItemNoEdit.Text);
|
||||||
if item <= 0 then exit;
|
if item <= 0 then exit;
|
||||||
respno := StrToInt(RespNoEdit.Text);
|
|
||||||
if respno > 5 then exit; // already at max
|
respno := StrToInt(RespNoEdit.Text);
|
||||||
if respno > MaxRespNo then MaxRespNo := respno;
|
if respno > 5 then exit; // already at max
|
||||||
// save current response
|
|
||||||
Responses[respno][item-1] := ResponseEdit.Text;
|
if respno > MaxRespNo then MaxRespNo := respno;
|
||||||
RespWghts[respno][item-1] := StrToFloat(ScoreEdit.Text);
|
|
||||||
// display new position response
|
// save current response
|
||||||
respno := ResponseScroll.Position;
|
Responses[respno][item-1] := ResponseEdit.Text;
|
||||||
RespNoEdit.Text := IntToStr(respno);
|
RespWghts[respno][item-1] := StrToFloat(ScoreEdit.Text);
|
||||||
ResponseEdit.Text := Responses[respno][item-1];
|
|
||||||
ScoreEdit.Text := FloatToStr(RespWghts[respno][item-1]);
|
// display new position response
|
||||||
|
respno := ResponseScroll.Position;
|
||||||
|
RespNoEdit.Text := IntToStr(respno);
|
||||||
|
ResponseEdit.Text := Responses[respno][item-1];
|
||||||
|
ScoreEdit.Text := FloatToStr(RespWghts[respno][item-1]);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TTestScoreFrm.FormActivate(Sender: TObject);
|
procedure TTestScoreFrm.FormActivate(Sender: TObject);
|
||||||
@ -278,26 +283,28 @@ end;
|
|||||||
|
|
||||||
procedure TTestScoreFrm.ItemScrollChange(Sender: TObject);
|
procedure TTestScoreFrm.ItemScrollChange(Sender: TObject);
|
||||||
var
|
var
|
||||||
item, respno : integer;
|
item, respno: integer;
|
||||||
begin
|
begin
|
||||||
item := StrToInt(ItemNoEdit.Text);
|
item := StrToInt(ItemNoEdit.Text);
|
||||||
respno := StrToInt(RespNoEdit.Text);
|
respno := StrToInt(RespNoEdit.Text);
|
||||||
if respno > MaxRespNo then MaxRespNo := respno;
|
if respno > MaxRespNo then MaxRespNo := respno;
|
||||||
// save last one
|
|
||||||
if (item <> ItemScroll.Position) then
|
// save last one
|
||||||
begin
|
if (item <> ItemScroll.Position) then
|
||||||
Responses[respno][item-1] := ResponseEdit.Text;
|
begin
|
||||||
RespWghts[respno][item-1] := StrToFloat(ScoreEdit.Text);
|
Responses[respno][item-1] := ResponseEdit.Text;
|
||||||
end;
|
RespWghts[respno][item-1] := StrToFloat(ScoreEdit.Text);
|
||||||
item := ItemScroll.Position;
|
end;
|
||||||
ItemNoEdit.Text := IntToStr(item);
|
item := ItemScroll.Position;
|
||||||
respno := 1;
|
ItemNoEdit.Text := IntToStr(item);
|
||||||
ResponseScroll.Position := 1; // first response
|
respno := 1;
|
||||||
RespNoEdit.Text := '1'; // default
|
ResponseScroll.Position := 1; // first response
|
||||||
ScoreEdit.Text := '1'; // default
|
RespNoEdit.Text := '1'; // default
|
||||||
// load previous one
|
ScoreEdit.Text := '1'; // default
|
||||||
ResponseEdit.Text := Responses[respno][item-1];
|
|
||||||
ScoreEdit.Text := FloatToStr(RespWghts[respno][item-1]);
|
// load previous one
|
||||||
|
ResponseEdit.Text := Responses[respno][item-1];
|
||||||
|
ScoreEdit.Text := FloatToStr(RespWghts[respno][item-1]);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TTestScoreFrm.LastInBtnClick(Sender: TObject);
|
procedure TTestScoreFrm.LastInBtnClick(Sender: TObject);
|
||||||
|
@ -5,8 +5,8 @@ unit MatrixLib;
|
|||||||
interface
|
interface
|
||||||
|
|
||||||
uses
|
uses
|
||||||
Classes, SysUtils, Globals, DictionaryUnit, OutputUnit, Dialogs,
|
Classes, SysUtils, Dialogs,
|
||||||
FunctionsLib, DataProcs, MainUnit;
|
Globals, DictionaryUnit, FunctionsLib, DataProcs, MainUnit;
|
||||||
|
|
||||||
procedure GridDotProd(col1, col2: integer; out Product: double; var Ngood: integer);
|
procedure GridDotProd(col1, col2: integer; out Product: double; var Ngood: integer);
|
||||||
|
|
||||||
@ -16,23 +16,13 @@ procedure GridXProd(NoSelected : integer;
|
|||||||
Augment : boolean;
|
Augment : boolean;
|
||||||
VAR Ngood : integer);
|
VAR Ngood : integer);
|
||||||
|
|
||||||
procedure GridCovar(NoSelected : integer;
|
procedure GridCovar(NoSelected: integer; const Selected: IntDyneVec;
|
||||||
{VAR} Selected : IntDyneVec;
|
const Covar: DblDyneMat; const Means, Variances, StdDevs: DblDyneVec;
|
||||||
{VAR} Covar : DblDyneMat;
|
var ErrorCode: boolean; var NGood: Integer);
|
||||||
{VAR} Means : DblDyneVec;
|
|
||||||
{VAR} Variances : DblDyneVec;
|
|
||||||
{VAR} StdDevs : DblDyneVec;
|
|
||||||
VAR errorcode : boolean;
|
|
||||||
VAR Ngood : integer);
|
|
||||||
|
|
||||||
procedure Correlations(NoSelected : integer;
|
procedure Correlations(NoSelected: integer; const Selected: IntDyneVec;
|
||||||
{VAR} Selected : IntDyneVec;
|
const Correlations: DblDyneMat; const Means, Variances, StdDevs: DblDyneVec;
|
||||||
{VAR} Correlations : DblDyneMat;
|
var ErrorCode: boolean; var NGood: integer);
|
||||||
{VAR} Means : DblDyneVec;
|
|
||||||
{VAR} Variances : DblDyneVec;
|
|
||||||
{VAR} StdDevs : DblDyneVec;
|
|
||||||
VAR errorcode : boolean;
|
|
||||||
VAR Ngood : integer);
|
|
||||||
|
|
||||||
procedure MatAxB(const A, B, C: DblDyneMat; BRows, BCols, CRows, CCols: Integer;
|
procedure MatAxB(const A, B, C: DblDyneMat; BRows, BCols, CRows, CCols: Integer;
|
||||||
out ErrorCode: boolean);
|
out ErrorCode: boolean);
|
||||||
@ -56,25 +46,6 @@ procedure EffectCode(GridCol, min, max : integer;
|
|||||||
VAR startcol : integer;
|
VAR startcol : integer;
|
||||||
VAR endcol : integer;
|
VAR endcol : integer;
|
||||||
VAR novectors : integer);
|
VAR novectors : integer);
|
||||||
|
|
||||||
procedure MReg(NoIndep : integer;
|
|
||||||
{VAR} IndepCols : IntDyneVec;
|
|
||||||
DepCol : integer;
|
|
||||||
{VAR} RowLabels : StrDyneVec;
|
|
||||||
{VAR} Means : DblDyneVec;
|
|
||||||
{VAR} Variances : DblDyneVec;
|
|
||||||
{VAR} StdDevs : DblDyneVec;
|
|
||||||
{VAR} BWeights : DblDyneVec;
|
|
||||||
{VAR} BetaWeights : DblDyneVec;
|
|
||||||
{VAR} BStdErrs : DblDyneVec;
|
|
||||||
{VAR} Bttests : DblDyneVec;
|
|
||||||
{VAR} tProbs : DblDyneVec;
|
|
||||||
VAR R2 : double;
|
|
||||||
VAR stderrest : double;
|
|
||||||
VAR NCases : integer;
|
|
||||||
VAR errorcode : boolean;
|
|
||||||
PrintAll : boolean);
|
|
||||||
|
|
||||||
procedure MReg(NoIndep: integer; const IndepCols: IntDyneVec; DepCol: integer;
|
procedure MReg(NoIndep: integer; const IndepCols: IntDyneVec; DepCol: integer;
|
||||||
const RowLabels: StrDyneVec;
|
const RowLabels: StrDyneVec;
|
||||||
const Means, Variances, StdDevs, BWeights, BetaWeights, BStdErrs, Bttests, tProbs: DblDyneVec;
|
const Means, Variances, StdDevs, BWeights, BetaWeights, BStdErrs, Bttests, tProbs: DblDyneVec;
|
||||||
@ -131,18 +102,9 @@ procedure MReg2(NCases : integer;
|
|||||||
procedure MatSub(const a, b, c: DblDyneMat;
|
procedure MatSub(const a, b, c: DblDyneMat;
|
||||||
brows, bcols, crows, ccols: integer; out errorcode: boolean);
|
brows, bcols, crows, ccols: integer; out errorcode: boolean);
|
||||||
|
|
||||||
procedure IntArrayPrint(mat : IntDyneMat;
|
procedure IntArrayPrint(const mat: IntDyneMat; rows, cols: integer;
|
||||||
rows, cols : integer;
|
const YTitle: string; const RowLabels, ColLabels: StrDyneVec;
|
||||||
ytitle : string;
|
const Title: string; AReport: TStrings);
|
||||||
RowLabels, ColLabels : StrDyneVec;
|
|
||||||
Title : string;
|
|
||||||
AReport: TStrings);
|
|
||||||
|
|
||||||
procedure IntArrayPrint(mat : IntDyneMat;
|
|
||||||
rows, cols : integer;
|
|
||||||
ytitle : string;
|
|
||||||
RowLabels, ColLabels : StrDyneVec;
|
|
||||||
Title : string);
|
|
||||||
|
|
||||||
procedure eigens(VAR a: DblDyneMat; Var d : DblDyneVec; n : integer);
|
procedure eigens(VAR a: DblDyneMat; Var d : DblDyneVec; n : integer);
|
||||||
|
|
||||||
@ -160,24 +122,18 @@ function SEVS(nv,nf : integer;
|
|||||||
|
|
||||||
function SCPF(VAR x,y : DblDyneMat; kx,ky,n,nd : integer) : double;
|
function SCPF(VAR x,y : DblDyneMat; kx,ky,n,nd : integer) : double;
|
||||||
|
|
||||||
procedure Mat_Print(var xmat: DblDyneMat; Rows,Cols: Integer; var Title: String;
|
|
||||||
var RowLabels, ColLabels: StrDyneVec; NCases: Integer);
|
|
||||||
procedure MatPrint(const xmat: DblDyneMat; Rows,Cols: Integer; const Title: String;
|
procedure MatPrint(const xmat: DblDyneMat; Rows,Cols: Integer; const Title: String;
|
||||||
const RowLabels, ColLabels: StrDyneVec; NCases: Integer; AReport: TStrings);
|
const RowLabels, ColLabels: StrDyneVec; NCases: Integer; AReport: TStrings);
|
||||||
|
|
||||||
procedure DynVectorPrint(var AVector: DblDyneVec; NoVars: integer;
|
|
||||||
Title: string; var Labels: StrDyneVec; NCases: integer); overload;
|
|
||||||
procedure DynVectorPrint(const AVector: DblDyneVec; NoVars: integer;
|
procedure DynVectorPrint(const AVector: DblDyneVec; NoVars: integer;
|
||||||
Title: string; const Labels: StrDyneVec; NCases: integer; AReport: TStrings); overload;
|
Title: string; const Labels: StrDyneVec; NCases: integer; AReport: TStrings);
|
||||||
|
|
||||||
procedure scatplot(const x, y: DblDyneVec; NoCases: integer;
|
procedure ScatPlot(const x, y: DblDyneVec; NoCases: integer;
|
||||||
const TitleStr, x_axis, y_axis: string; x_min, x_max, y_min, y_max: double;
|
const TitleStr, x_axis, y_axis: string; x_min, x_max, y_min, y_max: double;
|
||||||
const VarLabels: StrDyneVec; AReport: TStrings);
|
const VarLabels: StrDyneVec; AReport: TStrings);
|
||||||
|
|
||||||
procedure DynIntMatPrint(Mat: IntDyneMat; Rows, Cols: integer; YTitle: string;
|
procedure DynIntMatPrint(Mat: IntDyneMat; Rows, Cols: integer; YTitle: string;
|
||||||
RowLabels, ColLabels: StrDyneVec; Title: string); overload;
|
RowLabels, ColLabels: StrDyneVec; Title: string; AReport: TStrings);
|
||||||
procedure DynIntMatPrint(Mat: IntDyneMat; Rows, Cols: integer; YTitle: string;
|
|
||||||
RowLabels, ColLabels: StrDyneVec; Title: string; AReport: TStrings); overload;
|
|
||||||
|
|
||||||
procedure SymMatRoots(A : DblDyneMat; M : integer; VAR E : DblDyneVec; VAR V : DblDyneMat);
|
procedure SymMatRoots(A : DblDyneMat; M : integer; VAR E : DblDyneVec; VAR V : DblDyneMat);
|
||||||
procedure matinv(a, vtimesw, v, w: DblDyneMat; n: integer);
|
procedure matinv(a, vtimesw, v, w: DblDyneMat; n: integer);
|
||||||
@ -292,35 +248,30 @@ begin
|
|||||||
end;
|
end;
|
||||||
//-------------------------------------------------------------------
|
//-------------------------------------------------------------------
|
||||||
|
|
||||||
procedure GridCovar(NoSelected : integer;
|
{ Obtains the variance/covariance matrix of variables in the grid
|
||||||
{VAR} Selected : IntDyneVec;
|
NoSelected is the number of variables selected from the grid
|
||||||
{VAR} Covar : DblDyneMat;
|
Selected is a vector of integers for the grid columns of selected variables
|
||||||
{VAR} Means : DblDyneVec;
|
Covar is the variance/covariance matrix returned
|
||||||
{VAR} Variances : DblDyneVec;
|
Means, StdDevs, Variances are double vectors obtained from the augmented matrix
|
||||||
{VAR} StdDevs : DblDyneVec;
|
errorcode is true if an error occurs due to 0 variance
|
||||||
VAR errorcode : boolean;
|
Ngood is the number of records in the cross-product of vectors
|
||||||
VAR Ngood : integer);
|
This procedure calls the GridXProd procedure with augmentation true
|
||||||
// Obtains the variance/covariance matrix of variables in the grid
|
in order to obtain the means, variances and standard deviations }
|
||||||
// NoSelected is the number of variables selected from the grid
|
procedure GridCovar(NoSelected: integer; const Selected: IntDyneVec;
|
||||||
// Selected is a vector of integers for the grid columns of selected variables
|
const Covar: DblDyneMat; const Means, Variances, StdDevs: DblDyneVec;
|
||||||
// Covar is the variance/covariance matrix returned
|
var errorcode: boolean; var NGood: integer);
|
||||||
// Means, StdDevs, Variances are double vectors obtained from the augmented matrix
|
|
||||||
// errorcode is true if an error occurs due to 0 variance
|
|
||||||
// Ngood is the number of records in the cross-product of vectors
|
|
||||||
// This procedure calls the GridXProd procedure with augmentation true
|
|
||||||
// in order to obtain the means, variances and standard deviations
|
|
||||||
var
|
var
|
||||||
i, j: integer;
|
i, j: integer;
|
||||||
N: double;
|
N: double;
|
||||||
Augment: boolean;
|
Augment: boolean;
|
||||||
begin
|
begin
|
||||||
// initialize
|
// initialize
|
||||||
errorcode := false;
|
ErrorCode := false;
|
||||||
for i := 1 to NoSelected do
|
for i := 0 to NoSelected-1 do
|
||||||
begin
|
begin
|
||||||
Means[i-1] := 0.0;
|
Means[i] := 0.0;
|
||||||
Variances[i-1] := 0.0;
|
Variances[i] := 0.0;
|
||||||
StdDevs[i-1] := 0.0;
|
StdDevs[i] := 0.0;
|
||||||
end;
|
end;
|
||||||
Augment := true; // augment to get intercept, means, variances, std.devs.
|
Augment := true; // augment to get intercept, means, variances, std.devs.
|
||||||
|
|
||||||
@ -333,68 +284,61 @@ begin
|
|||||||
// Sums of squares are in diagonal, cross-products in off-diagonal cells
|
// Sums of squares are in diagonal, cross-products in off-diagonal cells
|
||||||
// Sums of X's are in the augmented column
|
// Sums of X's are in the augmented column
|
||||||
// Get means and standard deviations first
|
// Get means and standard deviations first
|
||||||
for i := 1 to NoSelected do
|
for i := 0 to NoSelected-1 do
|
||||||
begin
|
begin
|
||||||
Means[i-1] := Covar[i-1,NoSelected] / N;
|
Means[i] := Covar[i, NoSelected] / N;
|
||||||
Variances[i-1] := Covar[i-1,i-1] - (Sqr(Covar[i-1,NoSelected]) / N);
|
Variances[i] := Covar[i, i] - (Sqr(Covar[i, NoSelected]) / N);
|
||||||
Variances[i-1] := Variances[i-1] / (N - 1.0);
|
Variances[i] := Variances[i] / (N - 1.0);
|
||||||
if Variances[i-1] > 0.0 then
|
if Variances[i] > 0.0 then
|
||||||
StdDevs[i-1] := sqrt(Variances[i-1])
|
StdDevs[i] := sqrt(Variances[i])
|
||||||
else
|
else
|
||||||
begin
|
begin
|
||||||
StdDevs[i-1] := 0.0;
|
StdDevs[i] := 0.0;
|
||||||
errorcode := true;
|
ErrorCode := true;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
// Now get covariances
|
// Now get covariances
|
||||||
for i := 1 to NoSelected do
|
for i := 0 to NoSelected-1 do
|
||||||
begin
|
begin
|
||||||
for j := 1 to NoSelected do
|
for j := 0 to NoSelected-1 do
|
||||||
begin
|
begin
|
||||||
Covar[i-1,j-1] := Covar[i-1,j-1] - ((Covar[i-1,NoSelected] * Covar[j-1,NoSelected]) / N);
|
Covar[i, j] := Covar[i, j] - ((Covar[i, NoSelected] * Covar[j, NoSelected]) / N);
|
||||||
Covar[i-1,j-1] := Covar[i-1,j-1] / (N - 1);
|
Covar[i, j] := Covar[i, j] / (N - 1);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
//-------------------------------------------------------------------
|
//-------------------------------------------------------------------
|
||||||
|
|
||||||
procedure Correlations(NoSelected : integer;
|
{ Obtains the correlation matrix among grid variables
|
||||||
{VAR} Selected : IntDyneVec;
|
NoSelected is the no. of grid variables selected for analysis
|
||||||
{VAR} Correlations : DblDyneMat;
|
Selected is a vector of integers of the grid variable columns selected
|
||||||
{VAR} Means : DblDyneVec;
|
Correlations are returned in the Correlations matrix
|
||||||
{VAR} Variances : DblDyneVec;
|
Means, Variances, StdDevs are returned as double vectors
|
||||||
{VAR} StdDevs : DblDyneVec;
|
errorcode is true if a 0 variance is detected
|
||||||
VAR errorcode : boolean;
|
Ngood is the number cases that do not contain missing values or are filtered
|
||||||
VAR Ngood : integer);
|
This procedure calls the GridCovar procedure }
|
||||||
// Obtains the correlation matrix among grid variables
|
procedure Correlations(NoSelected: integer; const Selected: IntDyneVec;
|
||||||
// NoSelected is the no. of grid variables selected for analysis
|
const Correlations: DblDyneMat; const Means, Variances, StdDevs: DblDyneVec;
|
||||||
// Selected is a vector of integers of the grid variable columns selected
|
var ErrorCode: boolean; var NGood: integer);
|
||||||
// Correlations are returned in the Correlations matrix
|
|
||||||
// Means, Variances, StdDevs are returned as double vectors
|
|
||||||
// errorcode is true if a 0 variance is detected
|
|
||||||
// Ngood is the number cases that do not contain missing values or are filtered
|
|
||||||
// This procedure calls the GridCovar procedure
|
|
||||||
var
|
var
|
||||||
i, j : integer;
|
i, j: integer;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
// get covariance matrix, means and standard deviations
|
// get covariance matrix, means and standard deviations
|
||||||
GridCovar(NoSelected,Selected,Correlations,Means,Variances,StdDevs,errorcode, Ngood);
|
GridCovar(NoSelected, Selected, Correlations, Means, Variances, StdDevs, ErrorCode, Ngood);
|
||||||
for i := 1 to NoSelected do
|
for i := 0 to NoSelected-1 do
|
||||||
begin
|
begin
|
||||||
for j := 1 to NoSelected do
|
for j := 0 to NoSelected-1 do
|
||||||
begin
|
begin
|
||||||
if (StdDevs[i-1] > 0.0) and (StdDevs[j-1] > 0.0) then
|
if (StdDevs[i] > 0.0) and (StdDevs[j] > 0.0) then
|
||||||
Correlations[i-1,j-1] := Correlations[i-1,j-1] /
|
Correlations[i, j] := Correlations[i, j] / (StdDevs[i] * StdDevs[j])
|
||||||
(StdDevs[i-1] * StdDevs[j-1])
|
else
|
||||||
else
|
begin
|
||||||
begin
|
Correlations[i, j] := 0.0;
|
||||||
Correlations[i-1,j-1] := 0.0;
|
ErrorCode := true;
|
||||||
errorcode := true;
|
end;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
end;
|
|
||||||
end;
|
end;
|
||||||
//-------------------------------------------------------------------
|
//-------------------------------------------------------------------
|
||||||
|
|
||||||
@ -595,21 +539,21 @@ BEGIN
|
|||||||
end;
|
end;
|
||||||
//-------------------------------------------------------------------
|
//-------------------------------------------------------------------
|
||||||
|
|
||||||
procedure DETERM(const a: DblDyneMat; Rows, Cols: integer; out determ: double;
|
procedure Determ(const a: DblDyneMat; Rows, Cols: integer; out determ: double;
|
||||||
out errorcode: boolean);
|
out ErrorCode: boolean);
|
||||||
var
|
var
|
||||||
indx: IntDyneVec;
|
indx: IntDyneVec;
|
||||||
i: integer;
|
i: integer;
|
||||||
begin
|
begin
|
||||||
SetLength(indx,rows);
|
SetLength(indx,rows);
|
||||||
errorcode := false;
|
ErrorCode := false;
|
||||||
if (rows <> cols) then
|
if (rows <> cols) then
|
||||||
errorcode := true
|
ErrorCode := true
|
||||||
else
|
else
|
||||||
begin
|
begin
|
||||||
LUDCMP(a, rows, indx, determ);
|
LUDCMP(a, rows, indx, determ);
|
||||||
for i := 1 to rows do
|
for i := 0 to rows-1 do
|
||||||
determ := determ * a[i-1,i-1];
|
determ := determ * a[i, i];
|
||||||
end;
|
end;
|
||||||
end; { of determ }
|
end; { of determ }
|
||||||
//-------------------------------------------------------------------
|
//-------------------------------------------------------------------
|
||||||
@ -671,30 +615,6 @@ begin
|
|||||||
OS3MainFrm.NoVarsEdit.Text := IntToStr(NoVariables);
|
OS3MainFrm.NoVarsEdit.Text := IntToStr(NoVariables);
|
||||||
coef := nil;
|
coef := nil;
|
||||||
end;
|
end;
|
||||||
//-------------------------------------------------------------------
|
|
||||||
|
|
||||||
procedure MReg(NoIndep : integer;
|
|
||||||
{VAR} IndepCols : IntDyneVec;
|
|
||||||
DepCol : integer;
|
|
||||||
{VAR} RowLabels : StrDyneVec;
|
|
||||||
{VAR} Means : DblDyneVec;
|
|
||||||
{VAR} Variances : DblDyneVec;
|
|
||||||
{VAR} StdDevs : DblDyneVec;
|
|
||||||
{VAR} BWeights : DblDyneVec;
|
|
||||||
{VAR} BetaWeights : DblDyneVec;
|
|
||||||
{VAR} BStdErrs : DblDyneVec;
|
|
||||||
{VAR} Bttests : DblDyneVec;
|
|
||||||
{VAR} tProbs : DblDyneVec;
|
|
||||||
VAR R2 : double;
|
|
||||||
VAR stderrest : double;
|
|
||||||
VAR NCases : integer;
|
|
||||||
VAR errorcode : boolean;
|
|
||||||
PrintAll : boolean);
|
|
||||||
begin
|
|
||||||
MReg(NoIndep, IndepCols, Depcol, RowLabels,means, Variances, StdDevs,
|
|
||||||
BWeights, BetaWeights, BStdErrs, BtTests, tProbs, R2, StdErrEst, NCases,
|
|
||||||
ErrorCode, PrintAll, OutputFrm.RichEdit.Lines);
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure MReg(NoIndep: integer; const IndepCols: IntDyneVec; DepCol: integer;
|
procedure MReg(NoIndep: integer; const IndepCols: IntDyneVec; DepCol: integer;
|
||||||
const RowLabels: StrDyneVec;
|
const RowLabels: StrDyneVec;
|
||||||
@ -788,7 +708,6 @@ begin
|
|||||||
AReport.Add('Variance Y: %10.3f', [VarY]);
|
AReport.Add('Variance Y: %10.3f', [VarY]);
|
||||||
AReport.Add('SSY: %10.3f', [SSY]);
|
AReport.Add('SSY: %10.3f', [SSY]);
|
||||||
AReport.Add('SDY: %10.3f', [SDY]);
|
AReport.Add('SDY: %10.3f', [SDY]);
|
||||||
// OutputFrm.ShowModal ;
|
|
||||||
|
|
||||||
// augment the matrix
|
// augment the matrix
|
||||||
for i := 1 to NCases do
|
for i := 1 to NCases do
|
||||||
@ -829,9 +748,6 @@ begin
|
|||||||
DynVectorPrint(Means, NoIndep+1, 'MEANS', RowLabels, NCases, AReport);
|
DynVectorPrint(Means, NoIndep+1, 'MEANS', RowLabels, NCases, AReport);
|
||||||
DynVectorPrint(Variances, NoIndep+1,'VARIANCES',RowLabels, NCases, AReport);
|
DynVectorPrint(Variances, NoIndep+1,'VARIANCES',RowLabels, NCases, AReport);
|
||||||
DynVectorPrint(StdDevs, NoIndep+1, 'STD. DEV.S', RowLabels, NCases, AReport);
|
DynVectorPrint(StdDevs, NoIndep+1, 'STD. DEV.S', RowLabels, NCases, AReport);
|
||||||
|
|
||||||
//OutputFrm.ShowModal;
|
|
||||||
//OutPutFrm.RichEdit.Clear;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
// get product of the augmented X transpose matrix times the Y vector
|
// get product of the augmented X transpose matrix times the Y vector
|
||||||
@ -1302,7 +1218,6 @@ var
|
|||||||
outcount : integer;
|
outcount : integer;
|
||||||
varsout : IntDyneVec;
|
varsout : IntDyneVec;
|
||||||
begin
|
begin
|
||||||
Assert(OutputFrm <> nil);
|
|
||||||
Assert(AReport <> nil);
|
Assert(AReport <> nil);
|
||||||
|
|
||||||
SetLength(IndRowLabels,NoVars);
|
SetLength(IndRowLabels,NoVars);
|
||||||
@ -1484,24 +1399,10 @@ begin
|
|||||||
a[i,j] := b[i,j] - c[i,j];
|
a[i,j] := b[i,j] - c[i,j];
|
||||||
end;
|
end;
|
||||||
end; { of matsub }
|
end; { of matsub }
|
||||||
//---------------------------------------------------------------------------
|
|
||||||
|
|
||||||
procedure IntArrayPrint(mat : IntDyneMat;
|
procedure IntArrayPrint(const Mat: IntDyneMat; Rows, Cols: integer;
|
||||||
rows, cols : integer;
|
const YTitle: string; const RowLabels, ColLabels: StrDyneVec;
|
||||||
ytitle : string;
|
const Title: string; AReport: TStrings);
|
||||||
RowLabels, ColLabels : StrDyneVec;
|
|
||||||
Title : string);
|
|
||||||
begin
|
|
||||||
Assert(OutputFrm <> nil);
|
|
||||||
IntArrayPrint(mat, rows, cols, ytitle, RowLabels, ColLabels, Title, OutputFrm.RichEdit.Lines);
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure IntArrayPrint(Mat: IntDyneMat;
|
|
||||||
Rows, Cols: integer;
|
|
||||||
YTitle: string;
|
|
||||||
RowLabels, ColLabels: StrDyneVec;
|
|
||||||
Title: string;
|
|
||||||
AReport: TStrings);
|
|
||||||
var
|
var
|
||||||
i, j, first, last, nflds: integer;
|
i, j, first, last, nflds: integer;
|
||||||
done : boolean;
|
done : boolean;
|
||||||
@ -1516,7 +1417,6 @@ begin
|
|||||||
|
|
||||||
while not done do
|
while not done do
|
||||||
begin
|
begin
|
||||||
// AReport.Add('');
|
|
||||||
AReport.Add(' ' + ytitle);;
|
AReport.Add(' ' + ytitle);;
|
||||||
AReport.Add('Variables');
|
AReport.Add('Variables');
|
||||||
|
|
||||||
@ -1542,7 +1442,6 @@ begin
|
|||||||
first := last + 1;
|
first := last + 1;
|
||||||
end;
|
end;
|
||||||
AReport.Add('');
|
AReport.Add('');
|
||||||
// AReport.Add('');
|
|
||||||
end;
|
end;
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
@ -1810,13 +1709,6 @@ begin
|
|||||||
end;
|
end;
|
||||||
scpf := scp;
|
scpf := scp;
|
||||||
end; { of SCPF }
|
end; { of SCPF }
|
||||||
//-------------------------------------------------------------------
|
|
||||||
|
|
||||||
procedure Mat_Print(var xmat: DblDyneMat; Rows, Cols: Integer; var Title: String;
|
|
||||||
var RowLabels, ColLabels: StrDyneVec; NCases: integer);
|
|
||||||
begin
|
|
||||||
MatPrint(xmat, Rows, Cols, Title, RowLabels, ColLabels, NCases, OutputFrm.RichEdit.Lines);
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure MatPrint(const xmat: DblDyneMat; Rows, Cols: integer; const Title: string;
|
procedure MatPrint(const xmat: DblDyneMat; Rows, Cols: integer; const Title: string;
|
||||||
const RowLabels, ColLabels: StrDyneVec; NCases: integer; AReport: TStrings);
|
const RowLabels, ColLabels: StrDyneVec; NCases: integer; AReport: TStrings);
|
||||||
@ -1861,25 +1753,10 @@ begin
|
|||||||
first := last + 1;
|
first := last + 1;
|
||||||
end;
|
end;
|
||||||
AReport.Add('');
|
AReport.Add('');
|
||||||
// AReport.Add('');
|
|
||||||
end;
|
|
||||||
//--------------------------------------------------------------------
|
|
||||||
|
|
||||||
procedure DynVectorPrint(var AVector: DblDyneVec;
|
|
||||||
NoVars: integer;
|
|
||||||
Title: string;
|
|
||||||
var Labels: StrDyneVec;
|
|
||||||
NCases: integer);
|
|
||||||
begin
|
|
||||||
DynVectorPrint(AVector, NoVars, Title, Labels, NCases, OutputFrm.RichEdit.Lines);
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure DynVectorPrint(const AVector: DblDyneVec;
|
procedure DynVectorPrint(const AVector: DblDyneVec; NoVars: integer;
|
||||||
NoVars: integer;
|
Title: string; const Labels: StrDyneVec; NCases: integer; AReport: TStrings);
|
||||||
Title: string;
|
|
||||||
const Labels: StrDyneVec;
|
|
||||||
NCases: integer;
|
|
||||||
AReport: TStrings);
|
|
||||||
var
|
var
|
||||||
i, j, first, last, nflds: integer;
|
i, j, first, last, nflds: integer;
|
||||||
done: boolean;
|
done: boolean;
|
||||||
@ -1922,7 +1799,7 @@ begin
|
|||||||
end;
|
end;
|
||||||
//--------------------------------------------------------------------------
|
//--------------------------------------------------------------------------
|
||||||
|
|
||||||
procedure scatplot(const x, y: DblDyneVec; NoCases: integer;
|
procedure ScatPlot(const x, y: DblDyneVec; NoCases: integer;
|
||||||
const TitleStr, x_axis, y_axis: string; x_min, x_max, y_min, y_max: double;
|
const TitleStr, x_axis, y_axis: string; x_min, x_max, y_min, y_max: double;
|
||||||
const VarLabels: StrDyneVec; AReport: TStrings);
|
const VarLabels: StrDyneVec; AReport: TStrings);
|
||||||
var
|
var
|
||||||
@ -1937,8 +1814,6 @@ var
|
|||||||
outline : string;
|
outline : string;
|
||||||
Labels : StrDyneVec;
|
Labels : StrDyneVec;
|
||||||
begin
|
begin
|
||||||
Assert(OutputFrm <> nil);
|
|
||||||
|
|
||||||
SetLength(Labels,NoVariables);
|
SetLength(Labels,NoVariables);
|
||||||
for i := 1 to nocases do Labels[i-1] := VarLabels[i-1];
|
for i := 1 to nocases do Labels[i-1] := VarLabels[i-1];
|
||||||
height := 40;
|
height := 40;
|
||||||
@ -2049,13 +1924,6 @@ begin
|
|||||||
|
|
||||||
Labels := nil;
|
Labels := nil;
|
||||||
end; { of scatplot procedure }
|
end; { of scatplot procedure }
|
||||||
//-------------------------------------------------------------------
|
|
||||||
|
|
||||||
procedure DynIntMatPrint(Mat: IntDyneMat; Rows, Cols: integer; YTitle: string;
|
|
||||||
RowLabels, ColLabels: StrDyneVec; Title: string);
|
|
||||||
begin
|
|
||||||
DynIntMatPrint(Mat, Rows, Cols, YTitle, RowLabels, ColLabels, Title, OutputFrm.RichEdit.Lines);
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure DynIntMatPrint(Mat: IntDyneMat; Rows, Cols: integer; YTitle: string;
|
procedure DynIntMatPrint(Mat: IntDyneMat; Rows, Cols: integer; YTitle: string;
|
||||||
RowLabels, ColLabels: StrDyneVec; Title: string; AReport: TStrings);
|
RowLabels, ColLabels: StrDyneVec; Title: string; AReport: TStrings);
|
||||||
|
Reference in New Issue
Block a user