【问题标题】:Linear regression with interaction fails in the rms-package在 rms 包中具有交互作用的线性回归失败
【发布时间】:2012-05-20 16:50:38
【问题描述】:

我正在玩弄公式中的交互。我想知道是否可以对两个虚拟变量之一进行交互回归。这似乎适用于使用 lm() 函数的常规线性回归,但使用 rms 包中的 ols() 函数,相同的公式会失败。有人知道为什么吗?

这是我的例子

data(mtcars)

mtcars$gear <- factor(mtcars$gear)
regular_lm <- lm(mpg ~ wt + cyl + gear + cyl:gear, data=mtcars)
summary(regular_lm)

regular_lm <- lm(mpg ~ wt + cyl + gear + cyl:I(gear == "4"), data=mtcars)
summary(regular_lm)

现在是 rms 示例

library(rms)

dd <- datadist(mtcars)
options(datadist = "dd")

regular_ols <- ols(mpg ~ wt + cyl + gear + cyl:gear, data=mtcars)
regular_ols

# Fails with:
#     Error in if (!length(fname) || !any(fname == zname)) { : 
#         missing value where TRUE/FALSE needed
regular_ols <- ols(mpg ~ wt + cyl + gear + cyl:I(gear == "4"), data=mtcars)

这个实验可能不是最明智的统计数据,因为估计值似乎发生了显着变化,但我有点好奇为什么 ols() 会失败,因为它应该执行“lm 使用的相同拟合例程”

【问题讨论】:

    标签: r linear-regression


    【解决方案1】:

    我不确切知道,但这与计算公式的方式有关,而不是与模型翻译后的拟合方式有关。使用traceback()说明问题出现在Design(eval.parent(m))内部;使用options(error=recover) 可以让您看到这一点

    Browse[1]> fname
    [1] "wt"   "cyl"  "gear"
    Browse[1]> zname
    [1] NA
    

    换句话说,zname 是一些尚未正确设置的内部变量,因为Design 函数无法完全处理动态定义圆柱体和 (gear==4) 假人之间的相互作用。

    这可行:

    mtcars$cylgr <- with(mtcars,interaction(cyl,gear == "4"))
    regular_ols <- ols(mpg ~ wt + cyl + gear + cylgr, data=mtcars)
    

    【讨论】:

    • 谢谢。我考虑过创建交互变量,但我有点害怕它会与预测/对比函数交互
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-09
    • 2020-12-10
    • 2014-07-06
    • 1970-01-01
    • 2014-09-28
    • 2021-01-29
    • 1970-01-01
    相关资源
    最近更新 更多