Вычислить расстояния подстрок между последовательностями

Мой набор данных (первая строка = заголовок) выглядит следующим образом:

ID;Activity 1;Activity 2; ... ;Activity 20;
Company_X;A1A3T1D1O1R1R8;A1A3T2O1R2;...;A1A3T6D2O1O2R2
Company_Y;A1A3T1O1R1;A1A3T2O1R2;...;A1A3T11O1O3R5
Company Z;A1A3T1D8O1R1R8;A1A3T2O1R2;...;A1A3T6D2O1R2

где для каждого действия каждая пара (одна буква + одна цифра) представляет часть последовательности. A1=актер1, A3=актор3, O1=объект1. Я пытаюсь вычислить разницу между деятельностью компаний. Например, активность1 компании_x должна иметь разницу, например, 2 с активностью1 компании_y, поскольку они имеют общие A1A3T1O1R1, но не D1 и R8.

Могут ли какие-либо пакеты в TraMineR сделать это? Что означает сравнение в каждом событии предопределенного количества символов?

Большое спасибо за Вашу помощь


person Thomas    schedule 15.06.2015    source источник
comment
Я не могу понять, что вы хотите сделать. Какой у тебя алфавит? Что такое строка A1A3T6D2O1O2R2? Это последовательность или элемент алфавита? В последнем случае является ли это состоянием или событием, или, другими словами, передает ли позиция в последовательности информацию о времени?   -  person Gilbert    schedule 15.06.2015
comment
Спасибо за ваш ответ, Гилберт. Вы правы, больше объяснений не помешало бы. Каждая пара (одна буква + одна цифра) представляет собой объект последовательности. A1=актер1, A3=актор3, O1=объект1. Я пытаюсь вычислить разницу между деятельностью компаний. Например, активность1 компании_x должна иметь разницу, например, 2 с активностью1 компании_y, поскольку они имеют общие A1A3T1O1R1, но не D1 и R8. Затем комбинация пар представляет собой последовательность. Надеюсь, стало понятнее   -  person Thomas    schedule 17.06.2015
comment
Вы должны отредактировать вопрос, чтобы прояснить это и позволить мне удалить свой голос против.   -  person Gilbert    schedule 18.06.2015


Ответы (1)


Насколько я понимаю, каждую строку (активность), например A1A3T6D2O1O2R2, следует рассматривать как последовательность пар, и вы хотите сравнить такие последовательности.

Функция seqdef TraMineR может считывать последовательности в строковой форме. Однако, когда каждый элемент определяется более чем одним символом, для этого необходимо ввести разделитель (например, A1-A3-T6). Затем, чтобы соединить ваши последовательности с названиями компаний, вам также может понадобиться организовать свои данные в форме таблицы с каждой последовательностью (деятельностью) в отдельной строке, что-то вроде

ID         Activity
company_x  A1-A3-T6-D2-O1-O2-R2
company_y  A1-A3-T1-O1-R1
...

Затем вы можете вычислить различия, используя меры, применимые к последовательностям различной длины. Например, оптимальное соответствие (OM) — это минимальная стоимость преобразования одной последовательности в другую с учетом затрат на вставки и замены. Это должно дать вам то, что вы ожидаете. В зависимости от стоимости замещения расстояние между A1A3T6D2O1O2R2 и A1A3T6D2O1R2 может отличаться от расстояния между A1A3T6D2O1O2R2 и A3T4.

person Gilbert    schedule 18.06.2015
comment
Это именно то, что мне было нужно, большое спасибо. Требуется таблица - person Thomas; 18.06.2015