Как использовать анализ расхождений с данными TraMineR и агрегированной последовательности?
Поскольку у меня большой набор данных и ограниченные вычислительные ресурсы, я хочу использовать агрегированные объекты последовательностей для анализа расхождений с использованием пакетов R TraMineR
а также WeightedCluster
, Но я изо всех сил пытаюсь найти правильный синтаксис для этого.
В приведенном ниже примере кода вы найдете два анализа расхождений: первая древовидная диаграмма анализа расхождений использует исходный набор данных, а вторая использует агрегированные данные (то есть только уникальные последовательности, взвешенные по их частотам).
К сожалению, результаты не совпадают. У тебя есть идеи почему?
Пример кода
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 ответ
Процедура, которую вы используете для агрегированных данных, неверна, потому что вы не учитываете пояснительные ковариаты при агрегировании данных. Из-за этого каждая уникальная последовательность относится к почти случайному ковариатному профилю, дающему неправильные результаты.
Что вам нужно сделать, это агрегирование последовательности и ковариат. Здесь ковариаты "Грамматика", "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 (количество перестановок). В процедуре дерева минимальное значение p для разделения можно изменить с помощью pval
аргумент. Вы можете попытаться установить его чуть выше, чтобы увидеть, откуда идут эти различия.
Я надеюсь, что это помогает.