Два горба

Слабые места соционики, научный статус соционики

Два горба

Сообщение kanonik » Вс дек 22, 2019 10:09 pm

Не знаю, насколько правильно всё у Вас подсчитано, но в реальных опросниках в любом случае есть нюансы, кардинально отличающие их вопросы от вашего примера.
1) Степеней свободы в ответах больше (не 2, а 5 - и это в два раза увеличивает разрешающую силу)
2) 300 вопросов надо делить не на 16, а на 8 - потому что ваш модельный вопрос работает сразу на два типа (на одном конце - с помощью ответов "да", на другом - с помощью ответов "нет"). Итого опросник на 320 вопросов дает уже 40 диагностических вопросов (той же статистики, что и ваш модельный) для каждого целевого типа из 16-ти.
3) Наконец, Ваш модельный вопрос с его вероятностью ответа "да или скорее да" = 70%, годится для опросников только в том случае, если это вопрос на некую дихотомию, то есть если он примерно делит все типы поровну, половина отвечает 70%, а другая половина 30%. Для случая же, когда один тип отвечает 70, другой 30%, а все прочие 14 в интервале, тяготея к 50% - такой вопрос действительно не канает по своей разрешающей способности. В его типном профиле сигма (стандартное отклонение 16 чисел профиля) получится в интервале от 0,25 до 0,30, а это очень мало. Работоспособны вопросы с сигмой типного профиля 0,4 и выше (бывают даже с сигмой 0,7-0,75). А что это значит? Если сигма профиля 0,4, и вопрос заточен на какой-то определенный тип (с примерно равномерным распределением вероятностей прочих типов), то это значит, что главный целевой тип будет в профиле вопроса отличаться от среднего нуля на 0,8 - 0,9 стандартного отклонения. А это для вероятности ответить "скорее да" дает не 0,70, а 0,80. Совсем другой коленкор. А если в типном профиле вопроса целевой тип имеет значение = 1,0 стандартного отклонения выше нуля или еще выше, то вероятность ответить да или "скорее да" для целевого типа будет уже 0,85 и выше.
Среднее значение сигмы типного профиля диагностических вопросов анкеты обычно равно 0,42 -0,44. Возьмем 0,43. Это значит, что в среднем это либо вопросы на дихотомии, где почти ровно половина типов отвечает "да" с вероятностью 68%, а другая половина - 32%, либо же это вопросы на целевой тип (с непрерывным распределением для вероятности ответов всех прочих типов), но в этом случае вероятность ответа "да" для целевого типа составляет куда больше, чем 0,70. Реально - 0,80-0,84. (на другом конце при этом тоже один тип с вероятностью 0,16 - 0,20).

Короче, вопрос из рассмотренного вами примера реально имеет малую разрешающую силу, недостаточную для массового использования в опросниках. Даже с учетом того, что его эффект будет выше вами рассчитанного хотя бы по причине 5 степеней свободы в ответах.

Вопросы с сигмой их типного профиля меньше 0,35 в опросниках в качестве диагностических не используются, ибо это бессмысленно (для непрерывного распределения вероятностей ответа "да" между 16 типами целевому, максимальному типу в этом граничном случае отвечает вероятность ответить "да" около 71%). Чтобы только на таких "рыхлых" вопросах построить анкету с достаточной итоговой надежностью, ее длина должна быть 1500 - 2000 вопросов. Это и без вашего моделирования известно.

Короче, рекомендую подсчитать все то же для модельного вопроса, где вероятность ответа "да" непрерывно распределена между типами в интервале от 0,2 до 0,8. Это будет более реальный пример весьма "средненьких" анкетных диагностических вопросов. Двадцать, а тем более 30-40 таких вопросов уже должны выводить целевой тип (например, ИЛЭ) на вполне достаточную итоговую вероятность.
=========
«Если тебя лишили обязанностей гражданина, исполняй обязанности человека». (Сенека)
kanonik
Старожил
Старожил
 
Сообщения: 4490
Зарегистрирован: Вс авг 07, 2011 7:10 pm
Медали: 4

Два горба

Сообщение _Wind_ » Вт дек 24, 2019 7:43 am

Согласен, делить нужно на 8

Но у вас анкета состоит из двух половинок
Во второй половинке вопросы повторяются
А значит их нельзя использовать в нашем расчёте

