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

问题描述 投票:0回答:1

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

(1) 我有一个现有的glm,它有P个输入变量,其中一个变量被命名为'X'。

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

(3) 我想使用 predict(*) R函数来处理每个数据集。我想知道是否有办法在不将输入变量重命名为 "X "的情况下做到这一点,比如添加一个参考列名,使之成为 "X"。predict 函数可以读取代替原始列名。我想如果没有办法,我需要创建一个临时数据集,将输入变量重命名为'X',因为我不想修改原数据集中的列名。

(4 额外的)我想解决同样的问题,但用多个glm与相同的输入变量'X'用不同的名字。

谢谢你

r reference prediction glm predict
1个回答
0
投票

我不确定我是否正确理解了你的意思,但听起来好像你希望能够使用 "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

创建于2020-05-10,作者: 重读包 (v0.3.0)

© www.soinside.com 2019 - 2024. All rights reserved.