56. -0.0913459631861964 -0.40863386078084674 -0.05233410268262804 -0.20827353172454463 0.8024623178223143 0.8647315172782226 0.8038142580255461 -0.4687807659526227 0.83071301235432 -0.4662151147094583 -0.8265130380449413 0.7862050382555064 0.560057691866568 -0.702248083000251 -0.16533259782918086 0.6663485659469947 0.7358532579825505 0.40852921511485196 0.8800697814778186 0.760467350839902 -0.8091181729710225 -0.07348600755610393 -0.7002292256328049 0.8003914687227348 -0.37901655503666365 -0.023563169554216064 -0.08069963799368177 0.8148259678244478 0.860089615143668 0.7417180684967833 0.7220412638828693 0.7454440362120325 0.8883720076480819 0.8204946550427406 0.5011229403021128 0.6450504898544621 0.7592575208855366 0.8460421440310872 0.6872378616826157 -0.8020299143584565 -0.6618830675342675 -0.7973348683026327 -0.6496519859609511 -0.6493375259025363 -0.722148534178133 0.6005785697996507 0.27001725701174056 1.0 -0.680068364658176 0.8717271102107073;
57. 0.16536797295920186 0.48331852305308454 0.1920784365868285 0.38036937261460185 -0.6808164813443078 -0.6454307579456039 -0.7577133900525099 0.34503499207551847 -0.6428566762001433 0.3177545534940276 0.5901749710386411 -0.5313789101031088 -0.38068970552689363 0.6529757921449781 0.17446130311669544 -0.44704124220207364 -0.5460306438553018 -0.36358560515818883 -0.7269164361145732 -0.518530793279248 0.6391619747186505 0.0007919722923224609 0.5472071839464567 -0.6380888734497725 0.18385629246032484 -0.04931562503170856 0.20332836460606574 -0.5112905932629636 -0.5623713364405777 -0.7234259355110526 -0.44604775648721606 -0.6207910711744009 -0.7748651528135505 -0.45364537801809346 -0.4330245797755244 -0.24845293963253018 -0.7379166940685845 -0.6198590621037185 -0.5905525653378438 0.7445288921547281 0.5841612244195863 0.6382170709123108 0.499196611203586 0.6466467154531956 0.506467978888153 -0.7087748613931263 -0.29692665311172317 -0.680068364658176 1.0 -0.7571951671938293;
58. -0.01650931041916315 -0.3685366218425072 -0.16119479829430602 -0.3110679915778835 0.8424111278994232 0.9121980077070948 0.7579748854439583 -0.6150185691205592 0.7821165308828467 -0.4426138682026305 -0.8390531077005865 0.8291020524414462 0.5154724386129322 -0.8170554181878835 -0.059902512645132196 0.7770193461659242 0.8307406791898616 0.5761845676473248 0.9099674574423138 0.8203827949219864 -0.788031202565023 -0.22594471554724388 -0.7279216576904707 0.8703490092121895 -0.43067278925045654 0.07396837297207608 0.05108876338772324 0.7482550468438786 0.848154832877349 0.8373025176156048 0.7000803137909591 0.7762300082723728 0.8943534432148299 0.7917897683763822 0.5040678736527299 0.5778217359651399 0.7951390675050626 0.9045641589721176 0.6827379302132944 -0.846412718582176 -0.7356666359060426 -0.8612451731888968 -0.7283740543848112 -0.7234379545805272 -0.7653307640649273 0.7706770786708962 0.22804080687966718 0.8717271102107073 -0.7571951671938293 1.0];
59.
60.
61.
62.
63. % sigma = [ 1.000000 -0.118365 0.628995 -0.884607 0.863786 0.538263 0.867237 0.865734 0.646887 0.815381 ;
64. % -0.118365 1.000000 0.216864 0.033256 -0.049985 0.109708 -0.296135 -0.132362 0.265592 -0.161195 ;
65. % 0.628995 0.216864 1.000000 -0.734416 0.672728 0.679158 0.603983 0.551794 0.628441 0.757975 ;
66. % -0.884607 0.033256 -0.734416 1.000000 -0.853928 -0.657973 -0.841113 -0.779749 -0.732869 -0.839053 ;
67. % 0.863786 -0.049985 0.672728 -0.853928 1.000000 0.645029 0.804883 0.881694 0.735856 0.829102 ;
68. % 0.538263 0.109708 0.679158 -0.657973 0.645029 1.000000 0.388410 0.462004 0.840950 0.515472;
69. % 0.867237 -0.296135 0.603983 -0.841113 0.804883 0.388410 1.000000 0.766525 0.492746 0.870349 ;
70. % 0.865734 -0.132362 0.551794 -0.779749 0.881694 0.462004 0.766525 1.000000 0.553639 0.797180;
71. % 0.646887 0.265592 0.628441 -0.732869 0.735856 0.840950 0.492746 0.553639 1.000000 0.577822;
72. % 0.815381 -0.161195 0.757975 -0.839053 0.829102 0.515472 0.870349 0.797180 0.577822 1.000000];
73.
74. % [ 1.000000 0.843782 0.865288 0.164320 0.834586;
75. % 0.843782 1.000000 0.835603 0.332076 0.906777;
76. % 0.865288 0.835603 1.000000 0.017336 0.860707;
77. % 0.164320 0.332076 0.017336 1.000000 0.356630;
78. % 0.834586 0.906777 0.860707 0.356630 1.000000];
79. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
80. % 0 1 2 3 4
81. %0 1.000000 0.807255 0.903264 0.097237 0.881655
82. %1 0.807255 1.000000 0.882653 0.424451 0.915458
83. %2 0.903264 0.882653 1.000000 0.120237 0.926073
84. %3 0.097237 0.424451 0.120237 1.000000 0.316853
85. %4 0.881655 0.915458 0.926073 0.316853 1.000000
86. % 0 1 2 3 4
87. %0 1.000000 0.856590 0.886241 0.150745 0.850857
88. %1 0.856590 1.000000 0.850237 0.313821 0.917834
89. %2 0.886241 0.850237 1.000000 0.028393 0.865776
90. %3 0.150745 0.313821 0.028393 1.000000 0.363710
91. %4 0.850857 0.917834 0.865776 0.363710 1.000000
92. % задаем размер выходного временного ряда
93. n_out = 365;
94. % задаем вид распределения (нормальное)
95. %distribution = 'normal';
96. %вызываем функцию
97. %time_series(n_out, distribution, sigma);
98. % после вызова функции данные лежат в файле time_series_data.dat в той же
99. % папке что и функция
100. % % % данные из файла можно прочитать следующим образом
101. %filename = strcat('time_series_data', '.dat');
102. %TS = dlmread(filename);
103.
104. % %ex2
105. % % задаем мат.ожидание
106. % mu = [1,2];
107. %вызываем функцию
108. %time_series(n_out, distribution, sigma, mu);
109. %
110. % %ex3
111. % % задаем корреляционную матрицу
112. % sigma = [1 0.4 0.3;
113. % 0.4 1 0.5;
114. % 0.3 0.5 1];
115. % % задаем размер выходного временного ряда
116. % n_out = 100;
117. % % задаем вид распределения (нормальное)
118. distribution = 'student';
119. % %вызываем функцию
120. time_series(n_iter,n_out, distribution, sigma);
121. %
122. % % задаем число степеней свободы для распределения стЬюдента
123. % df = 5;
124. % %вызываем функцию
125. % time_series(n_out, distribution, sigma, df);
% Функция строит синтетические данные по заданной матрице корреляции
% Функция принимает на вход параметры
% n_iter -- количество итераций в цикле
% n_out -- длина выходного массива
% distribution -- тип распределения, принимает значения
% 'normal' -- нормальное распределение
% 'student' -- распределение Стьюдента
% sigma -- корреляционная матрица
% par -- дополнительный (необязательный) параметр
% для нормального распределения - мат.ожидание (единичный вектор
% по умолчанию)
% для стьюдента - число степеней свободы (2 по умолчанию)
function time_series(n_iter, n_out, distribution, sigma, par)
narg = nargin;
if (narg < 4)
error('Вы ввели не все параметры функции (n_out, distribution, sigma)')
end
for iter = 1:n_iter
if (strcmp(distribution, 'student'))
if (narg == 4)
par = 2;
end
TS = mvtrnd(sigma, par, n_out);
else
if (narg == 4)
sz = size(sigma, 1);
par = ones(sz, 1);
end
TS = mvnrnd(par, sigma, n_out);
end
% запись в файл
filename = sprintf('time_series_data_%u_', iter);
filename = strcat(filename, '.dat');
dlmwrite(filename, TS, 'delimiter', ',', 'precision', '%.6e');
end
end
3. Построения графов рынка и эксперименты(PYTHON)
def cortest(n,koef):
data = pd.read_csv("C:\\Users\\Слава\\Documents\\MATLAB\\time_series_data_"+str(n)+"_.dat", sep=",", header=None) #Считали
corrmat = data.corr()#матрица пирсона
#Граф Пирсона
a=corrmat
# mat_1_0=a.copy(deep=True)
# for c in range(len(a[1])):
# for b in range(len(a[1])):
# if a[c][b]>0.9:
# mat_1_0[c][b]=1
# else:
# mat_1_0[c][b]=0
#print(mat_1_0)
#Матрица Спирмена
testV=koef#Спирман
testV3=2*math.sin(math.pi/6*testV)#Пирсон
testV4=2/math.pi*(math.asin(testV3))#Кендал
mat_stirl=corrmat.copy(deep=True)
for c in range(len(a[1])):
for b in range(len(a[1])):
mat_stirl[c][b]=scipy.stats.pearsonr(data[c],data[b])[0]
#print(mat_stirl)
#Граф Спирмена
mat_1_02=mat_stirl.copy(deep=True)
for c in range(len(a[1])):
for b in range(len(a[1])):
if a[c][b]>koef:
mat_1_02[c][b]=1
else:
mat_1_02[c][b]=0
#print(mat_1_02)
#Матрица Кэндалла
mat_kend=corrmat.copy(deep=True)
for c in range(len(a[1])):
for b in range(len(a[1])):
mat_kend[c][b]=scipy.stats.kendalltau(data[c],data[b])[0]
#print(mat_kend)
#Граф Кенделла
mat_1_03=mat_kend.copy(deep=True)
for c in range(len(a[1])):
for b in range(len(a[1])):
if a[c][b]>testV4:
mat_1_03[c][b]=1
else:
mat_1_03[c][b]=0
#print(mat_1_03)
#Сравнение корреляций
e=mat_1_02-mat_1_03
#print(e)
n=0
m=0
for c in range(len(a[1])):
for b in range(len(a[1])):
if e[c][b]==0:
m=m+1
else:
n=n+1
m=m-len(a)
rez=m/(n+m)
print(rez)
return(rez)
def corFIND_OPT(n,koef):
data = pd.read_csv("C:\\Users\\Слава\\Documents\\MATLAB\\time_series_data_"+str(n)+"_.dat", sep=",", header=None) #Считали
corrmat = data.corr()#матрица пирсона
#Граф Пирсона
a=corrmat
top_rez=0
top_num=0
mass=[]
# mat_1_0=a.copy(deep=True)
# for c in range(len(a[1])):
# for b in range(len(a[1])):
# if a[c][b]>0.9:
# mat_1_0[c][b]=1
# else:
# mat_1_0[c][b]=0
#print(mat_1_0)
for i in range(100):
#Матрица Спирмена
mat_stirl=corrmat.copy(deep=True)
for c in range(len(a[1])):
for b in range(len(a[1])):
mat_stirl[c][b]=scipy.stats.pearsonr(data[c],data[b])[0]
#print(mat_stirl)
#Граф Спирмена
mat_1_02=mat_stirl.copy(deep=True)
for c in range(len(a[1])):
for b in range(len(a[1])):
if mat_stirl[c][b]>koef:
mat_1_02[c][b]=1
else:
mat_1_02[c][b]=0
#print(mat_1_02)
#Матрица Кэндалла
mat_kend=corrmat.copy(deep=True)
for c in range(len(a[1])):
for b in range(len(a[1])):
mat_kend[c][b]=scipy.stats.kendalltau(data[c],data[b])[0]
#print(mat_kend)
#Граф Кенделла
mat_1_03=mat_kend.copy(deep=True)
for c in range(len(a[1])):
for b in range(len(a[1])):
if mat_kend[c][b]>(i/100):
mat_1_03[c][b]=1
else:
mat_1_03[c][b]=0
#print(mat_1_03)
#Сравнение корреляций
#print(mat_stirl,mat_kend)
e=mat_1_02-mat_1_03
#print(e)
n=0
m=0
for c in range(len(a[1])):
for b in range(len(a[1])):
if e[c][b]==0:
m=m+1
else:
n=n+1
m=m-len(a)
rez=m/(n+m)
print(i,rez)
mass.append(rez)
if rez>top_rez:
top_rez=rez
top_num=(i/100)
return(top_rez,top_num,mass)
def corOPTIMIZE(n,koef):
data = pd.read_csv("C:\\Users\\Слава\\Documents\\MATLAB\\time_series_data_"+str(n)+"_.dat", sep=",", header=None) #Считали
corrmat = data.corr()#матрица пирсона
#Граф Пирсона
a=corrmat
top_rez=0
top_num1=0
top_num=0
# mat_1_0=a.copy(deep=True)
# for c in range(len(a[1])):
# for b in range(len(a[1])):
# if a[c][b]>0.9:
# mat_1_0[c][b]=1
# else:
# mat_1_0[c][b]=0
#print(mat_1_0)
for i in range(10):
#Матрица Спирмена
mat_stirl=corrmat.copy(deep=True)
for c in range(len(a[1])):
for b in range(len(a[1])):
mat_stirl[c][b]=scipy.stats.pearsonr(data[c],data[b])[0]
#print(mat_stirl)
#Граф Спирмена
mat_1_02=mat_stirl.copy(deep=True)
for c in range(len(a[1])):
for b in range(len(a[1])):
if mat_stirl[c][b]>koef:
mat_1_02[c][b]=1
else:
mat_1_02[c][b]=0
#print(mat_1_02)
#Матрица Кэндалла
mat_kend=corrmat.copy(deep=True)
for c in range(len(a[1])):
for b in range(len(a[1])):
mat_kend[c][b]=scipy.stats.kendalltau(data[c],data[b])[0]
#print(mat_kend)
#Граф Кенделла
mat_1_03=mat_kend.copy(deep=True)
for c in range(len(a[1])):
for b in range(len(a[1])):
if mat_kend[c][b]>i/10:
mat_1_03[c][b]=1
else:
mat_1_03[c][b]=0
#print(mat_1_03)
#Сравнение корреляций
#print(mat_stirl,mat_kend)
e=mat_1_02-mat_1_03
#print(e)
n=0
m=0
for c in range(len(a[1])):
for b in range(len(a[1])):
if e[c][b]==0:
m=m+1
else:
n=n+1
m=m-len(a)
rez=m/(n+m)
print(i/10,rez)
if rez>top_rez:
top_rez=rez
top_num1=(i/10)
########################################################################## условие вверх-вниз
for i in range(1):
mat_stirl=corrmat.copy(deep=True)
for c in range(len(a[1])):
for b in range(len(a[1])):
mat_stirl[c][b]=scipy.stats.pearsonr(data[c],data[b])[0]
#print(mat_stirl)
#Граф Спирмена
mat_1_02=mat_stirl.copy(deep=True)
for c in range(len(a[1])):
for b in range(len(a[1])):
if mat_stirl[c][b]>koef:
mat_1_02[c][b]=1
else:
mat_1_02[c][b]=0
#print(mat_1_02)
#Матрица Кэндалла
mat_kend=corrmat.copy(deep=True)
for c in range(len(a[1])):
for b in range(len(a[1])):
mat_kend[c][b]=scipy.stats.kendalltau(data[c],data[b])[0]
#print(mat_kend)
#Граф Кенделла
mat_1_03=mat_kend.copy(deep=True)
for c in range(len(a[1])):
for b in range(len(a[1])):
if mat_kend[c][b]>i/100+top_num1+0.01:
mat_1_03[c][b]=1
else:
mat_1_03[c][b]=0
#print(mat_1_03)
#Сравнение корреляций
#print(mat_stirl,mat_kend)
e=mat_1_02-mat_1_03
#print(e)
n=0
m=0
for c in range(len(a[1])):
for b in range(len(a[1])):
if e[c][b]==0:
m=m+1
else:
n=n+1
m=m-len(a)
rez=m/(n+m)
#print(i/100+top_num1+0.01,rez)
if rez<top_rez:
top_num1=top_num1-0.1
###########################
for i in range(10):
#Матрица Спирмена
mat_stirl=corrmat.copy(deep=True)
for c in range(len(a[1])):
for b in range(len(a[1])):
mat_stirl[c][b]=scipy.stats.pearsonr(data[c],data[b])[0]
#print(mat_stirl)
#Граф Спирмена
mat_1_02=mat_stirl.copy(deep=True)
for c in range(len(a[1])):
for b in range(len(a[1])):
if mat_stirl[c][b]>koef:
mat_1_02[c][b]=1
else:
mat_1_02[c][b]=0
#print(mat_1_02)
#Матрица Кэндалла
mat_kend=corrmat.copy(deep=True)
for c in range(len(a[1])):
for b in range(len(a[1])):
mat_kend[c][b]=scipy.stats.kendalltau(data[c],data[b])[0]
#print(mat_kend)
#Граф Кенделла
mat_1_03=mat_kend.copy(deep=True)
for c in range(len(a[1])):
for b in range(len(a[1])):
if mat_kend[c][b]>i/100+top_num1:
mat_1_03[c][b]=1
else:
mat_1_03[c][b]=0
#print(mat_1_03)
#Сравнение корреляций
#print(mat_stirl,mat_kend)
e=mat_1_02-mat_1_03
#print(e)
n=0
m=0
for c in range(len(a[1])):
for b in range(len(a[1])):
if e[c][b]==0:
m=m+1
else:
n=n+1
m=m-len(a)
rez=m/(n+m)
#print(i/100+top_num1,rez)
if rez>top_rez:
top_rez=rez
top_num=(i/100+top_num1)
if top_num==0:
top_num=top_num1+0.1
########################################
return(top_rez,top_num)
def corFIND_OPT_Cliq(n,koef):
data = pd.read_csv("C:\\Users\\Слава\\Documents\\MATLAB\\time_series_data_"+str(n)+"_.dat", sep=",", header=None) #Считали
corrmat = data.corr()#матрица пирсона
#Граф Пирсона
a=corrmat
top_rez=0
top_num=0
mass=[]
# mat_1_0=a.copy(deep=True)
# for c in range(len(a[1])):
# for b in range(len(a[1])):
# if a[c][b]>0.9:
# mat_1_0[c][b]=1
# else:
# mat_1_0[c][b]=0
#print(mat_1_0)
for i in range(100):
#Матрица Спирмена
G=nx.Graph()
G2=nx.Graph()
mat_stirl=corrmat.copy(deep=True)
for c in range(len(a[1])):
for b in range(len(a[1])):
mat_stirl[c][b]=scipy.stats.pearsonr(data[c],data[b])[0]
#print(mat_stirl)
#Граф Спирмена
mat_1_02=mat_stirl.copy(deep=True)
for c in range(len(a[1])):
for b in range(len(a[1])):
if mat_stirl[c][b]>koef:
mat_1_02[c][b]=1
G.add_edge(c,b)
else:
mat_1_02[c][b]=0
from networkx.algorithms.approximation import clique
S_cliq=(clique.max_clique(G))
#print(mat_1_02)
#Матрица Кэндалла
mat_kend=corrmat.copy(deep=True)
for c in range(len(a[1])):
for b in range(len(a[1])):
mat_kend[c][b]=scipy.stats.kendalltau(data[c],data[b])[0]
#print(mat_kend)
#Граф Кенделла
mat_1_03=mat_kend.copy(deep=True)
for c in range(len(a[1])):
for b in range(len(a[1])):
if mat_kend[c][b]>(i/100):
mat_1_03[c][b]=1
G2.add_edge(c,b)
else:
mat_1_03[c][b]=0
from networkx.algorithms.approximation import clique
K_cliq=(clique.max_clique(G2))
#print(mat_1_03)
#Сравнение корреляций
#print(mat_stirl,mat_kend
rez=1-abs((len(S_cliq)-len(K_cliq))/(max(len(S_cliq),len(K_cliq))))
print(i,rez)
mass.append(rez)
if rez>top_rez:
top_rez=rez
top_num=(i/100)
return(top_rez,top_num,mass)
def cortest_Cliq(n,koef):
data = pd.read_csv("C:\\Users\\Слава\\Documents\\MATLAB\\time_series_data_"+str(n)+"_.dat", sep=",", header=None) #Считали
corrmat = data.corr()#матрица пирсона
#Граф Пирсона
a=corrmat
top_rez=0
top_num=0
mass=[]
# mat_1_0=a.copy(deep=True)
# for c in range(len(a[1])):
# for b in range(len(a[1])):
# if a[c][b]>0.9:
# mat_1_0[c][b]=1
# else:
# mat_1_0[c][b]=0
#print(mat_1_0)
for i in range(1):
#Матрица Спирмена
G=nx.Graph()
G2=nx.Graph()
mat_stirl=corrmat.copy(deep=True)
for c in range(len(a[1])):
for b in range(len(a[1])):
mat_stirl[c][b]=scipy.stats.pearsonr(data[c],data[b])[0]
#print(mat_stirl)
#Граф Спирмена
mat_1_02=mat_stirl.copy(deep=True)
for c in range(len(a[1])):
for b in range(len(a[1])):
if mat_stirl[c][b]>koef:
mat_1_02[c][b]=1
G.add_edge(c,b)
else:
mat_1_02[c][b]=0
from networkx.algorithms.approximation import clique
S_cliq=(clique.max_clique(G))
#print(mat_1_02)
#Матрица Кэндалла
mat_kend=corrmat.copy(deep=True)
for c in range(len(a[1])):
for b in range(len(a[1])):
mat_kend[c][b]=scipy.stats.kendalltau(data[c],data[b])[0]