【问题标题】:Error when predicting with DirichletReg package in R在 R 中使用 DirichletReg 包进行预测时出错
【发布时间】:2017-12-04 05:11:19
【问题描述】:

我正在尝试使用 DirichletReg 包中的 DirichReg 函数对测试集进行预测。当我只用几个预测变量运行模型时,它工作得很好,但是当我使用超过 5 个预测变量时,我会得到一个我无法弄清楚的错误。下面的代码创建了一个重现错误的 MWE。

library(DirichletReg)
set.seed(1)
# create dataset
predictor1 <- rnorm(n = 1000, mean = 5, sd = 1)
predictor2 <- rnorm(n = 1000, mean = 5, sd = 1)
predictor3 <- rnorm(n = 1000, mean = 5, sd = 1)
predictor4 <- rnorm(n = 1000, mean = 5, sd = 1)
predictor5 <- rnorm(n = 1000, mean = 5, sd = 1)
predictor6 <- rnorm(n = 1000, mean = 5, sd = 1)
prob_A <- runif(n = 1000, min = 0, max = 0.5)
prob_B <- runif(n = 1000, min = 0, max = 0.5)
prob_C <- 1 - prob_A - prob_B
dat <- data.frame(predictor1, predictor2, predictor3, predictor4, predictor5,
                  predictor6, prob_A, prob_B, prob_C)

# split data into training and test sets
train_vec <- sample(c(0, 1), size = nrow(dat), replace = T, prob = c(0.2, 0.8))
train_dat <- dat[train_vec == 1, ]
test_dat <- dat[train_vec == 0, ]

# run model
train_dat$prob <- DR_data(train_dat[, c('prob_A', 'prob_B', 'prob_C')])
mod <- DirichReg(prob ~ predictor1 + predictor2 + predictor3 + predictor4 +
                        predictor5 + predictor6,
                 data = train_dat, model = 'common')

# run predictions
test_dat$prob <- DR_data(test_dat[, c('prob_A', 'prob_B', 'prob_C')])
preds <- predict(object = mod, newdata = test_dat)

这是我得到的错误:

Error in parse(text = x, keep.source = FALSE) : 
  <text>:1:74: unexpected '|'
1: prob ~ predictor1 + predictor2 + predictor3 + predictor4 + predictor5 +  |
                                                                             ^

如果有任何帮助,我将不胜感激。我无法通过谷歌搜索错误或在包文档中找到它。

【问题讨论】:

    标签: r


    【解决方案1】:

    这似乎是包中的一个错误。我建议你联系包维护者报告它。

    一种可能的解决方法是明确列出回归规范的各个部分,而不是依赖包在内部复制所有部分的回归量。

    mod2 <- DirichReg(prob ~
      predictor1 + predictor2 + predictor3 + predictor4 + predictor5 + predictor6 |
      predictor1 + predictor2 + predictor3 + predictor4 + predictor5 + predictor6 |
      predictor1 + predictor2 + predictor3 + predictor4 + predictor5 + predictor6,
      data = train_dat, model = "common")
    all.equal(coef(mod), coef(mod2))
    ## [1] TRUE
    predict(mod2, newdata = test_dat)
    ##             [,1]      [,2]      [,3]
    ##   [1,] 0.2436493 0.2715895 0.4847612
    ##   [2,] 0.2541715 0.2252292 0.5205993
    ##   [3,] 0.2618741 0.2345063 0.5036196
    ##   ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-19
      • 1970-01-01
      • 2017-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-21
      相关资源
      最近更新 更多