R 中的阈值舍入数字

标签 r tidyverse

我正在尝试进行逻辑回归,并且已经达到了每次观察都有概率的程度。现在我想在给定阈值的情况下将概率分类为 0 或 1

例如,如果我有两个数字 0.65 和 0.87,并且我的阈值是 0.7,我希望将 0.65 舍入为 0,将 0.87 舍入为 1。

为了实现这一目标,我尝试了以下代码,我认为这对于这样一个简单的任务来说太多了,我想知道是否有专门的函数来执行此操作。

library(tidyverse)

# create a table of probabilities and predictions (0 or 1)
df <- tibble(
  prob = runif(20),
  pred = round(prob) # threshold = 0.5
)

# threshold function for length = 1
threshold_1 <- function(p,t) {
  if (p > t) 1 else 0
}

# threshold function for length = p
threshold_p <- function(ps, t) {
  map2_dbl(ps, t, threshold_1)
}

# below works.
df %>% mutate(
  pred = threshold_p(df$prob, 0.7)
)

我也尝试过这个

# threshold = 0.7
df %>%
  mutate(
  pred = round(prob - 0.2) # threshold = 0.7
)

上面的效果非常好,因为没有概率恰好是 0 或 1(只要我们处理分布函数),所以即使我对数字进行 +/- 0.5(以更改阈值),它们也会永远不会四舍五入到 -1 或 2。但这只是不太优雅。

我想知道是否有任何函数可以以更简单的方式执行此操作?

最佳答案

听起来ifelse可以做你想做的事?

library(dplyr)
df %>% 
  mutate(pred = ifelse(prob < 0.7, 0, 1))

关于R 中的阈值舍入数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43972110/

相关文章:

r - 从数据框中的两列中识别唯一的值对

r - 更改作用域内所有调用的函数的默认参数

r - 在 RStudio 中加载 Tidyverse 时出现问题

r - 如何拆分数据框,应用某些功能,然后将其重新组合在一起?

r - 如何使用 dplyr 将行转换为列

r - 使用带有嵌套列表的映射

r - 如何在R中一行中删除匹配模式之前和匹配模式之后的字符?

r - 计算百分位数以及R中的最小值和最大值

r - 打印一个带有下划线的 3 位数字组的单个大数字,就像在小标题中一样?

r - 使用 openxlsx 隐藏 Excel 工作簿中的列