Как использовать анализ расхождений с данными 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 аргумент. Вы можете попытаться установить его чуть выше, чтобы увидеть, откуда идут эти различия.

Я надеюсь, что это помогает.

Другие вопросы по тегам