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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 15:25:10