首页 文章

如何使用TraMineR和聚合序列数据进行差异分析?

提问于
浏览
3

由于我有一个大数据集并且只有有限的计算资源,我想使用R软件包 TraMineRWeightedCluster 来为discrepancy analysis使用聚合序列对象 . 但我很难找到合适的 syntax 这样做 .

在下面的示例代码中,您会发现两个差异分析,差异分析的第一个树图使用原始数据集,第二个使用聚合数据(即仅由其频率加权的唯一序列) .
Unfortunately, the results do not match. Do you have any idea why?

Example code

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)

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

1 回答

  • 2

    您用于聚合数据的过程是错误的,因为在聚合数据时您不考虑解释性协变量 . 因为每个独特的序列都归因于几乎随机的协变量分布,给出了错误的结果 .

    您需要做的是聚合序列 and 协变量 . 这里的协变量"Grammar" "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值 . 您可以尝试将其设置得稍高一些,以查看差异是否来自此处 .

    我希望它有所帮助 .

相关问题