R glm - 如何从具有相同数据格式和值的两个不同数据集中预测相同系数

R glm - How to predict the same coefficient from two different dataset with the same data format and value

所以让我解释一下我的目标。

(1) 我有一个现有的带有 P 个输入变量的 glm,其中一个名为 'X'.

(2) 我有来自不同系统的多个数据集,每个数据集都包含 'X' 输入变量,但名称不同。从系统中提取数据集后,我就能知道对应于 'X'.

的变量名称

(3) 我想对每个数据集使用 predict(*) R 函数。我想知道是否有一种方法可以在不将输入变量重命名为 'X' 的情况下执行此操作,例如添加 predict 函数可以读取的引用列名而不是原始列名。我想如果没有办法,我将需要创建一个临时数据集,并将输入变量重命名为 'X',因为我不想修改原始数据集中的列名称。

(4 Extra) 我想解决同样的问题,但是多个 glm 具有相同的输入变量 'X',但名称不同。

谢谢你

我不确定我是否理解正确,但听起来您似乎希望能够使用 predict.glm,其中 newdata 参数包含一个与用于创建 glm 的数据框中的等效自变量。但是,您不想重命名新数据框中的列。

一种方法是为 predict 创建一个包装器,它采用要在新数据框中替换的变量的名称,以及它表示的模型中的变量。让我们称之为 predict2:

predict2 <- function(model, newdata, oldvar, newvar, ...)
{
  if(!missing(oldvar) & !missing(newvar))
  {
    oldname <- deparse(substitute(oldvar))
    names(newdata)[which(names(newdata) == deparse(substitute(newvar)))] <- oldname
  }
  predict.glm(model, newdata = newdata, ...)
}

现在让我们看看它是如何工作的。您没有给我们一个可重现的例子,但这是一个非常简单的例子。这只是一个名为 X:

的三级因子变量的逻辑回归
set.seed(69)
df1 <- data.frame(outcome = rbinom(15, 1, rep(c(.1, .5, .9), each = 5)),
                  X = rep(LETTERS[1:3], each = 5))

mod <- glm(outcome ~ X, df1, family = binomial)

predict(mod)
#>           1           2           3           4           5           6 
#> -19.5660685 -19.5660685 -19.5660685 -19.5660685 -19.5660685  -0.4054651 
#>           7           8           9          10          11          12 
#>  -0.4054651  -0.4054651  -0.4054651  -0.4054651   1.3862944   1.3862944 
#>          13          14          15 
#>   1.3862944   1.3862944   1.3862944

现在,如果我们创建一个新的数据框,其中的因子变量称为 Y,为了说明,它仅包含 B,当我们尝试使用我们的模型时会遇到问题:

df2 <- data.frame(outcome = rbinom(15, 1, .5), Y = rep('B', 15))

predict(mod, newdata = df2)
#> Error in eval(predvars, data, env): object 'X' not found

然而,对于我们的新函数 predict2,我们只是告诉它使用 Y 代替 X,我们应该得到我们的结果(因为它们都是B的应该都是-0.4054651:

predict2(mod, newdata = df2, oldvar = X, newvar = Y)
#>          1          2          3          4          5          6          7 
#> -0.4054651 -0.4054651 -0.4054651 -0.4054651 -0.4054651 -0.4054651 -0.4054651 
#>          8          9         10         11         12         13         14 
#> -0.4054651 -0.4054651 -0.4054651 -0.4054651 -0.4054651 -0.4054651 -0.4054651 
#>         15 
#> -0.4054651

reprex package (v0.3.0)

于 2020-05-10 创建