【问题标题】:Contrasts can be applied to factors with 2 or more levels error in lm对比度可以应用于 lm 中具有 2 个或更多级别误差的因素
【发布时间】:2020-04-22 13:54:42
【问题描述】:

当我在 R 中运行下面的两个语句以针对 b 和 c 回归 a 时,我得到了我在下面粘贴的错误。所有预测变量都具有 2 个以上的水平。我不确定出了什么问题。有人可以帮忙吗?

d<-data.frame(a=c(1,2,3),b=c(4,5,6),c=c(7,8,9))
 lmmod <- lm(colnames(d)[1] ~  paste(colnames(d)[2:length(colnames(d))], collapse = "+") , data = d[1:(nrow(d)),])


Error in `contrasts<-`(`*tmp*`, value = contr.funs[1 + isOF[nn]]) : 
  contrasts can be applied only to factors with 2 or more levels
In addition: Warning message:
In storage.mode(v) <- "double" : NAs introduced by coercion

【问题讨论】:

  • 为什么投反对票?至少给出一个理由,以便我可以解决问题。
  • 您需要lm(a~b+c, d) 吗?
  • 是的。但我不想在真实示例中硬编码。这只是一个用于演示问题的玩具示例。

标签: r


【解决方案1】:

我们可以使用reformulate

lm(reformulate(paste0(names(d)[-1], collapse = "+"), names(d)[1]), d)

或使用paste0

lm(paste0(names(d[1]),"~", paste0(names(d)[-1], collapse = "+")), d)

【讨论】:

  • 如果您要将字符串作为公式传递,它应该是一个字符串的一部分。在您的尝试中,它们不是。您可以尝试类似lm(paste0(colnames(d)[1], '~' ,paste(colnames(d)[2:length(colnames(d))], collapse = "+")), d) 之类的方法,这与我发布的第二个选项类似。
猜你喜欢
  • 2017-01-29
  • 2016-09-03
  • 2021-01-24
  • 2016-04-21
  • 1970-01-01
  • 2015-12-09
  • 2020-03-27
  • 2023-03-23
  • 2020-05-03
相关资源
最近更新 更多