创建一个循环以在 R 包 GameTheory 中使用它

Creating a loop to utilise it in R package GameTheory

我正在使用 R 包 GameTheory 来计算 Shapley-Shubik 幂指数。命令本身非常简单, ShapleyShubik(quota, y, Names = NULL)

其中 quota 是通过投票的最低票数,每个政党的 y 个席位(数量)和 Names 是政党的标签。使用起来很简单 'manually',但我想扩展我的用法以使其自动化以遍历在数据帧 DF 中编译的大量数据。

我的数据框 DF 包括四列:AREA、PARTY LABEL、PARTYSEATS 和 MAJORITY:

AREA      PARTY LABEL    PARTYSEATS       MAJORITY
Area 1       A               5                5
Area 1       B               2                5
Area 1       C               1                5
Area 2       B               4                6
Area 2       D               6                6
Area 3       A               3                7
Area 3       C               4                7
Area 3       D               5                7

我无法为此提供可重现的示例,因为我还没有弄清楚如何为命令提供所需的循环以遍历列表。由于计算必须基于区域,我认为应该以某种方式告诉它逐个考虑区域(unique(DF$AREA)?)。配额对我来说也是一个挑战,因为它只需要'by one value',因为它对一个特定区域的所有各方都是一样的。

我还想到了'splitting'多个新数据帧的数据(逐个区域)使用

list2env(split(DF,DF$AREA),envir = .GlobalEnv)

这是成功的,但我不认为这是一个可行的选择,因为多个区域会使工作区变得非常杂乱无章。

免责声明我之前没有使用过这个包,请仔细查看结果。

  1. 正在准备数据
df = structure(list(AREA = c("Area 1", "Area 1", "Area 1", "Area 2", 
"Area 2", "Area 3", "Area 3", "Area 3"), PARTYLABEL = c("A", 
"B", "C", "B", "D", "A", "C", "D"), PARTYSEATS = c(5, 2, 1, 4, 
6, 3, 4, 5), MAJORITY = c(5, 5, 5, 6, 6, 7, 7, 7)), class = c("tbl_df", 
"tbl", "data.frame"), row.names = c(NA, -8L))
  1. 加载包并制作每个区域的模型
library(tidyverse)
library(GameTheory)

out <- df %>%
  group_by(AREA) %>%
  nest() %>%
  mutate(models = map(data, ~ ShapleyShubik(head(.x[[3]], 1), .x[[2]], .x[[1]])))

基于示例?ShapleyShubik我相信您正在寻找与上述类似的内容。

然后可以调用summary提取一些信息。

lapply(out$models, summary)