首页 文章

使用TraMineR计算序列距离期间的大数据(?)问题

提问于
浏览
7

我正在尝试使用TraMineR运行最佳匹配分析,但似乎我遇到了数据集大小的问题 . 我有一个包含就业法术的欧洲国家的大数据集 . 我有超过57,000个序列,长48个单位,由9个不同的状态组成 . 为了了解分析,这里是序列对象的头部 employdat.sts

[1] EF-EF-EF-EF-EF-EF-EF-EF-EF-EF-EF-EF-EF-EF-EF-EF-EF-EF-EF-EF-EF-EF-...  
[2] EF-EF-EF-EF-EF-EF-EF-EF-EF-EF-EF-EF-EF-EF-EF-EF-EF-EF-EF-EF-EF-EF-...  
[3] ST-ST-ST-ST-ST-ST-ST-ST-ST-ST-ST-ST-ST-ST-ST-ST-ST-ST-ST-ST-ST-ST-...  
[4] ST-ST-ST-ST-ST-ST-ST-ST-ST-ST-ST-ST-ST-ST-ST-ST-ST-ST-ST-ST-ST-ST-...  
[5] EF-EF-EF-EF-EF-EF-EF-EF-EF-EF-EF-EF-EF-EF-EF-EF-EF-EF-EF-EF-EF-EF-...  
[6] ST-ST-ST-ST-ST-ST-ST-ST-ST-ST-ST-ST-ST-ST-ST-ST-ST-ST-ST-ST-ST-ST-...

在较短的SPS格式中,其内容如下:

Sequence               
[1] "(EF,48)"              
[2] "(EF,48)"              
[3] "(ST,48)"              
[4] "(ST,36)-(MS,3)-(EF,9)"
[5] "(EF,48)"              
[6] "(ST,24)-(EF,24)"

将此序列对象传递给 seqdist() 函数后,我收到以下错误消息:

employdat.om <- seqdist(employdat.sts, method="OM", sm="CONSTANT", indel=4)    
[>] creating 9x9 substitution-cost matrix using 2 as constant value  
[>] 57160 sequences with 9 distinct events/states  
[>] 12626 distinct sequences  
[>] min/max sequence length: 48/48  
[>] computing distances using OM metric  
Error in .Call(TMR_cstringdistance, as.integer(dseq), as.integer(dim(dseq)),  : negative length vectors are not allowed

这个错误是否与大量不同的长序列有关?我正在使用带有4GB RAM的x64机器,我也在具有8 GB RAM的机器上尝试了它,它再现了错误信息 . 有人知道解决此错误的方法吗?此外,使用相同语法和国家索引对每个国家进行的分析运作良好,并产生了有意义的结果 .

2 回答

  • 2

    我之前从未见过这个错误代码,但很可能是因为你的序列数量很多 . 你可以尝试至少做两件事:

    • 在seqdist中使用参数 "full.matrix=FALSE" (参见帮助页面) . 它将仅计算下三角矩阵并返回可直接在 hclust 函数中使用的"dist"对象 .

    • 您可以聚合相同的序列(您只有12626个不同的序列而不是57160个序列),计算距离,使用权重(根据每个不同序列在数据集中出现的次数计算)对序列进行聚类,然后添加聚类回原始数据集 . 使用 WeightedCluster 库可以非常轻松地完成此操作 . WeightedCluster手册的第一个附录提供了分步指南(该程序也在网页http://mephisto.unige.ch/weightedcluster中描述) .

    希望这可以帮助 .

  • 8

    一个经常运行良好的简单解决方案是仅分析您的数据样本 . 例如

    employdat.sts <- employdat.sts[sample(nrow(employdat.sts),5000),]
    

    将提取5000个序列的随机样本 . 探索这样一个重要的样本应该足以找出序列的特征,包括它们的多样性 .

    为了提高代表性,您甚至可以采用某种分层抽样(例如,通过第一个或最后一个状态,或通过数据集中的某些协变量) . 由于您拥有原始数据集,因此您可以完全控制随机抽样设计 .

相关问题