3

由于我有一个大数据集并且只有有限的计算资源,我想利用聚合序列对象使用R 包TraMineRWeightedCluster. 但我很难找到这样做 的正确语法。

在下面的示例代码中,您会发现两个差异分析,差异分析的第一个树形图使用原始数据集,第二个使用聚合数据(即仅按频率加权的唯一序列)。
不幸的是,结果不匹配。你知道为什么吗?

示例代码

library(TraMineR) 
library(WeightedCluster) 

## Load example data and assign labels
data(mvad)
mvad.alphabet <- c("employment", "FE", "HE", "joblessness", "school", "training")
mvad.labels <- c("Employment", "Further Education", "Higher Education", 
                 "Joblessness", "School", "Training")
mvad.scodes <- c("EM", "FE", "HE", "JL", "SC", "TR")

## Aggregate example data
mvad.agg <- wcAggregateCases(mvad[, 17:86], weights=mvad$weight)
mvad.agg

## Define sequence object 
mvad.seq <- seqdef(mvad[, 17:86], alphabet=mvad.alphabet, states=mvad.scodes,
                   labels=mvad.labels, weights=mvad$weight, xtstep=6)
mvad.agg.seq <- seqdef(mvad[mvad.agg$aggIndex, 17:86], alphabet=mvad.alphabet,
                       states=mvad.scodes, labels=mvad.labels,
                       weights=mvad.agg$aggWeights, xtstep=6)

## Computing OM dissimilarities
mvad.dist <- seqdist(mvad.seq, method="OM", indel=1.5, sm="CONSTANT")
mvad.agg.dist <- seqdist(mvad.agg.seq, method="OM", indel=1.5, sm="CONSTANT")

## Discrepancy analysis
tree <- seqtree(mvad.seq ~ gcse5eq + Grammar + funemp, 
                data=mvad, diss=mvad.dist, weight.permutation="diss")
seqtreedisplay(tree, type="d", border=NA)
tree.agg <- seqtree(mvad.agg.seq ~ gcse5eq + Grammar + funemp, 
                    data=mvad[mvad.agg$aggIndex, ], diss=mvad.agg.dist, 
                    weight.permutation="diss")
seqtreedisplay(tree.agg, type="d", border=NA)

这个问题与大数据和序列距离的计算有关

4

1 回答 1

2

您用于聚合数据的过程是错误的,因为您在聚合数据时没有考虑解释性协变量。因此,每个独特的序列都归因于几乎随机的协变量配置文件,从而给出错误的结果。

您需要做的是聚合序列协变量。这里协变量“语法”“funemp”“gcse5eq”位于第 10 到第 12 列。所以

## Aggregate example data
mvad.agg <- wcAggregateCases(mvad[, c(10:12, 17:86)], weights=mvad$weight)
mvad.agg

然后我们来到下一个问题:置换测试。如果您什么都不做,您将只置换聚合(并省略聚合内的置换),从而得到错误的 p 值。可以使用两种解决方案:

  • 如果您没有采样权重,请使用 weight.permutation="replicate" 告诉程序使用一个案例单位置换内部聚合。
  • 如果您有抽样权重,则没有完美的程序。您可以使用 weight.permutation="random-sampling" (使用权重定义的分布将协变量配置文件随机分配给对象。)

在所有情况下,您可能会观察到 p 值的微小差异(因为您有不同的程序),并且还因为 p 值是使用置换检验估计的。要获得更精确的 p 值,请尝试使用更高的 R 值(排列数)。在树过程中,可以使用pval参数更改进行拆分的最小 p 值。您可以尝试将其设置得稍高一点,以查看差异是否来自此处。

我希望它有所帮助。

于 2013-06-13T13:26:54.110 回答