2016-01-26 4 views
2

У меня есть большая матрица перехода, которую я хочу построить график из r. Я выбрал Цепь Маркова пакет, чтобы сделать это, что позволяет мне, чтобы превратить эту матрицу в объект Цепь Маркова, а затем построить его следующим образом:Как только строить границы над некоторым минимальным пороговым значением, используя markovchain в r

library(markovchain) tMat = matrix(c(0,.2,.7,.1,.3,.4,.3,.1,.4,.5),3,3) mc = new("markovchain",transitionMatrix = tMat) plot(mc)

, который производит следующий вывод: enter image description here

из Конечно, это всего лишь пример, и, как я уже упоминал, реальная матрица перехода намного более увлекательна.

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

Я знаю, что функция графика построена поверх igraph.plot, поэтому я надеюсь, что там есть какой-то вариант, который может помочь?

Любые предложения были бы высоко оценены!

-Paul woops: Я ответил на свой вопрос. Просто хотел, чтобы оставить это здесь, в случае, если другие люди сталкиваются с той же проблемой: вы можете просто создать объект Цепи Маркова, а затем перейти в атрибут transitionMatrix и редактировать значения непосредственно: [email protected][[email protected]<.2] = 0

, который производит: enter image description here

Теперь вопрос о вопросе о боге, который фактически попадает в исходную проблему и будет лучшим решением: как только подавлять числа в графическом представлении, а не удалять линии вообще? Это приводит к уродливым ситуациям, когда ранее соединенные узлы/вершины становятся островами. Я думаю, что это будет включать в себя часть объекта igraph.plot, в котором хранятся эти значения, и я не знаю, как это сделать, даже после повторного кэширования.

ответ

3

как только подавлять числа в графическом выводе, а не удалять линии в целом?

Превратить объект markovchain в объект igraph; теперь у вас есть вся необходимая гибкость:

library(markovchain) 
statesNames=c("a","b","c") 
mc<-new("markovchain", states=statesNames, transitionMatrix= 
      matrix(c(0.2,0.5,0.3, 
        0,1,0, 
        0.1,0.8,0.1),nrow=3, byrow=TRUE, dimnames=list(statesNames,statesNames) 
       )) 
g <- as(mc, "igraph") 
min <- 0.5 
plot(g, edge.label=ifelse(E(g)$prob>=min, E(g)$prob, NA)) 
+1

Спасибо! Это именно то, что я искал. Должен дать мне достаточно, чтобы иметь возможность ответить на мои собственные вопросы в будущем, используя документацию по играм. – Paul

 Смежные вопросы

  • Нет связанных вопросов^_^