【问题标题】:Updated with data: Error in Diff...must be factors with the same levels已更新数据:Diff 中的错误...必须是具有相同水平的因素
【发布时间】:2012-07-31 02:25:06
【问题描述】:

希望大家能帮帮我。

我有一个包含两个数据框的列表 -- contests 和 expvar. 在数据框 contests 中,每一行都是一场比赛,第一列是比赛的获胜者,第二列是比赛的获胜者比赛的失败者。在数据框expvar 中,我有特定于玩家的预测变量。这些都是数字。我正在尝试使用 BradleyTerry2 包来分析我的数据。这是我正在使用的代码:

a <- data.frame(read.csv(file.choose()))
b <- data.frame(read.csv(file.choose()))
ablist <- list(contests=a, expvar=b)  
Model <- BTm(1, winner, loser, ~level2[..]+(1|..), data=ablist)

这是我得到的错误:

Error in Diff(player1, player2, formula, id, data, separate.ability, refcat,  : 
'player1$..' and 'player2$..' must be factors with the same levels

我的问题是,我做错了什么?我已经尝试了很多东西,但我不确定这个错误是什么意思。我应该将变量更改为因子吗?为什么/如何?赢家和输家都有相同类别的预测变量。

这是我对dput(a) 的输出

structure(list(winner = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 5L, 
5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 6L, 6L, 6L, 6L, 6L, 
6L, 6L, 6L, 6L, 7L, 7L, 7L, 7L, 8L, 8L, 8L, 8L, 9L, 9L, 9L, 9L, 
9L, 9L, 9L, 9L, 9L, 10L, 10L, 10L, 10L, 10L, 10L, 10L, 10L, 11L, 
11L, 11L, 11L, 11L, 11L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 
13L, 13L, 13L, 13L, 13L, 13L, 13L, 13L, 13L, 13L, 13L, 14L, 14L, 
14L, 14L, 14L, 15L, 15L, 16L, 16L, 16L, 16L, 16L, 16L, 16L, 16L, 
16L, 16L, 16L, 17L, 17L, 17L, 17L, 17L, 17L, 17L, 17L, 17L, 17L, 
18L, 18L, 18L, 18L, 18L, 18L, 18L, 18L, 18L, 18L, 18L, 19L, 19L, 
19L, 19L, 19L, 19L, 19L, 19L, 20L, 20L, 20L, 20L, 20L, 20L, 20L, 
20L, 20L, 20L, 21L, 21L, 21L, 21L, 21L, 21L, 21L, 21L, 21L, 22L, 
22L, 22L, 22L, 22L, 23L, 23L, 23L, 23L, 23L, 23L, 23L, 23L, 23L, 
24L, 24L, 24L, 24L, 24L, 24L, 24L, 24L, 24L, 24L, 24L, 24L, 25L, 
25L, 25L, 25L, 25L, 25L, 25L, 25L, 26L, 26L, 26L, 26L, 26L, 26L, 
26L, 27L, 27L, 27L, 27L, 28L, 28L, 29L, 29L, 29L, 29L, 29L, 29L, 
29L, 29L, 29L, 30L, 30L, 30L, 30L, 30L, 30L, 30L, 30L, 30L, 30L, 
30L, 30L, 30L, 31L, 31L, 31L, 31L, 31L, 31L, 31L, 31L, 23L, 13L, 
20L, 20L), .Label = c("Arizona Cardinals", "Atlanta Falcons", 
"Baltimore Ravens", "Buffalo Bills", "Carolina Panthers", "Chicago Bears", 
"Cincinnati Bengals", "Cleveland Browns", "Dallas Cowboys", "Denver Broncos", 
"Green Bay Packers", "Houston Texans", "Indianapolis Colts", 
"Jacksonville Jaguars", "Kansas City Chiefs", "Miami Dolphins", 
"Minnesota Vikings", "New England Patriots", "New Orleans Saints", 
"New York Giants", "New York Jets", "Oakland Raiders", "Philadelphia Eagles", 
"Pittsburgh Steelers", "San Diego Chargers", "San Francisco 49ers", 
"Seattle Seahawks", "St. Louis Rams", "Tampa Bay Buccaneers", 
"Tennessee Titans", "Washington Redskins"), class = "factor"), 
    loser = structure(c(4L, 9L, 17L, 27L, 27L, 28L, 28L, 29L, 
    29L, 5L, 6L, 11L, 12L, 16L, 18L, 20L, 23L, 26L, 29L, 30L, 
    7L, 7L, 8L, 8L, 9L, 13L, 15L, 17L, 23L, 24L, 32L, 10L, 15L, 
    16L, 23L, 26L, 28L, 29L, 1L, 2L, 6L, 10L, 11L, 12L, 16L, 
    20L, 20L, 23L, 26L, 30L, 11L, 11L, 12L, 14L, 15L, 18L, 20L, 
    24L, 29L, 8L, 15L, 16L, 32L, 4L, 7L, 15L, 21L, 7L, 8L, 12L, 
    21L, 24L, 27L, 28L, 30L, 32L, 2L, 8L, 16L, 20L, 22L, 23L, 
    26L, 30L, 6L, 11L, 11L, 14L, 18L, 28L, 6L, 7L, 8L, 11L, 12L, 
    15L, 17L, 31L, 3L, 7L, 8L, 11L, 13L, 13L, 15L, 19L, 25L, 
    26L, 31L, 10L, 11L, 12L, 13L, 14L, 10L, 23L, 4L, 4L, 10L, 
    16L, 19L, 22L, 23L, 26L, 27L, 28L, 29L, 1L, 5L, 6L, 11L, 
    11L, 12L, 13L, 15L, 20L, 21L, 1L, 4L, 4L, 10L, 16L, 17L, 
    22L, 23L, 27L, 28L, 29L, 2L, 11L, 12L, 16L, 23L, 26L, 27L, 
    30L, 1L, 3L, 5L, 7L, 9L, 24L, 25L, 27L, 28L, 32L, 1L, 4L, 
    4L, 7L, 16L, 17L, 19L, 29L, 31L, 10L, 13L, 16L, 22L, 30L, 
    1L, 2L, 8L, 9L, 21L, 25L, 27L, 28L, 29L, 3L, 3L, 7L, 7L, 
    8L, 8L, 9L, 13L, 15L, 19L, 26L, 32L, 10L, 16L, 16L, 19L, 
    22L, 23L, 23L, 30L, 4L, 11L, 22L, 28L, 29L, 29L, 32L, 22L, 
    27L, 29L, 29L, 9L, 32L, 2L, 5L, 6L, 11L, 12L, 16L, 18L, 20L, 
    28L, 3L, 6L, 7L, 8L, 11L, 12L, 13L, 14L, 15L, 15L, 16L, 18L, 
    25L, 1L, 8L, 9L, 11L, 20L, 24L, 24L, 28L, 7L, 18L, 29L, 32L
    ), .Label = c("Arizona Cardinals", "Atlanta Falcons", "Baltimore Ravens", 
    "Buffalo Bills", "Carolina Panthers", "Chicago Bears", "Cincinnati Bengals", 
    "Cleveland Browns", "Dallas Cowboys", "Denver Broncos", "Detroit Lions", 
    "Green Bay Packers", "Houston Texans", "Indianapolis Colts", 
    "Jacksonville Jaguars", "Kansas City Chiefs", "Miami Dolphins", 
    "Minnesota Vikings", "New England Patriots", "New Orleans Saints", 
    "New York Giants", "New York Jets", "Oakland Raiders", "Philadelphia Eagles", 
    "Pittsburgh Steelers", "San Diego Chargers", "San Francisco 49ers", 
    "Seattle Seahawks", "St. Louis Rams", "Tampa Bay Buccaneers", 
    "Tennessee Titans", "Washington Redskins"), class = "factor")), .Names = c("winner", 
"loser"), row.names = c(NA, -256L), class = "data.frame")

