Уменьшите интервал времени в анализе последовательности с помощью R - PullRequest
0 голосов
/ 17 января 2019

У меня есть последовательность, которая происходит в течение очень длительного периода времени. Я попробовал 8 различных алгоритмов, чтобы классифицировать мои последовательности (OM, CHi2, ...). Время идет от 1 до 123. У меня 110 индивидуальных и 8 событий.

Мои результаты не соответствуют ожиданиям. Во-первых, это очень трудно читать. Во-вторых, категория содержит слишком много представителей последовательности (group3). В-третьих, количество последовательностей на группу действительно не сбалансировано.

Это может быть связано с тем, что моя переменная времени имеет диапазон 123. Я искал статьи, у которых была проблема с слишком длинным диапазоном времени. Я прочитал в Sabherwal and Robey (1993) и в Shi and Prescott (2011), что вы можете стандартизировать"каждую последовательность путем деления числа преобразований, требуемых на длину более длинной последовательности". Как я могу сделать это в R?

Пожалуйста, найдите под описанием моих данных:

library(TraMineRextras)
head(seq.tse.data)
seq.tse.data <- structure(list(
ID = c(1L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 
     4L, 4L, 4L, 5L, 5L, 5L, 6L, 6L, 6L, 6L, 6L, 6L, 
     6L, 6L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L),
Year = c(2008L, 2010L, 2012L, 2007L, 2009L, 2010L, 2012L,
       2013L, 1996L, 1997L, 1999L, 2003L, 2006L, 2008L, 
       2012L, 2007L, 2007L, 2008L, 2003L, 2007L, 2007L,
       2009L, 2009L, 2011L, 2014L, 2016L, 2006L, 2009L, 
       2011L, 2013L, 2013L, 2015L, 2015L, 2016L), 
Event = c(5L, 4L, 5L, 3L, 1L, 5L, 5L, 5L, 3L,3L,3L,3L,3L,5L, 1L, 5L,
5L,5L,4L,5L, 5L, 5L, 5L, 5L, 5L,5L,5L,5L, 4L, 4L, 1L, 4L, 1L,5L)), 
      class = "data.frame", row.names = c(NA, -34L)
      )
    seq.sts <- TSE_to_STS(seq.tse.data,
                     id = 1, timestamp = 2, event = 3, 
                     stm =NULL, tmin = 1935, tmax = 2018,
                     firstState = "None")    
seq.SPS <- seqformat(seq.sts, 1:84, from = "STS", to = "SPS")
seq.obj <- seqdef(seq.SPS)
> head(seq.tse.data)
  ID Year Event
1  1 2008     5
2  2 2010     4
3  2 2012     5
4  3 2007     3
5  3 2009     1
6  3 2010     5
> head(seq.obj)
    Sequence                            
[1] (None,74)-(5,10)-1                  
[2] (None,76)-(4,2)-(5.4,6)-2           
[3] (None,73)-(3,2)-(3.1,1)-(5.3.1,8)-3 
[4] (None,62)-(3,12)-(5.3,4)-(5.3.1,6)-3
[5] (None,73)-(5,11)-1                  
[6] (None,69)-(4,4)-(5.4,11)-2  

> head(alphabet(seq.obj),10)
 [1] "(1,1)"  "(1,10)" "(1,11)" "(1,12)" "(1,14)" "(1,19)" "(1,2)"  "(1,21)" "(1,25)" "(1,3)" 
...
[145] "(5.4.3.1,5)"   "(5.4.3.1,6)"   "(5.4.3.1,7)"   "(5.4.3.1,8)"   "(5.4.3.1.2,9)" "(None,1)"      "(None,11)"     "(None,20)"    
[153] "(None,26)"     "(None,30)"     "(None,38)"     "(None,41)"     "(None,42)"     "(None,44)"     "(None,45)"     "(None,49)"    
[161] "(None,51)"     "(None,53)"     "(None,55)"     "(None,57)"     "(None,58)"     "(None,59)"     "(None,60)"     "(None,61)"    
[169] "(None,62)"     "(None,64)"     "(None,65)"     "(None,66)"     "(None,67)"     "(None,68)"     "(None,69)"     "(None,7)"     
[177] "(None,70)"     "(None,71)"     "(None,72)"     "(None,73)"     "(None,74)"     "(None,75)"     "(None,76)"     "(None,77)"    
[185] "(None,78)"     "(None,79)" 

Заранее спасибо,

Антонин

1 Ответ

0 голосов
/ 23 января 2019

Я полагаю, что ваш вопрос касается нормализации различий между последовательностями.Например, Sabherwal и Robey (1993, стр. 557) относятся к стандартизации расстояний, предложенной Abbott & Hyrcac (1990), и вообще не рассматривают стандартизацию последовательности.В любом случае, я не могу понять, какой может быть стандартизация последовательности.

Функция seqdist в TraMineR имеет аргумент norm, который можно использовать для нормализации некоторых из предложенных мер расстояния.Вот выдержка из справочной страницы seqdist:

Расстояния могут быть дополнительно нормализованы с помощью аргумента норма.Если установлено значение «auto», нормализация Эльзинга (сходство, деленное на среднее геометрическое двух длин последовательностей) применяется к расстояниям «LCS», «LCP» и «RLCP», в то время как нормализация Эбботта (расстояние делится на длину более длинной последовательности)используется для «OM», «HAM» и «DHD».Метод Эльзинга можно принудить с помощью «gmean», а правило Эбботта - с «maxlength».С помощью «maxdist» расстояние нормализуется по максимально возможному значению.Для получения более подробной информации см. Gabadinho et al.(2009, 2011).Наконец, «YujianBo» - это нормализация, предложенная Yujian and Bo (2007), которая сохраняет неравенство треугольника.

Позвольте мне предупредить вас, что в то время как нормализация создает расстояния между двумя короткими последовательностями (скажем, длины 10)более сопоставимый с расстояниями между двумя длинными последовательностями (скажем, длиной 100), он не решает проблему сравнения последовательностей различной длины.

Подробное обсуждение нормализации расстояния и сходства в анализе последовательностей можно найти в Elzinga & Studer (2016) .

...