又菜又想卷 2023-09-09 21:42 采纳率: 0%
浏览 110

在用R语言做TERGM的时候,怎么把时变二元协变量放进模型里?

在用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.

  • 写回答

3条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-09-10 08:57
    关注

    【以下回答由 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模型,以便将它们加入模型中。

    请注意,这只是一个示例代码,具体实现取决于你的数据结构和需要。确保你将你的矩阵转换为正确的格式,并将它们与其他模型输入一起设置正确。

    如果你还遇到其他问题,请提供更多信息,我将尽力帮助你解决。


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 9月9日

悬赏问题

  • ¥15 C# 爬虫融通金网址实时银价
  • ¥15 热敏电阻NTC,温控不同颜色的LED的亮与灭,PCB
  • ¥20 ESP32使用MicroPyhon开发,怎么获取485温湿度的值,温湿度计使用的鞋子是Modbus RTU
  • ¥50 苹果MGIE项目部署缺少emb权重
  • ¥15 采用ansys进行机翼在特定路径下的打孔过程中的受力分析
  • ¥15 单片机adb主机连接手机,usb调试密钥无法保存
  • ¥15 已知X和Y有以下关系,求X和Y的关系式
  • ¥15 net core 同时编辑怎么防止数据多保存了
  • ¥15 matlab做ba模型让其在ba和er规则下生长
  • ¥15 请问Quartus的Verilog代码怎么写?