这里是dput(b)

structure(list(X = structure(1:32, .Label = c("Arizona Cardinals", 
"Atlanta Falcons", "Baltimore Ravens", "Buffalo Bills", "Carolina Panthers", 
"Chicago Bears", "Cincinnati Bengals", "Cleveland Browns", "Dallas Cowboys", 
"Denver Broncos", "Detroit Lions", "Green Bay Packers", "Houston Texans", 
"Indianapolis Colts", "Jacksonville Jaguars", "Kansas City Chiefs", 
"Miami Dolphins", "Minnesota Vikings", "New England Patriots", 
"New Orleans Saints", "New York Giants", "New York Jets", "Oakland Raiders", 
"Philadelphia Eagles", "Pittsburgh Steelers", "San Diego Chargers", 
"San Francisco 49ers", "Seattle Seahawks", "St. Louis Rams", 
"Tampa Bay Buccaneers", "Tennessee Titans", "Washington Redskins"
), class = "factor"), id = 1:32, high = c(0L, 0L, 0L, 0L, 0L, 
1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), level2 = c(0, 0.67, 
0, 0.33, 0.25, 0, 0, 0.25, 0.33, 0, 0.25, 0, 0, 0.5, 0, 0, 0.25, 
0.33, 0, 0, 0, 0, 0, 0, 0, 0.67, 0.25, 0, 0.2, 0, 0, 0.6), level3 = c(0.25, 
0.4, 0.36, 0.3, 0.11, 0.56, 0.38, 0.5, 0.22, 0.33, 0.6, 0.3, 
0.57, 0.38, 0.29, 0.43, 0.3, 0.33, 0.29, 0.14, 0.2, 0.22, 0.33, 
0.22, 0.5, 0.27, 0.4, 0.2, 0.43, 0.43, 0.33, 0.44)), .Names = c("X", 
"id", "high", "level2", "level3"), row.names = c(NA, -32L), class = "data.frame"

谢谢

【问题讨论】:

  • 您能否将dput(a) 和dput(b) 的输出放置到使这个问题可重现。这是一个数据特定的问题,要回答它,我们需要查看数据。
  • 欢迎来到 StackOverflow。也许如果您制作了一个 reproducible example 来展示您的问题/问题,人们会发现它更容易回答。目前,您的示例无法重现,因为您没有提供示例数据。
  • 当您使用该包中的flatlizards 数据集时,您是否会遇到同样的错误?
  • 谢谢 mnel 和 Andrie。我已经编辑了上面的问题以包含数据。另外,不,@sebastian-c,我在使用 flatlizards 数据集时没有收到任何错误。
  • 嗨 mnel 和@Andrie,我在上面编辑的内容是否足够,或者我还需要包含其他内容吗?请告诉我。谢谢!

标签: r diff factors bradleyterry2


【解决方案1】:

对于“BTm”功能,我也遇到了这个错误消息。可以通过定义级别来解决问题。 (级别是类型因子函数的可定义属性)。尝试为 player1 和 player2 设置级别:

    levels(contests[,1]) <- unique(c(contests[,1], contests[,2]))
    levels(contests[,2]) <- unique(c(contests[,1], contests[,2]))

对不起,我在 3 年前帮不上忙;)

【讨论】:

    猜你喜欢
    • 2014-09-08
    • 2015-07-12
    • 1970-01-01
    • 2019-05-24
    • 2019-02-07
    • 2021-05-28
    • 2022-06-16
    • 2020-08-17
    • 1970-01-01
    相关资源
    最近更新 更多