моделирование вложенных моделей - PullRequest
4 голосов
/ 12 мая 2011

Запуск, например, cv.glmnet для набора данных дает мне (по умолчанию) 100 различных моделей.Теперь, если в моем наборе данных отсутствовали данные, я мог бы сделать несколько вменений (скажем, 10 вменений) и запустить cv.glmnet для каждого из вменений.

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

Код, подобный этому, несколько имитирует результаты:

usevars<-paste("var", 1:100, sep="")
mdls<-replicate(1000, {
        numVars<-sample.int(length(usevars), 1)
        sample(usevars, numVars)
    })
names(mdls)<-paste("mdl", 1:1000, sep="")

Теперь достаточно простополучить отношения родитель-потомок для подмоделей в этом отношении.Также возможно включить только «прямое родительство» (т. Е. Если модель A является дочерней по отношению к B, а B является дочерней по отношению к C, тогда не включайте связь между A и C).

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

То, что я в итоге сделал, было более или менее рассчитать позиции каждого узла самостоятельно через кучу кода (который я слишком смущен, чтобы публиковать здесь), но я всегда задавался вопросом, пропустил ли я лучшее / нестандартное решение.

Мой собственный код привел к появлению таких графиков (вы можете игнорировать цвета и метки - просто знайте,что горизонтальная ось соответствует размеру модели): enter image description here

Предложения по достижению такого графа более элегантно, чем выполнение всей тяжелой работы самостоятельно, с благодарностью.

Ответы [ 2 ]

1 голос
/ 12 мая 2011

Вы можете использовать опцию, чтобы ограничить алгоритм fruchterman-reingold в qgraph , чтобы сделать это.Чтобы показать это, я сначала создаю небольшую матрицу смежности для вложенных моделей:

adj <- matrix(0,9,9)

adj[1,2:4] <- 1
adj[2:4,5:7] <- 1
adj[5:7,8] <- 1
adj[8,9] <- 1 

mod <- c(1,rep(2,3),rep(3,3),4,5)

Здесь adj - матрица смежности, а mods - вектор, содержащий уровень модели (насколько она вложена).

In qgraph Вы можете построить график матрицы смежности, используя функцию qgraph() на матрице смежности.Установив аргумент layout="spring", вы вызываете алгоритм Fruchterman-Reingold, а с помощью layout.par вы можете предоставить список параметров для Fruchterman-Reingold.

С помощью параметра constraints мы можем установить ограничения дляраскладка.Это должна быть матрица из 2 столбцов и строка для каждого узла.Первый элемент каждой строки - это координата x, а второй - координата y.Если он содержит NA, это означает, что эта координата может свободно перемещаться, а если это значение, это означает, что эта координата зафиксирована в определенном месте.

Вы должны попробовать разные вещи в масштабе позиций y, чтобы увидеть, что работает лучше всего.Здесь я просто умножаю вектор mod на количество узлов, чтобы получить красивый граф:

library("qgraph")
Lpar <- list(constraints = cbind(NA,nrow(adj)*mod))
L <- qgraph(adj,layout="spring",layout.par=Lpar)$layout

Здесь мы также сохранили макет в объекте L, который можно использовать в качестве макета вigraph.

The model

1 голос
/ 12 мая 2011

Алгоритм компоновки Fruchterman-Reingold в разрабатываемой версии igraph (то есть 0.6, официально еще не выпущен, но вы можете попросить Габора в списке рассылки отправить вам копию)два скрытых (то есть недокументированных) параметра: miny и maxy.Они позволяют вам ограничивать координаты Y узлов в пределах диапазона, поэтому вы можете использовать это для создания слоев.

В качестве альтернативы, я сейчас работаю над реализацией метода компоновки многослойного графа Сугияма для igraph иЯ объединю его с деревом разработки через день или два (если дела пойдут хорошо), а затем вы можете попробовать это.

...