gpt4 book ai didi

r - R 中的效果包可以用于没有截距的 lm 模型吗?

转载 作者:行者123 更新时间:2023-12-03 21:31:18 26 4
gpt4 key购买 nike

R 中的效果包是否可以用于绘制不包含截距的线性模型的(边际)效果?

这是我为此类模型尝试的一些 R 代码:

x <- seq(1,100,by=0.1)
y <- 1 + 2*x + rnorm(n=length(x))

model <- lm(y ~ 0 + x)

require(effects)
plot(allEffects(model))

它产生的错误如下:

Error in plot(allEffects(model)) : 
error in evaluating the argument 'x' in selecting a method for function 'plot':
Error in mod.matrix %*% mod$coefficients[!is.na(mod$coefficients)] :
non-conformable arguments

如果有人对如何克服这个错误有任何想法,请告诉我。

谢谢,

伊莎贝拉

最佳答案

代码中确实存在错误。特别是,通过调度,allEffects 代码调用 effect,后者调用 Effect.lm。这个特别是用

重新创建的
Effect.lm("x", mod=model)
# Error in mod.matrix %*% mod$coefficients[!is.na(mod$coefficients)] :
# non-conformable arguments

错误似乎来自函数体的第 30 行

body(effects:::Effect.lm)[[30]]
# mod.matrix <- mod.matrix[, !is.na(mod$coefficients)]

当您只有 1 个非 NA 系数时会出现问题(就像您使用单个回归量且没有截距一样)。问题是,当您在单个列上执行此子集时,结果不会自动转换为向量而不是矩阵。我们可以创建自己的函数版本来修复此问题

my.Effect.lm<-effects:::Effect.lm
body(my.Effect.lm)[[30]] <- quote(mod.matrix <- mod.matrix[, !is.na(mod$coefficients), drop=FALSE])
environment(my.Effect.lm) <- asNamespace("effects")

然后

model <- lm(y ~ 0 + x)
plot(my.Effect.lm("x", model))

应该可以。我必须承认我还没有想出如何让 allEffects 工作。我不记得如何更改 S3 调度在解析不同命名空间中的函数时的工作方式。似乎没有任何简单的方法来修复实际位于 effects 命名空间中的函数。

所以一般来说,只要您有多个回归器,该函数就应该在没有截距的情况下工作。您可能需要联系软件包作者来报告此问题。

关于r - R 中的效果包可以用于没有截距的 lm 模型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25818259/

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