gpt4 book ai didi

r - plot.lm 错误 : $ operator is invalid for atomic vectors

转载 作者:行者123 更新时间:2023-12-04 09:52:30 24 4
gpt4 key购买 nike

我有以下带有转换的回归模型:

fit <- lm( I(NewValue ^ (1 / 3)) ~ I(CurrentValue ^ (1 / 3)) + Age + Type - 1,
data = dataReg)
plot(fit)

但是 plot给了我以下错误:
Error: $ operator is invalid for atomic vectors

关于我做错了什么的任何想法?

备注 : summary , predict , 和 residuals一切正常。

最佳答案

这实际上是一个非常有趣的观察。事实上,在 plot.lm 支持的所有 6 个地块中,在这种情况下只有 Q-Q 图失败。考虑以下可重现的示例:

x <- runif(20)
y <- runif(20)
fit <- lm(I(y ^ (1/3)) ~ I(x ^ (1/3)))
## only `which = 2L` (QQ plot) fails; `which = 1, 3, 4, 5, 6` all work
stats:::plot.lm(fit, which = 2L)

plot.lm ,Q-Q图简单地产生如下:
rs <- rstandard(fit)  ## standardised residuals
qqnorm(rs) ## fine
## inside `qqline(rs)`
yy <- quantile(rs, c(0.25, 0.75))
xx <- qnorm(c(0.25, 0.75))
slope <- diff(yy)/diff(xx)
int <- yy[1L] - slope * xx[1L]
abline(int, slope) ## this fails!!!

Error: $ operator is invalid for atomic vectors



所以这纯粹是abline的问题功能! 笔记:
is.object(int)
# [1] TRUE

is.object(slope)
# [1] TRUE

即,两者 intslope具有类属性(阅读 ?is.object ;这是检查对象是否具有类属性的一种非常有效的方法)。什么级别?
class(int)
# [1] AsIs

class(slope)
# [1] AsIs

这是使用 I() 的结果.准确地说,他们从 rs 继承了这样的类。并进一步远离响应变量。也就是说,如果我们使用 I()根据响应,模型公式的 RHS,我们得到了这种行为。

你可以在这里做一些实验:
abline(as.numeric(int), as.numeric(slope))  ## OK
abline(as.numeric(int), slope) ## OK
abline(int, as.numeric(slope)) ## fails!!
abline(int, slope) ## fails!!

所以abline(a, b)对是否第一个参数很敏感a是否有类属性。

为什么?因为 abline可以接受带有“lm”类的线性模型对象。内 abline :
if (is.object(a) || is.list(a)) {
p <- length(coefa <- as.vector(coef(a)))

a有课,abline假设它是一个模型对象(不管它是否真的是!!!),然后尝试使用coef得到系数。这里进行的检查相当不可靠;我们可以制作 abline很容易失败:
plot(0:1, 0:1)
a <- 0 ## plain numeric
abline(a, 1) ## OK
class(a) <- "whatever" ## add a class
abline(a, 1) ## oops, fails!!!

Error: $ operator is invalid for atomic vectors



所以这里是结论:避免使用 I()在模型公式中的响应变量上。 I()就可以了在协变量上,但不在响应上。 lm并且大多数通用函数都不会遇到这个问题,但是 plot.lm将要。

关于r - plot.lm 错误 : $ operator is invalid for atomic vectors,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40572124/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com