Статистика поэтического вкуса 2

Геннадий Маков
В соответствии с методикой оценки вкуса по корреляции оценок, выставленных  участниками "народного голосования" -
http://www.stihi.ru/2016/07/20/9199
были проанализированы результаты конкурса "Антиподы чувств" на Кубке Стихиры.
Проголосовали все участники конкурса и один гость.
Коэффициенты корреляции вкуса голосовавших ( в процентах) приведены в таблице рисунка.
Сделана также оценка консолидированного вкуса участников.
В качестве этой оценки взята Сумма_коэффициентов_корреляции - 100.
========
оценка консолидированного вкуса #, и сумма баллов

а  1.Юрий Рехтер  # 564   баллы 147
б  2.Орловаи  # 103   баллы 146
в  3.Ольга Альтовская  # 604   баллы 158
г  4.Маргарита Бахарева  # 494   баллы 152
д  5.Маштаков Олимп  #-115   баллы 125
е  6.Маштаков Идиллия         баллы 137
ж  7.Игорь Савельев 4  # 74   баллы 150
з  8.Нина Орлова 22  #-108   баллы 134
и  9.Валери Сун  # 266   баллы 131
й  10 Нестор Иванофф  # 286   баллы 129
к  11.Лора Круг  # 609   баллы 156
л  12.Другая Людмила  # 437   баллы 153
м  13.Гольгертс  # 406   баллы 150
н  14.Нина Серова  # 114   баллы 137
о  15.Аарон Алеппо  # 504   баллы 151
п  16.Игорь Миронов  # 350   баллы 156
р  17.Юлия Александровна Михайлова  #-24   баллы 173
с  18.Нина Находка  # 535   баллы 157
т  19.Алена Шарифова  # 80   баллы 149
у  20.Ольга Касинец  # 235   баллы 153
ф  21.Евгений Аксельрод  # 476   баллы 160
х  22.Борис Поляков  # 395   баллы 175
ц  23.Тимофей Бондаренко  # 577   баллы 183
ч  24. Тамара Гаврилова  # 260   баллы 156
ш  25. Джафар Кадыров  #-390   баллы 0

среднее конс 270    средний балл 144.72
 
Все участвовавшие в голосовании могут  найти по таблице своих вкусовых союзников и антиподов.

  ГРУППИРОВКА УЧАСТНИКОВ ГОЛОСОВАНИЯ ПО ИХ ВКУСОВЫМ ПРИСТРАСТИЯМ

  Участники голосования, в соответствии со статистикой своих оценок, могут быть разделены на группы сходного вкуса.
  Был использован следующий алгоритм такого разделения.
   
  Из всех участников находятся двое, имеющие наиболее высокий коэффициент корреляции выставленных оценок. К ним добавляется третий, при условии, что он не находится в антикорреляции ни к одному из имеющихся (вначале - двух) участников группы и имеет средний коэффициент корреляции со всеми участниками не менее чем R.
  Если такой участник нашёлся, то он добавляется к группе, и процесс продолжается.

  Когда все участники, консолидированные по уровню R, добавлены, то группа обособляется, и процесс поиска другой консолидированной группы продолжается на множестве оставшихся участников.

  Когда новые группы, числом более двух, не образуются, то процесс заканчивается.

  Ясно, что чем больше уровень R, тем малочисленнее, но зато и тем консолидированнее по вкусу оказываются группы. Результаты приведены ниже.

R=10%
группа 1  ( 3) (23) ( 1) ( 4) ( 9) (11) (12) (13) (15) (18) (21) (22) (24)
группа 2  ( 2) (10) ( 5) ( 7) (17)
группа 3  (14) (16) ( 8)

R=30%
группа 1  ( 3) (23) ( 1) ( 4) ( 9) (11) (12) (13) (15) (18) (21) (24)
группа 2  ( 2) (10) (20)

R=50%
группа 1  ( 3) (23) ( 1) ( 4) (11) (15) (18)

R=60%
группа 1  ( 3) (23) (18)

  Видно, что имеются три разных группы консолидированного вкуса, из которых наиболее многочисленна и консолидирована внутри себя первая группа. В ней имеется ядро из трёх наиболее консолидированных между собой участников.

   ДРУГИЕ ВОЗМОЖНОСТИ СОЕДИНЕНИЯ В ГРУППЫ

  Нужно отметить, что "антагонисты" могут помешать созданию группы. Например, если за начальную пару первой группы мы возьмём лидеров второй группы, то получим первую группу в таком составе:
R=10%
группа 1  ( 2) (10) ( 1) ( 3) ( 4) ( 9) (11) (20)

участники (18) и (23), являющиеся антагонистами пары ( 2) и (10), перешли в группу 2, а вот участники ( 1), ( 4), ( 9) и (11) в наиболее многочисленной группе остались:

группа 2  (18) (23) (12) (13) (15) (19) (22)
группа 3  ( 7) ( 8) ( 5) (14)
группа 4  (16) (24) (21)

