выдача эргм беговой оценки с ограничением по диагонали блока
Я пытаюсь запустить ergm во взвешенной сети (network_ex), однако, когда я включаю ограничение по диагонали, я получаю сообщение об ошибке (см. Ниже), и мой сеанс R либо выполняется бесконечно, либо напрямую. Есть ли способ запустить эргм на основе взвешенной блочно-диагональной матрицы?
library(ergm)
library(ergm.count)
VEC=c(0,10,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,3,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,7,4,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,2,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,4,2,4,4,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,2,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,5,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,3,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,7,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,4,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,2,0,2,0,3,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,5,3,5,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,0,5,0,8,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,2,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,9,0,3,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,2,0,0,2,2)
mat_ex=matrix(VEC,25,25)
nb=1:25
ID=rep("ID_",25)
names=paste0(ID,nb)
rownames(mat_ex)=names
colnames(mat_ex)=names
SeAg=c("F_Adult","F_Adult","M_Adult","M_Adult","M_Sub-Adult","F_Adult","M_Adult","F_Adult","M_Sub-Adult","M_Adult","F_Adult","M_Adult","M_Adult","M_Adult","F_Adult","F_Adult","F_Adult","F_Adult","F_Adult","M_Sub-Adult","M_Adult","M_Adult","M_Adult","F_Adult","M_Adult")
network_ex=as.network(x = mat_ex,
directed = TRUE,
loops = FALSE,
matrix.type = "adjacency",
ignore.eval=FALSE,
names.eval='weight')
set.vertex.attribute(network_ex, "Sex_Age", as.character(SeAg))
ergm_ex <- ergm(network_ex~
sum
+nodematch("Sex_Age",diff=TRUE,levels=c(1,2),form="sum")
, response = 'weight'
, constraints = ~blockdiag("Group")
, estimate = 'MLE'
, reference = ~Poisson
, control = control.ergm(MCMC.interval = 1000
, MCMLE.maxit = 200
, init.method = 'CD'
, MCMC.samplesize = 1000
, MCMC.prop.weights="random"
, MCMC.burnin=100,seed=12345)
)
Начало оценки контрастной дивергенции с помощью CD-MCMLE: Итерация 1 из не более 60: начальная сетевая конфигурация функции предложения MH - это такая конфигурация, из которой нельзя предложить переключение (-ы)
1 ответ
Я вижу две проблемы:
-
VEC
закомментирован. - Атрибут
"Group"
никогда не устанавливается в сети.
Пожалуйста, дайте мне знать, если после исправления код по-прежнему не работает.
Тем не менее,
blockdiag()
инициализация ограничений, безусловно, должна выявить эту проблему раньше. Я открою вопрос.