300 / 2 / 8 = 18
_Wind_
Участник
Участник
 
Сообщения: 173
Зарегистрирован: Пн ноя 25, 2019 5:58 pm

Два горба

Сообщение _Wind_ » Вт дек 24, 2019 9:27 am

15 * 2 = 30 вопросов

qqq.gif
qqq.gif (3.8 КБ) Просмотров: 1238

aaa.xls
(17.5 КБ) Скачиваний: 43


Интеграл Каноника 47%

Только 30% имеют точность > 80%
_Wind_
Участник
Участник
 
Сообщения: 173
Зарегистрирован: Пн ноя 25, 2019 5:58 pm

Два горба

Сообщение _Wind_ » Вт дек 24, 2019 9:34 am

15 * 1 = 15 вопросов
Соответствует эксперименту с которого началась данная тема. Там 13 было. Чуть поменьше

qqq.gif
qqq.gif (3.66 КБ) Просмотров: 1237

aaa.xls
(16 КБ) Скачиваний: 44


Интеграл Каноника 27%

Здесь точность ниже 70% для большинства Донов
_Wind_
Участник
Участник
 
Сообщения: 173
Зарегистрирован: Пн ноя 25, 2019 5:58 pm

Два горба

Сообщение kanonik » Вт дек 24, 2019 12:26 pm

Кто Вам сказал, что "во второй половинке вопросы повторяются"??? :shock: Это не верно.
И таки пересчитайте для 80%. Для 20 вопросов и для 40 вопросов. Даже мне любопытно.
=========
«Если тебя лишили обязанностей гражданина, исполняй обязанности человека». (Сенека)
kanonik
Старожил
Старожил
 
Сообщения: 4490
Зарегистрирован: Вс авг 07, 2011 7:10 pm
Медали: 4

Два горба

Сообщение _Wind_ » Вт дек 24, 2019 12:39 pm

Вы же там как-то по ним надежность измеряете, разве нет?
Ну не повторяются как есть, а сформулированы немного иначе
_Wind_
Участник
Участник
 
Сообщения: 173
Зарегистрирован: Пн ноя 25, 2019 5:58 pm

Два горба

Сообщение _Wind_ » Вт дек 24, 2019 12:55 pm

20 и 40 вопросов не могу

Могу только кратно 15
15, 30, 45
_Wind_
Участник
Участник
 
Сообщения: 173
Зарегистрирован: Пн ноя 25, 2019 5:58 pm

Два горба

Сообщение _Wind_ » Вт дек 24, 2019 1:14 pm

15 * 3 = 45 вопросов

Лесенка от 80 до 20%

qqq.gif
qqq.gif (3.62 КБ) Просмотров: 1202

aaa.xls
(19.5 КБ) Скачиваний: 43


Интеграл Каноника 91%
_Wind_
Участник
Участник
 
Сообщения: 173
Зарегистрирован: Пн ноя 25, 2019 5:58 pm

Два горба

Сообщение _Wind_ » Вт дек 24, 2019 1:21 pm

15 * 1 = 15 вопросов

Лесенка от 80 до 20%

qqq.gif
qqq.gif (3.37 КБ) Просмотров: 1200

aaa.xls
(17.5 КБ) Скачиваний: 45


Интеграл Каноника 59%
_Wind_
Участник
Участник
 
Сообщения: 173
Зарегистрирован: Пн ноя 25, 2019 5:58 pm

Два горба

Сообщение kanonik » Вт дек 24, 2019 1:44 pm

Ну, вот это похоже на правду.
если посчитаете для 30 вопросов, то получите как раз примерную точность реального короткого опросника SOLTI (30х8=240 вопросов)
=========
«Если тебя лишили обязанностей гражданина, исполняй обязанности человека». (Сенека)
kanonik
Старожил
Старожил
 
Сообщения: 4490
Зарегистрирован: Вс авг 07, 2011 7:10 pm
Медали: 4

Два горба

Сообщение _Wind_ » Вт дек 24, 2019 4:58 pm

15 * 2 = 30 вопросов

Лесенка от 80 до 20%

qqq.gif
qqq.gif (3.47 КБ) Просмотров: 1175

aaa.xls
(18 КБ) Скачиваний: 46