В статистике, как и в людском сообществе - многое зависит от того, кто организует группу - от того, что первым в неё вошёл. 
_______________
Приложение
 Программа для Турбо Бейсика 

'CORRM.BAS
'в строке оценки разных стихов одним из экспертов
DIM X(100,50) : DIM R(50,50) : DIM U$(50) : DIM CON(50) : DIM MEM(10,50)
FOR I=1 TO 100 : FOR J=1 TO 50 : X(I,J)=99 : NEXT J : NEXT I
FOR I=1 TO 100 : X(I,0)=0 : NEXT I
N=0 : M=0 : X$="K"
OPEN "X"+X$+".TXT" FOR INPUT AS #1 'файл входных данных
10 LINE INPUT #1,S$
  IF LEFT$(S$,3)=",,," THEN SWAP N,M : GOTO 20
  IF S$="" THEN 10
  IF LEFT$(S$,1)=" " THEN : ELSE U$(N+1)=S$ : GOTO 10

  N=N+1 : M1=0
12  I=INSTR(S$," ")
  IF I=1 THEN S$=MID$(S$,2) : IF LEN(S$)>0 THEN 12
  IF S$="" THEN 10
  M1=M1+1 : IF M1>M THEN M=M1
  B=VAL(S$) : X(M1,N)=B : X(M1,0)=X(M1,0)+B
  I=INSTR(S$," ") : IF I=0 THEN 10
  S$=MID$(S$,I) : GOTO 12

20 CLOSE #1
  OPEN "XT"+X$+".TXT" FOR OUTPUT AS #2 'файл для вывода статистики
  PRINT #2,"N=";N;"   M=";M
  FOR I=1 TO N : FOR J=1 TO M+1
   B$=STR$(X(I,J)) : S$=LEFT$(B$,4)
   IF LEN(S$)=2 THEN S$=" "+S$
   IF J<M+1 THEN
     PRINT #2,S$;
    ELSE : IF X(I,J)=99 THEN PRINT #2," =";X(I,0); ELSE PRINT #2,S$;
   END IF
  NEXT J : PRINT #2,"" : NEXT I
  PRINT N;"   member";M
  'CLOSE #2 : STOP
 FOR J=1 TO M : PRINT #2,FNW$(J)+" "; : PRINT #2,U$(J) : NEXT J

  PRINT #2,"======="
FOR M1=1 TO M : FOR M2=1 TO M
  I=0 : X1S=0 : X2S=0 : N1=0
30 I=I+1 : IF I>N THEN 32
  IF X(I,M1)*X(I,M2)=0 THEN 30
  N1=N1+1 : X1S=X1S+X(I,M1) : X2S=X2S+X(I,M2) : GOTO 30
32 IF N1=0 THEN B=0 : GOTO 35
  X1S=X1S/N1 : X2S=X2S/N1 : S=0 : S1=0 : S2=0 : I=0
33 I=I+1 : IF I>N THEN 34
  IF X(I,M1)*X(I,M2)=0 THEN 33
  DX1=X(I,M1)-X1S : DX2=X(I,M2)-X2S
  S=S+DX1*DX2 : S1=S1+DX1*DX1 : S2=S2+DX2*DX2 : GOTO 33
 
34 B=S/(SQR(S1)*SQR(S2)) 
35 R(M1,M2)=B
  NEXT M2 : NEXT M1

  PRINT #2,"M=";M : PRINT #2,"    ";
  FOR I=1 TO M : PRINT #2,FNW$(I); : NEXT I : PRINT #2,"  конс"
  FOR I=1 TO M : Y=0 : PRINT #2,FNW$(I); : FOR J=1 TO M
   A%=CEIL(R(I,J)*100) : Y=Y+A%
   B$=STR$(A%) : S$=LEFT$(B$,4)
   SELECT CASE LEN(S$)
    CASE 1 : S$="   "+S$
    CASE 2 : S$="  "+S$
    CASE 3 : S$=" "+S$
   END SELECT
   PRINT #2,S$;
'  NEXT J : PRINT #2," >";Y-100 : NEXT I
  NEXT J : PRINT #2," >";Y-100 : CON(I)=CEIL(Y-100.5) : NEXT I
  PRINT #2,",,,"
  PRINT #2, : PRINT #2,"оценка консолидированного вкуса и сумма баллов"
  B=0 : B1=0 : FOR I=1 TO M : PRINT #2,FNW$(I)+"  ";U$(I);"  #";CON(I);"  баллы";CEIL(X(I,0))
  B1=B1+X(I,0) : B=B+CON(I) : NEXT I
  PRINT #2,"среднее конс";CEIL(B/M);"+ число_не_голосовавших*100/M   средний балл";B1/M
  CLOSE #2 ': STOP

'============================ ГРУППИРОВКА

