You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

含不完整网络属性的网络扩散自相关模型构建问题求助

问题概述
  • 数据基础:持有一学期大学生的每日通话/短信数据、睡眠日志,已用igraph构建包含参与者(约40名)和非参与者(数千名,如其他学生、家人)的社交网络
  • 研究目标:验证睡眠行为(时长、作息规律等)是否通过社交网络扩散
  • 方法选择:导师推荐使用自相关模型(替代同类研究常用的潜增长曲线模型)
  • 核心障碍:仅参与者有睡眠数据,非参与者无有效属性值,导致网络属性缺失;已选择添加缺失值指示变量(因非参与者数量过多,未采用插补法),但计算Moran's I时频繁出现NA,运行自相关模型时报错
数据说明
  • node_attributes数据框:包含两列(names、node_attributes),非参与者的node_attributes为NA
  • g2013F:igraph对象,涵盖2013年秋季学期参与者与非参与者的完整社交网络
现有代码及报错
# 创建缺失值指示变量
missing_indicator <- ifelse(is.na(node_attributes$node_attributes), 1, 0)

# 计算Moran's I
library(ape)
library(igraph)
adj_matrix <- as_adjacency_matrix(g2013F, sparse = FALSE)
weights <- as.matrix(adj_matrix)
moran_missingness <- Moran.I(missing_indicator, weights)
print(moran_missingness) # 结果显示缺失值指示变量的Moran's I显著,说明缺失非随机
moran_i <- Moran.I(node_attributes$node_attributes, weights)
print(moran_i) # 此处多得到NA值

# 将邻接矩阵转换为listw对象(空间权重)
nb <- mat2listw(adj_matrix, style = "W", zero.policy = TRUE)
# 警告信息:Warning- neighbour object has 2 sub-graphs
library(spatialreg)
# 创建包含缺失值指示变量的数据框
data <- data.frame(names = node_attributes$names, attribute = node_attributes$node_attributes, missing = missing_indicator)
# 拟合空间滞后模型
lag_model <- lagsarlm(attribute ~ missing, data = data, listw = nb)
summary(lag_model)
# 报错信息:Error in subset.listw(listw, subset, zero.policy = zero.policy) : 
#   Not yet able to subset general weights lists

# 尝试用weights作为listw参数
lag_model <- lagsarlm(attribute ~ missing, data = data, listw = weights)
summary(lag_model)
# 报错信息:no neighborhood list

# 尝试另一种方式
library(spdep)
lag_model <- lagsarlm(node_attributes ~ 1, data = NULL, listw = lw)
summary(lag_model)
# 报错信息:invalid type (list) for variable 'node_attributes'
问题分析与修正方案

核心问题拆解

  1. Moran's I出现NA:全网络权重矩阵搭配大量NA的属性值,计算逻辑上无法生成有效结果,必须聚焦参与者子集计算
  2. 空间滞后模型报错:listw对象与数据框的节点顺序不匹配,且直接传入邻接矩阵不符合lagsarlm的参数要求;同时纳入数千名非参与者会导致模型逻辑混乱、计算效率极低

修正代码示例

# 1. 提取参与者节点(过滤属性为NA的非参与者)
participant_nodes <- node_attributes$names[!is.na(node_attributes$node_attributes)]
# 2. 构建仅包含参与者的子网络
g_participant <- induced_subgraph(g2013F, vids = participant_nodes)
# 3. 生成子网络的标准化邻接矩阵(行和为1,排除自连接)
adj_participant <- as_adjacency_matrix(g_participant, sparse = FALSE)
adj_participant <- adj_participant / rowSums(adj_participant, na.rm = TRUE)
diag(adj_participant) <- 0

# 4. 提取参与者的睡眠属性
participant_attr <- node_attributes$node_attributes[!is.na(node_attributes$node_attributes)]

# 5. 计算参与者子集的Moran's I
moran_i_participant <- Moran.I(participant_attr, adj_participant)
print(moran_i_participant)

# 6. 转换为标准listw对象(确保节点顺序严格匹配)
lw_participant <- mat2listw(adj_participant, style = "W", zero.policy = TRUE)
# 7. 构建参与者专属数据框
data_participant <- data.frame(attribute = participant_attr)
# 8. 拟合空间滞后模型(可按需添加控制变量,如性别、年级等)
lag_model <- lagsarlm(attribute ~ 1, data = data_participant, listw = lw_participant, zero.policy = TRUE)
summary(lag_model)

非参与者处理补充

若需考虑非参与者的间接影响,可将其转换为控制变量纳入模型:例如计算每个参与者连接非参与者的数量/比例,作为“社交暴露程度”变量加入滞后模型的自变量中,避免直接将无属性值的非参与者纳入网络分析。

内容的提问来源于stack exchange,提问作者Madelynn Wellons

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 04:50:03