r - R:识别异常值并在箱线图中标记它们
问题描述
我有以下虚假数据代表在线问卷中不同用户的回答时间(以秒为单位):
n <- 1000
dat <- data.frame(user = 1:n,
question = sample(paste("q", 1:10, sep = ""), size = 10, replace = TRUE),
time = round(rnorm(n, mean = 10, sd=4), 0)
)
dat %>%
ggplot(aes(x = question, y = time)) +
geom_boxplot(fill = 'orange') +
ggtitle("Answering time per question")
然后,我将每个问题的回答时间绘制为箱线图。但是我如何首先计算一个带有二进制变量的列,显示一个案例是否是异常值[定义为中位数(时间)+/- 3 * mad(时间)]在每个问题中?
解决方案
library(dplyr)
dat %>%
group_by(question) %>%
mutate(outlier = abs(time - median(time)) > 3*mad(time) ) %>%
ungroup() %>%
ggplot(aes(x = question, y = time)) +
geom_boxplot(fill = 'orange') +
geom_point(data = . %>% filter(outlier), color = "red") +
ggtitle("Answering time per question")
通过在每个问题中进行第一次分组,计算适用于与该问题相比的中位数和疯狂的每一行。
推荐阅读
- javascript - 使用具有相同 Js 功能的多个下拉菜单
- php - 在从帖子标题共享预览和通知标题中使用 Shorcodes
- python - 将网页中的表格元素存储在字典中
- c# - 由于索引问题,无法创建 Fluent API 外键
- android-emulator - 如何编辑模型和硬件模拟器
- android - Android - 打印时可以设置份数
- selenium-webdriver - 我正在尝试在 selenium webdriver 中上传文件,因为 selenium 正在选择要上传的文件,但无法单击上传按钮
- vba - 通过 iCalendar 转发信息减少的约会
- flutter - 未找到使用颤振中的mailto链接处理意图错误的活动
- java - 需要加快条件复制属性操作