r - 使用函数用 sd 估算异常值
问题描述
我试图找出异常值并用替换来估算它们。我有两个要解决的问题:
- 下面的函数查找异常值,但我想用下面描述的替换来查找和估算异常值。
- 该函数返回比列短的向量。我想要的是我想要一个名为 bmi_imputed 的新列,其中包含替换的异常值。
# bmi <- c(32.8999, 31.7826, 28.5573, 20.6350, 21.6311, NA, 69.6174, 52.7027, -8.5968, 30.1867, 28.7927, 26.4697, 42.0294, 27.1309, 56.3672, 62.6474, 34.1692, 31.5120, 29.8553, 34.4443, 25.4049, 25.7287, 71.3209, 23.5615, 19.9359,21.7438, 51.9286, 22.1875, NA, 24.4389, 28.1571, 23.7093, 47.5551, 27.7767, 30.3237, NA, 20.7838, 34.1878, 25.1559, 25.8645, 24.9673, 27.5374, 28.5467, 25.0402, 22.1056, 28.0026, 26.7901, 21.5110,NA, 50.7599, NA, 32.6979, 26.5295, 25.5246, 23.9657, 20.1323, 28.0452)
eid <- c(1:57)
df <- as.data.frame (cbind(eid, bmi))
findingoutlier<- function (data, cutoff=3, na.rm=TRUE){
sd <- sd(data, na.rm=TRUE)
mean <- mean(data, na.rm=TRUE)
outliers <- (data[data < mean - cutoff * sd | data >mean + cutoff * sd])
outliers <- outliers[!is.na(outliers)]
}
replacement <- mean+sd*3 + ((data-mean)/mean)
解决方案
你可以试试 :
df <- data.frame(eid, bmi)
findingoutlier<- function (data, cutoff=3, na.rm=TRUE){
sd <- sd(data, na.rm=TRUE)
mean <- mean(data, na.rm=TRUE)
inds <- ((data < mean - cutoff * sd) |
(data >mean + cutoff * sd)) & !is.na(data)
data[inds] <- mean+sd*3 + ((data[inds]-mean)/mean)
data
}
然后通过以下方式更改异常值的值:
df$bmi <- findingoutlier(df$bmi)
推荐阅读
- css - CSS 只粘在左边
- windows - 如何使用 Azure Cli 在 Azure Windows VM 上安装 IIS
- python - 两个时间序列的python聚合
- json - 如何将 slf4j-over-logback 日志编写为 JSON
- javascript - 如何定位嵌套对象并引用此属性?
- python - 使用 Python 的多个属性直接在字典或 json 对象中定位元素
- android - java.lang.RuntimeException:无法创建类 MovieViewModel 的实例,存储库尚未初始化
- python-3.x - python - 张量:访问一个值
- laravel - 在 laravel 5.7 中显示错误
- excel - VLookup 针对 2 个范围 - 一个精确一个非精确