如何用R代码构建国家对联合国赞成票相关性指数?
联合国投票记录的国家间相关性计算R代码
现有数据集记录联合国各决议的国家投票信息,包含字段:
- ResolutionID:决议唯一标识
- Country:国家名称
- vote:投票类型,可选值为yes(赞成)、no(反对)、abstain(弃权)
我们的目标是计算每一对国家的投票行为相关性,以此衡量国家间的友好程度或战略联盟倾向。数据集来源:Erik Voeten所著《联合国大会投票的数据与分析》,收录于Bob Reinalda主编的《国际组织Routledge手册》(2013年5月27日出版)
步骤1:加载所需工具包
# 若未安装依赖包,先运行注释行 # install.packages(c("tidyverse", "corrr")) library(tidyverse) library(corrr)
步骤2:导入并预处理数据
先将投票类型转换为数值(相关性计算需数值型变量),这里采用常用编码规则:赞成=1,反对=-1,弃权=0,可根据需求调整。
# 导入数据(替换为你的文件路径,支持csv、excel等格式) unvotes <- read_csv("un_votes.csv") # 投票类型转数值,处理异常值 unvotes_numeric <- unvotes %>% mutate(vote_score = case_when( vote == "yes" ~ 1, vote == "no" ~ -1, vote == "abstain" ~ 0, TRUE ~ NA_real_ )) # 可选:检查缺失值 # unvotes_numeric %>% filter(is.na(vote_score))
步骤3:转换为宽格式数据
将数据调整为「决议行×国家列」的结构,方便后续相关性计算
unvotes_wide <- unvotes_numeric %>% select(ResolutionID, Country, vote_score) %>% pivot_wider(names_from = Country, values_from = vote_score) # 移除无投票记录的国家列 unvotes_wide_clean <- unvotes_wide %>% select(where(~!all(is.na(.x))))
步骤4:计算国家间两两相关性
生成所有国家对的Pearson相关系数,自动去重(避免重复计算如US-CA和CA-US)
country_correlations <- unvotes_wide_clean %>% select(-ResolutionID) %>% correlate(method = "pearson") # 可替换为spearman或kendall stretch(na.rm = TRUE) %>% filter(x < y) # 保留唯一国家对组合
步骤5:结果解读与排序
- 相关系数接近1:两国投票立场高度一致
- 相关系数接近-1:两国投票立场高度对立
- 相关系数接近0:两国投票无明显关联
# 查看立场最一致的国家对 country_correlations %>% arrange(desc(r)) # 查看立场最对立的国家对 country_correlations %>% arrange(r)
内容的提问来源于stack exchange,提问作者florian1997
相关产品推荐
相关产品推荐

