我正在尝试使用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-...
Run Code Online (Sandbox Code Playgroud)
在较短的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)"
Run Code Online (Sandbox Code Playgroud)
将此序列对象传递给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
Run Code Online (Sandbox Code Playgroud)
这个错误是否与大量不同的长序列有关?我正在使用带有4GB RAM的x64机器,我也在具有8 GB RAM的机器上尝试了它,它再现了错误信息.有人知道解决此错误的方法吗?此外,使用相同语法和国家索引对每个国家进行的分析运作良好,并产生了有意义的结果.
我之前从未见过这个错误代码,但很可能是因为你的序列数量很多.你可以尝试至少做两件事:
"full.matrix=FALSE"seqdist中的参数(请参阅帮助页面).它将仅计算下三角矩阵并返回可直接在hclust函数中使用的"dist"对象.WeightedCluster库可以很容易地做到这一点.WeightedCluster手册的第一个附录提供了一步一步的指导(该程序也在网页http://mephisto.unige.ch/weightedcluster上描述).希望这可以帮助.