Вверх ↑
Ответов: 32
Рейтинг: 0
#1: 2021-03-31 15:58:34 ЛС | профиль | цитата
Нашел вот такую штуку для вычисления корреляции

Add(IntegerArray,1369151,889,238)
{
IntArray=['0'=3,'1'=2,'2'=4,'3'=5,'4'=6]
}
Add(IntegerArray,7105367,973,238)
{
IntArray=['0'=9,'1'=7,'2'=12,'3'=15,'4'=17]
}
Add(Button,794109,812,322)
{
Left=65
Top=410
Width=75
Caption="Расчитать"
link(onClick,7364257:doEvent1,[])
}
Add(Edit,10779859,938,322)
{
Left=190
Top=400
Width=140
Text=""
}
Add(InlineCode,2865515,889,322)
{
WorkPoints=#53:doCorrelation=Подсчет корреляции между двумя масивами|
EventPoints=#46:onCorrelation=Резултат вычисления (Корреляция)|
VarPoints=#22:Correlation=Корреляция|21:Covariance=Ковариация|36:sig1=Стандартное отклонение масива 1|36:sig2=Стандартное отклонение масива 2|
DataPoints=#137:Array1=1-й массив для подсчета корреляции. Количество элементов подсчета выбирается по меньшему количеству элементов из Array1 и Array2. |136:Array2=2-й массив для подсчета корреляции. Количество элементов подсчета выбирается по меньшему количеству элементов из Array1 и Array2.|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|21:uses kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|28: ArrIn1, ArrIn2: PArray;|27: cov, r, sx, sy : real;|9: public|0:|30: onCorrelation: THI_Event;|23: Array1: THI_Event;|23: Array2: THI_Event;|57: procedure doCorrelation(var Data:TData; Index:word);|55: procedure Correlation(var Data:TData; index:word);|54: procedure Covariance(var Data:TData; index:word);|48: procedure sig1(var Data:TData; index:word);|48: procedure sig2(var Data:TData; index:word);|0:|5: end;|0:|14:implementation|0:|36:procedure THiAsmClass.doCorrelation;|3:var|23: dx, dy, s1, s2: real;|16: i, n: integer;|23: ind, dt1, dt2: TData;|5:begin|31: ArrIn1 := ReadArray(Array1);|54: if (ArrIn1 = nil) or (ArrIn1._Count = 0) then exit;|31: ArrIn2 := ReadArray(Array2);|54: if (ArrIn2 = nil) or (ArrIn2._Count = 0) then exit;|79: if ArrIn1._Count>ArrIn2._Count then n:=ArrIn2._Count else n:=ArrIn1._Count;|11: s1 := 0;|11: s2 := 0;|23: for i := 0 to n-1 do|8: begin|23: Ind := _DoData(i);|27: ArrIn1._Get(Ind, dt1);|28: s1 := s1 + ToReal(dt1);|27: ArrIn2._Get(Ind, dt2);|28: s2 := s2 + ToReal(dt2);|7: end;|12: s1:=s1/n;|12: s2:=s2/n;|9: sx:=0;|9: sy:=0;|10: cov:=0;|23: for i := 0 to n-1 do|8: begin|23: Ind := _DoData(i);|27: ArrIn1._Get(Ind, dt1);|27: ArrIn2._Get(Ind, dt2);|48: cov:=cov+(ToReal(dt1)-s1)*(ToReal(dt2)-s2);|36: sx := sx + sqr(ToReal(dt1)-s1);|36: sy := sy + sqr(ToReal(dt2)-s2);|7: end;|22: r:=cov/sqrt(sx*sy);|32: _hi_onEvent(onCorrelation, r);|4:end;|0:|61:procedure THiAsmClass.Covariance(var Data:TData; index:word);|5:begin|20: dtReal(Data, cov);|4:end;|0:|62:procedure THiAsmClass.Correlation(var Data:TData; index:word);|5:begin|18: dtReal(Data, r);|4:end;|0:|55:procedure THiAsmClass.sig1(var Data:TData; index:word);|5:begin|19: dtReal(Data, sx);|4:end;|0:|55:procedure THiAsmClass.sig2(var Data:TData; index:word);|5:begin|19: dtReal(Data, sy);|4:end;|0:|4:end.|
link(onCorrelation,10779859:doText,[])
link(Array1,1369151:Array,[])
link(Array2,7105367:Array,[(902,296)(979,296)])
}
Add(Edit,9353038,938,483)
{
Left=510
Top=400
Width=140
Text=""
link(Str,2865515:Covariance,[(944,419)(902,419)])
}
Add(Hub,7364257,854,322)
{
OutCount=5
link(onEvent1,2865515:doCorrelation,[])
link(onEvent2,6682233:doText,[(885,335)(885,712)])
link(onEvent3,9353038:doText,[(882,342)(882,489)])
link(onEvent4,13153538:doText,[(877,349)(877,536)])
link(onEvent5,10804726:doText,[(872,356)(872,577)])
}
Add(Edit,13153538,987,530)
{
Left=670
Top=405
Width=140
Text=""
link(Str,2865515:sig1,[(993,442)(909,442)])
}
Add(Edit,10804726,1141,571)
{
Left=835
Top=405
Width=140
Text=""
link(Str,2865515:sig2,[(1147,463)(916,463)])
}
Add(Edit,6682233,889,706)
{
Left=345
Top=400
Width=140
Text=""
link(Str,2865515:Correlation,[])
}




как теперь ее прикрутить к


Add(Plotter,11338811,392,154)
{
Top=55
Width=1071
Height=279
Name="g1"
Point(doAlign)
}
Add(PlotPoints,13221991,665,252)
{
Grapher="g1"
Name="test"
link(ValueY,2324210:Part1,[])
link(ValueX,2324210:Part2,[])
}
Add(DropFile,11451715,483,140)
{
link(onDropFile,6160664:doWork1,[(536,146)])
}
Add(SearchInFile,8226956,546,189)
{
link(onSearch,2308162:doEvent1,[])
}
Add(MultiStrPart,2324210,665,196)
{
Direct=1
}
Add(Hub,2308162,602,196)
{
link(onEvent1,2324210:doSplit,[])
link(onEvent2,13221991:doAdd,[(655,209)(655,258)])
}
Add(HubEx,6160664,532,189)
{
link(onEvent,8226956:doSearch,[])
}
Add(ODialog,8954181,483,189)
{
link(onExecute,6160664:doWork2,[])
}
Add(Button,988860,392,224)
{
Left=40
Top=5
Width=160
Height=35
Caption="Загрузить таблицу"
link(onClick,8954181:doExecute,[(454,230)(454,195)])
}

карма: 0

0