gpt4 book ai didi

r - 函数环境中运行线性模型和waldtest时出现的问题

转载 作者:行者123 更新时间:2023-12-03 23:29:02 24 4
gpt4 key购买 nike

我在尝试封装线性模型和 waldtest 时遇到问题在一个函数中。当您运行 wald 测试时,它无法再判断数据在哪里。当 lm 时会发生这种情况和 waldtest在相同的功能和当 lm是在一个函数和 waldtest处于全局(或不同的功能)环境中。

最小工作示例

# Loading Packages
library(lmtest)
# Loading Data
x <- sin(1:100)
y <- 1 + x + rnorm(100)
dd = data.frame(x = x, y = y)
form = "y ~ x"

当我在函数外进行回归和 waldtest 时,没有问题:
# Doing Regression outside function
Model1 = lm(formula = form, data = dd)
waldtest(Model1)

当我在函数内进行回归和 waldtest 时,会出现错误:
# Doing Regression inside function
reg = function(form, FrameOfData){
Model = lm(formula = form, data = FrameOfData)
print(waldtest(Model))
}
reg(form, FrameOfData = dd)
# Error in is.data.frame(data) : object 'FrameOfData' not found

将上面的 waldtest 命令更改为 print(waldtest(Model2, data = dd))也返回不成功 # Error in modelUpdate(objects[[i - 1]], objects[[i]]) : original model was of class "lm", updated model is of class "data.frame"
我能找到的一种解决方法是选择一个全局数据帧名称来匹配函数名称(在上述情况下,在运行 FrameOfData = dd 之前运行 reg 函数),但我不想为我想到的应用程序执行此操作.

Stack Overflow 上的其他问题

我能找到的最相似的问题是这个:
Regression with Heteroskedasticity Corrected Standard Errors
由于在全局环境中运行线性回归,因此不会出现此问题。

所需的解决方案

无论如何运行 lm命令然后更改对象的属性以指向全局数据框的真实名称?否则有没有办法告诉 waldtest命令全局数据框的真实名称?

最佳答案

1) do.call 在函数中 reg替换定义 Model 的行和:

Model <- do.call("lm", list(formula = form, data = FrameOfData))

1a) 一种变体:
Model <- do.call("lm", list(formula = form, data = substitute(FrameOfData)))

2) 与 或者,这会起作用:
Model <- with(FrameOfData, lm(formula = form))

3) 评估 还有一种可能是这样的:
Model <- eval(substitute(lm(formula = form, data = FrameOfData)))

虽然使用 eval容易被人嫌弃。

3a) 这是一个变体:
reg <- function(form, FrameOfData) {
eval(substitute(waldtest(lm(formula = form, FrameOfData)),
list(form = form, FrameOfData = FrameOfData)))
}

注:以上大部分都存在潜在问题。基于 (1) 的以下内容应该可以工作,并且 (3a) 也可以在这种情况下工作,但所有其他人的相应代码将失败:
set.seed(123)

rm(x, y, dd, form)

fn <- function() {
x <- sin(1:100)
y <- 1 + x + rnorm(100)
dd = data.frame(x = x, y = y)
form = "y ~ x"
reg(form, FrameOfData = dd)
}

reg <- function(form, FrameOfData){
Model <- do.call("lm", list(formula = form, data = FrameOfData))
waldtest(Model)
}
fn()

关于r - 函数环境中运行线性模型和waldtest时出现的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36228207/

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