Расстояние "CHI2"
между двумя последовательностями x и y , вычисленное как TraMineR
, является суммой расстояния хи-квадрат между распределениями состояний за последовательные периоды длины step
. См. Studer and Ritschard (2014, стр. 8) .
Это означает, что для step=1
расстояние хи-квадрат вычисляется в каждой позиции. Когда одна из последовательностей имеет пустые значения в некоторых позициях (например, последняя позиция в вашей второй последовательности), расстояние не может быть вычислено для этих позиций, и мы получаем значение NaN
для расстояния CHI2
между этой последовательностью и любыми другими sequence.
Чтобы избежать этого, вы можете использовать следующие обходные пути:
1) Установите достаточно большое значение step
, чтобы каждая последовательность содержала как минимум один элемент void в каждом интервалы Для вашего примера, самые длинные последовательности имеют длину 25. Чтобы быть уверенным, что последний период содержит не пустые элементы, вы должны установить step=5
.
DAT <- c("a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a",
"a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a",
"a-e-e-e-e-e-e-e-e-e-e-e-e-e-e-e-e-e-e-e-e-e-c-c-c",
"a-e-e-e-e-e-e-e-e-e-e-e-e-e-e-e-e-e-e-e-e-e-e-e-e",
"b-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a")
SO <- seqdef(DAT)
DM <- seqdist(SO, method = "CHI2", step=5)
DM
## [,1] [,2] [,3] [,4] [,5]
## [1,] 0.000000 0.000000 4.543441 4.543441 1.030776
## [2,] 0.000000 0.000000 4.543441 4.543441 1.030776
## [3,] 4.543441 4.543441 0.000000 2.028370 4.604927
## [4,] 4.543441 4.543441 2.028370 0.000000 4.604927
## [5,] 1.030776 1.030776 4.604927 4.604927 0.000000
2) Удалите столбцы с пустыми элементами:
SOdrop <- SO[,1:(ncol(SO)-1)]
SOdrop
DMd <- seqdist(SOdrop, method = "CHI2", step=1)
DMd
## [,1] [,2] [,3] [,4] [,5]
## [1,] 0.00000 0.00000 10.041580 10.041580 2.50000
## [2,] 0.00000 0.00000 10.041580 10.041580 2.50000
## [3,] 10.04158 10.04158 0.000000 4.472136 10.34811
## [4,] 10.04158 10.04158 4.472136 0.000000 10.34811
## [5,] 2.50000 2.50000 10.348108 10.348108 0.00000
3) Заполните более короткие последовательности пропусками и рассмотрите пропущенное значение как дополнительное возможное состояние. По умолчанию right='DEL'
в seqdef
, что создает пустоты. Здесь мы устанавливаем right=NA
для получения пропущенных значений.
SOm = seqdef(DAT, right=NA)
DMm = seqdist(SOm, method = "CHI2", step=1, with.missing=TRUE)
DMm
## [,1] [,2] [,3] [,4] [,5]
## [1,] 0.000000 2.738613 10.408330 10.408330 2.500000
## [2,] 2.738613 0.000000 10.527741 10.527741 3.708099
## [3,] 10.408330 10.527741 0.000000 5.477226 10.704360
## [4,] 10.408330 10.527741 5.477226 0.000000 10.704360
## [5,] 2.500000 3.708099 10.704360 10.704360 0.000000
Теперь ошибка, о которой сообщается в вопросе, НЕ является ошибкой seqdist
, а функцией seqpropclust
из WeightedCluster
библиотека. Ошибка, очевидно, вызвана NaN
в матрице различий.