我对编程语言R很陌生。请原谅我非常基本的问题,这对很多专业人士来说可能有些奇怪。
我的数据集有3个参数Lead_Time
,Gross
和Stay_days
。使用箱形图我无法得到明确的异常值。
我用过这个命令
outlier1 <- boxplot.stats(var_name)$out
var_name2 <- ifelse(var_name %in% outlier1, NA, var_name)
现在上面的命令用NAs替换了Outlier值。我的问题是基于这个命令选择异常值的基础?
2)我有一个NAs,我想用平均值或中位数替换所有的NA。
我应该使用var_name2的均值或中位数(意味着减去异常值) 如果是,我该怎么做?
我用过这个
m1<-mean(var_name2, na.rm= T)
var_name3<-ifelse(is.na(var_name2)==TRUE, m1,var_name2)
但是,当我看到var_name3
和var_name2
的摘要时 - 结果相同
答案 0 :(得分:0)
首先,我怀疑你手术的统计性。你为什么要用手段或中位数取代“异常值”,这意味着什么呢?请看下面的例子。
set.seed(3212)
var_name <- rnorm(1e3)
bp <- boxplot(var_name)
length(bp$out)
[1] 9
所以你看到我们有非常好的高斯数字,但是箱线图显示了9个异常值。没关系。如果您重复实验足够多次,则会显示“常规”之外的值。
至于你的第一个问题,请注意我已将函数boxplot
的值保存在名为bp
的变量中。如果您看到boxplot
的帮助页面,您会看到返回值是一个名为out
的命名列表。这些是异常值。
2)var_name2
和var_name3
的摘要值不一样,至少不是我创建的数据示例。
outlier1 <- boxplot.stats(var_name)$out
var_name2 <- ifelse(var_name %in% outlier1, NA, var_name)
m1<-mean(var_name2, na.rm= T)
var_name3<-ifelse(is.na(var_name2)==TRUE, m1,var_name2)
summary(var_name2)
Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
-2.70820 -0.71652 -0.04224 -0.04739 0.59690 2.58625 9
summary(var_name3)
Min. 1st Qu. Median Mean 3rd Qu. Max.
-2.70820 -0.71250 -0.04739 -0.04739 0.58591 2.58625