Как найти группировки (траектории) среди продольных данных?

11

контекст

Я хочу установить сцену, прежде чем немного расширить вопрос.

У меня есть продольные данные, измерения проводятся на предметах примерно каждые 3 месяца, первичный результат - числовой (как в непрерывном режиме до 1 dp) в диапазоне от 5 до 14, при этом основная масса (всех точек данных) составляет от 7 до 10. Если я сделаю Сюжет спагетти (с возрастом на оси х и линией для каждого человека), очевидно, это беспорядок, поскольку у меня> 1500 предметов, но есть явный шаг к более высоким значениям с увеличением возраста (и это известно).

Более широкий вопрос: то, что мы хотели бы сделать, - это, во-первых, уметь идентифицировать трендовые группы (те, которые начинаются с высокого уровня и остаются высокими, те, которые начинаются с низкого уровня и остаются низкими, те, которые начинаются с низкого уровня и повышаются до высокого уровня и т. Д.), А затем мы можем посмотрите на отдельные факторы, связанные с членством в «группе трендов».

Мой вопрос здесь конкретно относится к первой части, группировке по тенденциям.

Вопрос

  • Как мы можем сгруппировать отдельные продольные траектории?
  • Какое программное обеспечение подойдет для этого?

Я посмотрел на Proc Traj в SAS и M-Plus, предложенные коллегой, и я хотел бы узнать, что думают другие по этому поводу.

nzcoops
источник
1
Это только отправная точка, но, возможно, ознакомьтесь с некоторыми ответами на этот вопрос: stats.stackexchange.com/questions/2777/…
Jeromy Anglim
Благодаря Джероми, опция kml интересна, мне нравится идея, учитывая, что она написана на R, но я не уверен, что смогу использовать их структуру с моими данными, учитывая, что предметы посещают разные возрасты в отличие от «посещения 1». посещение 2 'и т. д., у некоторых 10 посещений, у других 50 + ...
nzcoops
Проверьте kml пакет - кажется, обеспечивает необходимую функциональность. Бумага в JoSS описывает это подробно. Также kml3d& kmlShapeможет представлять интерес.
Радек

Ответы:

11

Я использовал Mfuzz в R для кластеризации наборов данных микрочипов временного хода. Mfuzz использует «мягкую кластеризацию». В основном, люди могут появляться в более чем одной группе.

Как отмечает @Andy в комментарии, в оригинальной статье используются данные CTN. Тем не менее, я подозреваю, что он должен работать нормально для ваших дискретных данных. Тем более, что вы просто изучаете набор данных. Вот быстрый пример в R:

##It's a bioconductor package
library(Mfuzz)
library(Biobase)

## Simulate some data
## 6 time points and 90 individuals
tps = 6;cases = 90
d = rpois(tps*cases, 1)  ##Poisson distribution with mean 1
m = matrix(d, ncol=tps, nrow=cases)

##First 30 individuals have increasing trends
m[1:30,] = t(apply(m[1:30,], 1, cumsum))

##Next 30 have decreasing trends
##A bit hacky, sorry
m[31:60,] = t(apply(t(apply(m[31:60,], 1, cumsum)), 1, rev))

##Last 30 individuals have random numbers from a Po(1)

##Create an expressionSet object
tmp_expr = new('ExpressionSet', exprs=m)

##Specify c=3 clusters
cl = mfuzz(tmp_expr, c=3, m=1.25)
mfuzz.plot(tmp_expr,cl=cl, mfrow=c(2, 2))

Дает следующий сюжет:

Mfuzz кластеризация

csgillespie
источник
Спасибо за ссылку, я не сталкивался с этим раньше. Подойдет ли этот алгоритм кластеризации для распределенных данных с малым количеством, как упоминалось в OP (или дихотомических данных)? В справочном документе (Futschik & Carlisle 2005) использовались данные, которые были преобразованы в непрерывные.
Энди W
@ Энди: Хорошая мысль. Я включил быструю симуляцию. Все вроде бы нормально, но может быть более оптимальное решение.
csgillespie
Спасибо @csgillespie, постараюсь попробовать. Кстати, мои данные непрерывны, а не дискретны, не уверен, что вопрос был недостаточно ясен или это была опечатка в вашем ответе? Придется откатить мой R, чтобы установить Mfuzz, пусть веселье начнется.
nzcoops
@csgillespie - это очень круто. Я сейчас играю с этим на некоторых реальных данных. Вы случайно не знаете, есть ли способ оценить количество групп?
Макрос
4

Я ожидаю, что есть пакет MPLUS, чтобы сделать то, что вам нужно. В Psychometrika есть статья почти на эту тему.

springerlink.com/content/25r110007g417187

за исключением того, что данные являются двоичными, а траектории являются вероятностными. Авторы используют латентный анализ классов (реализуемый с использованием модели конечных смесей с учетом штрафов) для группировки траекторий. Я также знаю, что около 10 лет назад первый автор написал несколько других работ с Бенгтом Мутеном (создателем MPLUS) о скрытом анализе классов в аналогичных условиях (с траекториями). Например,

http://onlinelibrary.wiley.com/doi/10.1111/j.0006-341X.1999.00463.x/abstract

звучит очень похоже на то, о чем вы говорите, за исключением того, что результат является двоичным. Непрерывный случай намного проще, поэтому я бы сделал обратный поиск в литературе (то есть посмотрел на статьи, на которые они ссылаются), чтобы найти что-то, что более точно соответствует тому, что вы описали.

Чтобы узнать больше, вы можете напрямую спросить владельцев MPLUS, какой пакет вам нужно использовать, чтобы делать то, что вам нужно. Они обычно довольно быстро отвечают и очень полезны:

http://www.statmodel.com/cgi-bin/discus/discus.cgi

макрос
источник