100 RR=.1 ' для первого просчёта уровень консолидации = 10%
  OPEN "MEM.TXT" FOR OUTPUT AS #3 'файл с группировкой
110 FOR I=0 TO 10 : FOR J=0 TO 50 : MEM(I,J)=0 : NEXT J : NEXT I

120 ZM=0 : FOR I=1 TO 10 : ZM=ZM+(MEM(I,0)) : NEXT I
  PRINT "LM=";M-ZM;"  r=";CEIL(RR*100-.5) : PRINT #3,"LM=";M-ZM;"  r=";CEIL(RR*100-.5)
  INPUT S$ : IF S$="e" THEN 150 'финиш
  FOR J=0 TO 50 : MEM(0,J)=0 : NEXT J
   IF S$="" THEN 'поиск пары
    IF FNGG(0)>0 THEN GOTO 130 : ELSE PRINT "couple not found" : GOTO 120
   END IF
   IF LEFT$(S$,1)="r" THEN RR=VAL(MID$(S$,2))/100 : GOTO 110 'другой уровень R
   K=INSTR(S$," ") : IF K>1 THEN 'номера пары не ищутся, а задаются
     I=VAL(S$) : J=VAL(MID$(S$,2)) : IF I=J THEN PRINT "I=J" : GOTO 120
     IF FNL(I)+FNL(J)>0 THEN PRINT "couple not found" : GOTO 120
     IF R(I,J)<RR THEN PRINT "couple is wrong  K<r" : GOTO 120
     MEM(0,0)=2 : MEM(0,1)=I : MEM(0,2)=J : GOTO 130
   END IF
  GOTO 120 

130 FOR I=1 TO M
    IF FNL(I)=0 THEN
  print i
      GF=1 : KSUM=0 : FOR J=1 TO MEM(0,0)
      K=R(I,MEM(0,J)) : KSUM=KSUM+K : IF K<0 THEN GF=0
      NEXT J : K=GF*KSUM/MEM(0,0)
      IF K>RR THEN MEM(0,0)=MEM(0,0)+1 : MEM(0,MEM(0,0))=I : GOTO 130
    END IF
    NEXT I : IF MEM(0,0)=2 THEN PRINT "association not created" : GOTO 120
    I=0
132 I=I+1 : IF I>10 THEN PRINT "MEM_associoations > 10" : GOTO 120
    IF MEM(I,0)>0 THEN 132
    FOR J=0 TO MEM(0,0) : MEM(I,J)=MEM(0,J) : NEXT J
    PRINT "association is created" : GOTO 120


150 PRINT #3,"образованы группы" : FOR I=0 TO 10 : K1=MEM(I,0)
    IF K1>0 THEN
      PRINT #3,"группа";I; : FOR J=1 TO K1
      PRINT #3," "+FNW$(MEM(I,J));
      NEXT J : PRINT #3, 
    END IF : NEXT I : CLOSE #3 : STOP

'=========
DEF FNL(N) 'свободен ли N (1 если входит в группу)
LOCAL I,J,K
  K=N : FOR I=0 TO 10
   'IF MEM(I,0)=0 THEN FNL=0 : EXIT DEF
   FOR J=1 TO MEM(I,0) : IF MEM(I,J)=K THEN FNL=1 : EXIT DEF
   NEXT J : NEXT I : FNL=0
END DEF
'=========
DEF FNGG(N) 'создание пары с МАХ корреляцией, большей RR
LOCAL I,J,I1,J1,K,K1
  K=0 : FOR I=1 TO M : FOR J=1 TO M
  IF FNL(I)+FNL(J)=0 THEN
    K1=R(I,J) : IF K1=1 THEN K1=0
    IF K1>RR AND K1>K THEN K=K1 : I1=I: J1=J
  END IF
    NEXT J : NEXT I
  IF K>0 THEN MEM(0,0)=2 : MEM(0,1)=I1 : MEM(0,2)=J1
  FNGG=K
END DEF
'=======
DEF FNW$(I)
LOCAL A$
  A$=STR$(I) : IF LEN(A$)>2 THEN A$=MID$(A$,2)
  FNW$="("+A$+")"
END DEF
'______________________________________
Исходные данные для программы находились в текстовом файле в следующем виде:

«конкурс Антиподы чувств. Голосование» (Кубок Стихиры)

1.Юрий Рехтер
 0 8 9 5 6 8 5 4 5 4 6 6 6 4 7 8 10 9 7 6 9 7 10 9
2.Орловаи
 4 0 4 4 4 4 4 4 4 6 4 4 4 4 4 8 10 4 4 4 5 4 4 4
3.Ольга Альтовская
 8 9 0 7 5 5 9 8 5 5 9 7 8 7 10 9 9 9 9 8 9 10 9 8
................................................   
25. Джафар Кадыров
 6 5 7 8 9 6 4 6 5 10 4 7 7 5 5 5 6 6 5 9 6 2 7 7
,,,