Интеграл 82%
_Wind_
Участник
Участник
 
Сообщения: 173
Зарегистрирован: Пн ноя 25, 2019 5:58 pm

Два горба

Сообщение kanonik » Вт дек 24, 2019 6:58 pm

_Wind_ писал(а):15 * 2 = 30 вопросов

Лесенка от 80 до 20%

qqq.gif

aaa.xls


Интеграл 82%

Вот это похоже на правду. Опросник SOLTI примерно такую точность на выходе и дает.
=========
«Если тебя лишили обязанностей гражданина, исполняй обязанности человека». (Сенека)
kanonik
Старожил
Старожил
 
Сообщения: 4490
Зарегистрирован: Вс авг 07, 2011 7:10 pm
Медали: 4

Два горба

Сообщение _Wind_ » Ср дек 25, 2019 2:22 am

Нашёл способ посчитать теоретически :add14

15 * 1 = 15 вопросов

Лесенка от 80 до 20%

Желтый график - теоретический расчёт
Синий - генератор случайных чисел
Фиолетовый - количество Донов

qqq.gif
qqq.gif (3.63 КБ) Просмотров: 1128

aaa.xls
(24 КБ) Скачиваний: 43


Интеграл 63%

Код: Выделить всё
//---------------------------------------------------------------------------
double Super_Binom_15(double *v, ULONG N)
{
  double R = 0;
  //
  for (ULONG c=0; c<0x8000; c++)
  {
    ULONG Ones = 0;  { ULONG q = c;  while(q) { if (q&1) Ones++;  q >>= 1; } }
    //     
    if (Ones == N)
    {
      double vv = 1;
      //
      ULONG z = 1;
      for (ULONG i=0; i<15; i++)
      {
        if (c & z)
        {
          vv *= v[i];
        }
        else
        {
          vv *= 1 - v[i];
        }
        //
        z <<= 1;
      }
      //
      R += vv;
    }
  }
  //
  return R;
}
//---------------------------------------------------------------------------
double Super_Binom_30(double *v, ULONG N)
{
  double Base[15+1];  for (ULONG i=0; i<=15; i++) Base[i] = Super_Binom_15(v, i);
  //
  double R = 0;
  //
  for (ULONG a=0; a<=15; a++)
  for (ULONG b=0; b<=15; b++)
  if ((a+b) == N)
  {
    R += Base[a] * Base[b];
  }
  //
  return R;
}
//---------------------------------------------------------------------------
int main()
{       
  try
  {
    Log->printf(L"Start\n");
    //
    double   Don[15];    for (ULONG i=0; i<15; i++)   Don[i] = 0.8;
    double Other[30];    for (ULONG i=0; i<15; i++) Other[i] = 0.80-0.04*(i+1);   
    //
    for (ULONG i=0; i<15; i++) Log->printf(L"%.2f  ",   Don[i]);  Log->printf(L"\n");
    for (ULONG i=0; i<15; i++) Log->printf(L"%.2f  ", Other[i]);  Log->printf(L"\n\n");
    //
    for (ULONG N=0; N<=15; N++)
    {
      double A = Super_Binom_15(Don,   N);
      double B = Super_Binom_15(Other, N);
      double v = A / (A + B*15);
      //
     
      /*
      Log->printf(L"%f  ", A);
      Log->printf(L"%f  ", B);
      Log->printf(L"%f\n", v);
      */
      //
      Log->printf(L"%f\n", v*100);
    }
_Wind_
Участник
Участник
 
Сообщения: 173
Зарегистрирован: Пн ноя 25, 2019 5:58 pm

Два горба

Сообщение _Wind_ » Ср дек 25, 2019 2:35 am

Теоретический расчёт

15 * 2 = 30 вопросов

Лесенка от 80 до 20%

Желтый график - теоретический расчёт
Синий - генератор случайных чисел
Фиолетовый - количество Донов

qqq.gif
qqq.gif (3.79 КБ) Просмотров: 1125

aaa.xls
(19 КБ) Скачиваний: 44


Интеграл 87%

Тут теория с моделью сильней расходится
Думаю потому, что в модели я лесенки генерил случайным образом
А для теоретического расчёта использовал равномерное перемешивание
Получилась такая идеальная оценка сверху

Код:
Код: Выделить всё
//---------------------------------------------------------------------------
double Super_Binom_15(double *v, ULONG N)
{
  double R = 0;
  //
  for (ULONG c=0; c<0x8000; c++)
  {
    ULONG Ones = 0;  { ULONG q = c;  while(q) { if (q&1) Ones++;  q >>= 1; } }
    //     
    if (Ones == N)
    {
      double vv = 1;
      //
      ULONG z = 1;
      for (ULONG i=0; i<15; i++)
      {
        if (c & z)
        {
          vv *= v[i];
        }
        else
        {
          vv *= 1 - v[i];
        }
        //
        z <<= 1;
      }
      //
      R += vv;
    }
  }
  //
  return R;
}
//---------------------------------------------------------------------------
double Super_Binom_30(double *v, ULONG N)
{
  double Base[15+1];  for (ULONG i=0; i<=15; i++) Base[i] = Super_Binom_15(v, i);
  //
  double R = 0;
  //
  for (ULONG a=0; a<=15; a++)
  for (ULONG b=0; b<=15; b++)
  if ((a+b) == N)
  {
    R += Base[a] * Base[b];
  }
  //
  return R;
}
//---------------------------------------------------------------------------
int main()
{       
  try
  {
    Log->printf(L"Start\n");
    //
    double   Don[15];    for (ULONG i=0; i<15; i++)   Don[i] = 0.8;
    double Other[30];    for (ULONG i=0; i<15; i++) Other[i] = 0.80-0.04*(i+1);   
    //
    for (ULONG i=0; i<15; i++) Log->printf(L"%.2f  ",   Don[i]);  Log->printf(L"\n");
    for (ULONG i=0; i<15; i++) Log->printf(L"%.2f  ", Other[i]);  Log->printf(L"\n\n");
    //
    for (ULONG N=0; N<=30; N++)
    {
      double A = Super_Binom_30(Don,   N);
      double B = Super_Binom_30(Other, N);
      double v = A / (A + B*15);
      //
     
      /*
      Log->printf(L"%f  ", A);
      Log->printf(L"%f  ", B);
      Log->printf(L"%f\n", v);
      */
      //
      Log->printf(L"%f\n", v*100);
    }
Последний раз редактировалось _Wind_ Ср дек 25, 2019 6:15 am, всего редактировалось 4 раз(а).
_Wind_
Участник
Участник
 
Сообщения: 173
Зарегистрирован: Пн ноя 25, 2019 5:58 pm

Два горба

Сообщение _Wind_ » Ср дек 25, 2019 2:52 am

Как считал

Всё тот же Байес
Для Донов вероятность посчитать легко (у него веротяность Да всегда равна 80%)
Сложнее посчитать для остальных типов

Возьмём одну группу из 15 вопросов
Данный тип будет в каждой позиции лесенки за эти 15 вопросов
То есть для каждого типа вероятность набрать X ответов будет одинаковая

Считаем перебором
Все числа от 0 до 0x7fff (15 бит)
Берём числа где количество единиц равно X
Дальше перемножаем вероятности получить единицу или ноль из лесенки (биты найденного числа)
Складываем вероятности для всех найденных чисел
Получается искомая вероятность дать X ответов "Да"
Довольно быстро работает

Теперь сохраняем это распределение в виде таблицы в памяти (16 чисел: для X = 0..15)

Теперь нам нужно посчитать вероятность набрать X ответов для 2х групп по 15 вопросов
Она будет равна сумме вероятностей ситуаций, когда сумма ответов в первой группе и второй равна X
Просто перебираем все числа от 0 до 15 и перемножаем вероятности из заготовленной в памяти таблички

Код: Выделить всё
double R = 0;
//
for (ULONG a=0; a<=15; a++)
for (ULONG b=0; b<=15; b++)
if ((a+b) == N)
{
  R += Base[a] * Base[b];
}


Дальше по Байесу делим Донов на всех остальных + Донов
_Wind_
Участник
Участник
 
Сообщения: 173
Зарегистрирован: Пн ноя 25, 2019 5:58 pm

Пред.

Вернуться в Критика

Кто сейчас на конференции

Зарегистрированные пользователи: GoGo [Bot], Google [Bot], Neo, vadimr, Yandex 3.0 [Bot], Yandex [Bot]