在用R语言做TERGM的时候,怎么把时变二元协变量放进模型里?
我有三个年份的因变量矩阵,和三个年份的经济距离矩阵、技术距离矩阵等。目前只看到了GEO地理矩阵这种非时变的矩阵怎么放进去,不太清楚时变矩阵怎么放进去。
目前尝试将时变矩阵做列表,
Eco_distance <- list(Eco_distance1,Eco_distance2,Eco_distance3)
Inst_distance <- list(Inst_distance1,Inst_distance2,Inst_distance3)
Tec_distance <- list(Tec_distance1,Tec_distance2,Tec_distance3)
导入到边的属性上
for (i in 1:length(link)) {
link[[i]] <- network(link[[i]])
link[[i]] <- set.edge.value(link[[i]], "Eco", Eco_distance[[i]])
link[[i]] <- set.edge.value(link[[i]], "Inst", Inst_distance[[i]])
link[[i]] <- set.edge.value(link[[i]], "Tec", Tec_distance[[i]])
}
最终模型这样写的
mode3 <- mtergm(link ~ edges + mutual +
nodematch("PGDP") + nodematch("PEOPLE") + nodematch("GOV") + nodematch("SEC") + nodematch("OPEN") + nodematch("PINNO") +
edgecov("Eco") + edgecov("Inst") + edgecov("Tec") + edgecov(Geo_distance) +
delrecip,
control = control.ergm(MCMC.samplesize = 1000, MCMC.interval = 1000))
summary(mode3)
但是报错
Error in ergm_Init_abort()
:
! In term ‘edgecov’ in package ‘ergm’: There is no network attribute named ‘Eco’ or it is not a matrix.
Run rlang::last_trace()
to see where the error occurred.
【以下回答由 GPT 生成】
首先,根据你的描述,我了解到你正在使用TERGM模型进行时间变化分析,并希望将时间变化的二元协变量加入模型中。你已经准备好了三个年份的因变量矩阵以及经济距离矩阵、技术距离矩阵等。
你尝试将时间变化的矩阵存储为列表的形式,这是一个很好的开始。然后,你将列表中的矩阵导入到边的属性中,但是你在设置边属性时遇到了错误。
根据错误提示,问题出在设置边属性时没有找到名为"Eco"的网络属性。这是因为你试图在网络对象上设置边属性,但网络对象上没有名为"Eco"的属性。在TERGM模型中,边属性应该被作为独立于网络的矩阵进行处理。因此,你需要将时间变化的二元协变量作为矩阵导入到TERGM模型中。
为了解决这个问题,你可以使用函数get.matrix
来将时间变化的二元协变量转换为矩阵形式,并将其作为模型的边属性。
下面是一个可能的解决方案的代码示例:
# 将时间变化的二元协变量转换为矩阵形式
Eco_matrix <- do.call(cbind, Eco_distance)
Inst_matrix <- do.call(cbind, Inst_distance)
Tec_matrix <- do.call(cbind, Tec_distance)
# 创建TERGM模型
mode3 <- mtergm(link ~ edges + mutual +
nodematch("PGDP") + nodematch("PEOPLE") + nodematch("GOV") + nodematch("SEC") + nodematch("OPEN") + nodematch("PINNO") +
edgecov(Eco_matrix) + edgecov(Inst_matrix) + edgecov(Tec_matrix) + edgecov(Geo_distance) +
delrecip,
control = control.ergm(MCMC.samplesize = 1000, MCMC.interval = 1000))
summary(mode3)
在这个解决方案中,我使用do.call(cbind, ...)
函数将时间变化的二元协变量列表转换为矩阵形式。然后,我将这些矩阵作为边属性(使用edgecov
)传递给TERGM模型,以便将它们加入模型中。
请注意,这只是一个示例代码,具体实现取决于你的数据结构和需要。确保你将你的矩阵转换为正确的格式,并将它们与其他模型输入一起设置正确。
如果你还遇到其他问题,请提供更多信息,我将尽力帮助你解决。