gpt4 book ai didi

r - model.frame 和更新

转载 作者:行者123 更新时间:2023-12-03 18:04:22 24 4
gpt4 key购买 nike

在 R 中,您可能已经估计了一个具有对数转换因变量的模型:

mfit <- lm(
formula = log(salary) ~ yrs.service + yrs.since.phd,
data = Salaries
)

然后您可能想要更改模型框架并调用更新以重新调整模型:
n     <- nrow(Salaries)
mfr <- model.frame(mfit)[sample(1:n, size=n, replace=TRUE),]
mfit2 <- update(mfit, data = mfr)

这将导致错误:
Error in eval(expr, envir, enclos) : object 'salary' not found

原因是公式还有因变量 log(salary)模型框架中的变量称为 log(salary) . R认为可以找到 salary然后调用 log在上面。如果没有重新采样,同样的错误也会发生,这个例子只是说明了为什么人们可能想要这样做。

上面的过程来自执行重新采样行的 Bootstrap 包。这种行为是意料之中的,还是一个错误?我知道可以通过转换 data 参数中的变量来解决它,但这似乎很烦人并且被忽视了......

最佳答案

而不是从 model.frame(mfit) 采样, 您可以从 na.omit(get_all_vars(myformula, Salaries)) 中取样反而。因此,您的示例将变为以下内容:

myformula <- log(salary) ~ yrs.service + yrs.since.phd

mfit <- lm(formula = myformula, data = Salaries)

n <- nrow(Salaries)
newdata <- na.omit(get_all_vars(myformula, Salaries))[sample(1:n, size=n, replace=TRUE),]
mfit2 <- update(mfit, data = newdata)

我们可以使用下面的简单示例来确认 model.frame(myformula, df)na.omit(get_all_vars(myformula, df))从数据框中选择相同的原始(未转换)数据:

df <- data.frame(w = rnorm(10), x = rnorm(10), y = rnorm(10), z = rnorm(10))
df[1, 1] <- NA
df[2, 2] <- NA
df[3, 3] <- NA
df[4, 4] <- NA

identical(data.frame(na.omit(get_all_vars(z ~ w + x, df))), data.frame(model.frame(z ~ w + x, df)))
# [1] TRUE

请注意,我包装了 na.omit(get_all_vars(...)) 的结果和 model.frame(...)data.frame只是为了比较目的而删除无关的属性。当然, model.frame做额外的工作,比如在你的例子中记录转换工资。但是,如果您只需要对原始数据进行采样,那么 na.omit(get_all_vars(...))工作正常,然后您可以将新数据框传递给 lmupdate .

关于r - model.frame 和更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9650335/

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