【问题标题】:Reduce the range of time in sequence analysis with R使用 R 减少序列分析中的时间范围
【发布时间】:2019-01-17 12:02:46
【问题描述】:

我有一个在很长一段时间内发生的序列。我尝试了 8 种不同的算法来对我的序列进行分类(OM、CHi2、...)。时间从 1 到 123。我有 110 个个人和 8 个事件。

我的结果不如预期。首先,它非常难以阅读。其次,一个类别包含太多的代表序列(group3)。第三,每组的序列数量确实不平衡。

这可能是因为我的时间变量的范围是 123。我搜索了时间范围过长的文章。我在 Sabherwal 和 Robey (1993) 以及 Shi 和 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)" 

提前致谢,

安东尼

【问题讨论】:

  • 欢迎来到 StackOverflow!请阅读有关how to ask a good question 的信息以及如何提供reproducible example。这将使其他人更容易帮助您。
  • 感谢您的评论。我添加了重新创建序列的命令。
  • 你的问题太多了:距离的标准化(或者你真的想标准化序列吗?),忽略时间的影响,字母大小和序列长度的问题。请针对每个问题发布一个单独的问题。
  • 感谢您的评论。我更新了我的问题并在单独的链接上添加了额外的问题。
  • 请澄清您的问题。标题指的是“标准化时间”,文本指的是“标准化序列”,所提供的参考资料是关于标准化差异的。此外,作为链接提供的结果与提供的示例数据不对应。此外,以文本形式提供结果示例,而不是屏幕截图的链接。

标签: r range sequence traminer standardized


【解决方案1】:

我猜你的问题是关于标准化序列之间的差异。例如,Sabherwal 和 Robey (1993, p 557) 参考了 Abbott & Hyrcac (1990) 提出的距离标准化,根本不考虑序列的标准化。无论如何,我无法弄清楚序列的标准化可能是什么。

TraMineR 的 seqdist 函数有一个 norm 参数,可用于规范化一些建议的距离度量。以下是seqdist 帮助页面的摘录:

距离可以选择通过 norm 参数进行归一化。 如果设置为“auto”,则 Elzinga 的归一化(相似度除以 两个序列长度的几何平均值)应用于“LCS”, “LCP”和“RLCP”距离,而 Abbott 的归一化(距离 除以较长序列的长度)用于“OM”、“HAM”和 “DHD”。 Elzinga 的方法可以强制使用“gmean”和 Abbott 的规则 与“最大长度”。使用“maxdist”,距离由其标准化 最大可能值。有关详细信息,请参阅 Gabadinho 等人。 (2009 年, 2011)。最后,“御剑博”是御剑提出的归一化, Bo (2007) 保留了三角不等式。

让我警告您,虽然标准化使两个短序列(例如长度为 10)之间的距离与两个长序列(例如长度为 100)之间的距离更具可比性,但它并不能解决比较不同长度序列的问题。

您可以在Elzinga & Studer (2016) 中找到关于序列分析中距离和相似性归一化的详细讨论。

【讨论】:

  • 您的 cmets 确实满足了我的需求。我使用的文章(Shi 和 Prescott,2011 年)中的引述不清楚。再次感谢您!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-08
  • 2015-08-24
  • 1970-01-01
  • 2015-05-27
  • 1970-01-01
  • 2016-08-12
  • 2017-04-18
相关资源
最近更新 更多