gpt4 book ai didi

r - 在 R 函数中调用 predict()

转载 作者:行者123 更新时间:2023-12-04 14:34:43 27 4
gpt4 key购买 nike

我想在 R 中的函数内调用 predict(...)。我遇到了一些与范围相关的问题,但我无法弄清楚出了什么问题或如何解决它。任何人都可以帮忙吗?例子:

df <- data.frame(x=1:20, binary.outcome=1*(runif(20, 0, 1) > 0.60))
summary(df)
logit.model <- glm(df$binary.outcome ~ df$x, family=binomial("logit"), data=df)
summary(logit.model)

PredictOnNewData <- function() {
df <- data.frame(x=51:100)
df$probability <- round(predict(logit.model, df, type="response"), digits=3)
return(df)
}

PredictOnNewData()

最后一行失败:

Error in $<-.data.frame(*tmp*, "probability", value = c(0.274, 0.282, : replacement has 20 rows, data has 50 In addition: Warning message: 'newdata' had 50 rows but variable(s) found have 20 rows



如果我正确理解错误消息,看起来我传递给 predict(...) 的 df 对象正在被评估为父/全局环境中的 df 。那个有 20 行,用于训练。但是我希望在另一个 df 数据帧上评估对 predict(...) 的调用——我在 PredictOnNewData 函数中创建的那个。我怎样才能做到这一点(不更改数据框的名称)?

[现在我重新阅读了这篇文章——我是在倒退吗?在 (df$probability <- ...) 行中,其中一个 dfs 的评估方式错误,但它是哪一个?]

我也尝试过 get("df",envir=sys.frame()),明确表示想要在当前函数框架中定义的 df 对象:
PredictOnNewData <- function() {
df <- data.frame(x=51:100)
# df$probability <- round(predict(logit.model, df, type="response"), digits=3)
df$probability <- round(predict(logit.model, get("df", envir=sys.frame()), type="response"), digits=3)
return(df)
}

PredictOnNewData()

...返回与上次相同的错误。

请帮忙!

绝对可以在大于用作训练数据的数据帧上调用 predict 。一个例子(正确运行):
df <- data.frame(x=1:20, binary.outcome=1*(runif(20, 0, 1) > 0.60))
summary(df)
logit.model <- glm(df$binary.outcome ~ df$x, family=binomial("logit"), data=df)
summary(logit.model)
df <- data.frame(x=1:100)
df$probability <- round(predict(logit.model, df, type="response"), digits=3)
df

这正是我想要做的——除了我希望由函数创建第二个 df。我怎样才能做到这一点?

最佳答案

如果需要,您应该正确使用数据和公式参数 predict正常工作。数据参数是一个数据框,公式参数由列名和(公式)运算符组成。我也不喜欢在开发领域范围之外隐含的狂野外推,但我们现在将忽略它。试试这个小修改:

df <- data.frame(x=1:20, binary.outcome=1*(runif(20, 0, 1) > 0.60))
summary(df)
logit.model <- glm( binary.outcome ~ x, family=binomial("logit"), data=df)
summary(logit.model)

PredictOnNewData <- function() {
df <- data.frame(x=51:100)
df$probability <- round(predict( logit.model, newdata=df, type="response"), digits=3)
return(df)
}

PredictOnNewData()

关于r - 在 R 函数中调用 predict(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4952314/

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