Расстояние Хэмминга для сгруппированных результатов

Я работаю с набором данных, который содержит 40 разных участников, у каждого из которых 30 наблюдений. Поскольку я наблюдаю за поисковым поведением, я хочу рассчитать расстояние поиска для каждого субъекта за раунд (от 1 до 30).

Чтобы сравнить мои данные с текущей литературой, мне нужно использовать расстояние Хэмминга для описания расстояний поиска.

Переменная называется Inputs и представляет собой строковую переменную с двоичными входными значениями 0 или 1 и длиной 10. Например: Тип входных данных 1 Тема 1 Раунд 1: 0000011111 Тип входных данных 1 Тема 1 Раунд 2: 0000011110

Используя расстояние Левенштейна, мой подход был прост:

sort type_num Subject round_num
gen input_prev=Input[_n-1]
replace input_prev="0000000000" if round_num==1 //default starting position with 0000000000 to get search distance for first input in round 1

//Levensthein distance & clearing data (Levensthein instead of hamming distance)
ustrdist Input input_prev
rename strdist input_change

Сейчас я изо всех сил пытаюсь получить правильные команды Stata для расстояния Хэмминга. Кто-нибудь может помочь?


person fuechselein    schedule 09.05.2020    source источник
comment
Вы должны показать код, который вы пробовали.   -  person Nick Cox    schedule 09.05.2020


Ответы (1)


Это помогает? Насколько я понимаю, расстояние Хэмминга — это количество символов (битов), различающихся в соответствующих позициях строк одинаковой длины. Итак, учитывая две переменные и необходимость сравнения в каждом наблюдении, это просто цикл по символам.

clear
set obs 10
set seed 2803 

* sandbox 
quietly forval j = 1/2 {
    gen test`j' = ""
    forval k = 1/10 {
        replace test`j' = test`j' + strofreal(runiform() > (`j' * 0.3))
    }
}

set obs 12 
replace test1 = 10 * "1" in 11 
replace test2 = test1 in 11
replace test1 = test1[11] in 12 
replace test2 = 10 * "0" in 12 

* calculation
gen wanted = 0
quietly forval k = 1/10 {
    replace wanted = wanted + (substr(test1, `k', 1) != substr(test2, `k', 1))
}

list 

     +----------------------------------+
     |      test1        test2   wanted |
     |----------------------------------|
  1. | 1110001111   1001101000        7 |
  2. | 1111011011   1101011111        2 |
  3. | 1011001111   1110110111        5 |
  4. | 0000111011   1011010100        8 |
  5. | 1011011011   1111100110        6 |
     |----------------------------------|
  6. | 0011111100   0100011110        5 |
  7. | 0011011011   0011111010        2 |
  8. | 1010100011   1011000100        5 |
  9. | 1110011011   1010010100        5 |
 10. | 1001011111   0100111001        6 |
     |----------------------------------|
 11. | 1111111111   1111111111        0 |
 12. | 1111111111   0000000000       10 |
     +----------------------------------+
person Nick Cox    schedule 09.05.2020
comment
Спасибо! формула действительно работает и дает мне выходное расстояние, которое я искал. Можете ли вы сказать мне, соответствует ли этот расчет Хэммингу? Кроме того, я пытался использовать статическую команду «sdhamming». Я не понимаю, как использовать команды для получения результатов. Я только что получил сообщение об ошибке. - person fuechselein; 09.05.2020
comment
Я никогда не использовал эту команду: вас просят объяснить происхождение команд сообщества. Я не понимаю ваш первый вопрос, - person Nick Cox; 09.05.2020
comment
Я пытаюсь понять, можно ли назвать команду, которой вы поделились выше, расстоянием Хэмминга при описании метода в академической статье? - person fuechselein; 09.05.2020
comment
Если это то, что вы хотите, вам просто нужно поддерживающее определение в литературе или другое название. Если вы хотите что-то немного или совсем другое, скажите, что это такое. - person Nick Cox; 09.05.2020
comment
Хорошо, спасибо. Просто хочу убедиться, что то, чем вы поделились, можно использовать в качестве расстояния Хэмминга. В противном случае мне пришлось бы использовать официальную функцию sdhamming, предоставляемую STATA, с которой я борюсь. - person fuechselein; 09.05.2020
comment
Это не официально — что в Stata означает в комплекте с тем, что предоставляет компания — и команда, а не функция. Извините, но выяснение того, относится ли это к вашей структуре и как, это слишком большая просьба для меня. Почему бы не связаться с автором программы? - person Nick Cox; 09.05.2020
comment
ieeexplore.ieee.org/document/6772729 дает одноименную ссылку, хотя сумма абсолютной разницы как мера сходства еще старше. - person Nick Cox; 10.05.2020