【问题标题】:Error in model.frame.default(object, data, xlev = xlev) : variable lengths differ (found for 'z')model.frame.default(object, data, xlev = xlev) 中的错误:可变长度不同(为“z”找到)
【发布时间】:2017-11-24 10:20:07
【问题描述】:

herehere 之前已经提出过这个问题,但对我的问题没有有用的答案。我的数据集中没有丢失数据,我正在尝试从model.frame 创建一个model.matrix。这是一个可重现的示例:

dat = data.frame(x = rep(1:3, each = 5), 
    y = rnorm(15), 
    z = rep(c(1,1.1,1.3), each = 5))
# this works
mt = model.matrix(model.frame(lm(y ~ x,dat)))
# this produces the error
mt = model.matrix(model.frame(lm(y ~ x + z,dat)))

为什么以及如何解决这个问题?或者,如何以另一种有效且稳健的方式获得带有截距列的右侧值矩阵?

【问题讨论】:

  • mt = model.matrix(model.frame(lm(y ~ x,dat))) 不要运行。
  • @cuttlefish44 是对的,那行代码不会像你写的那样运行。那是因为您需要查看help("model.matrix") 以查看函数需要哪些参数;您需要一个公式或术语对象作为第一个参数。试试model.matrix(y ~ x + z, model.frame(lm(y ~ x + z, dat)))
  • model.matrix 具有默认和 lm 方法。首先将其写为model.matrix(y ~ x + z, dat),或者如果您需要将其写为lm 对象的函数然后model.matrix(lm(y ~ x + z, dat))

标签: r model.matrix


【解决方案1】:

问题在于model.matrix() 需要一个公式或术语对象作为第一个参数。解决方案:

model.matrix(y ~ x + z, model.frame(lm(y ~ x + z, dat)))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-02
    • 1970-01-01
    • 1970-01-01
    • 2020-07-29
    • 1970-01-01
    • 2019-07-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多