【发布时间】:2014-08-30 19:27:35
【问题描述】:
我想在生成一组随机数后找到极值(任何大于或小于平均值三倍标准差的值):
num = rnorm(1000)
我的代码如下所示:
extreme = function(varname) {
for(i in varname) {
count = 0
m = mean(varname)
sd = 3*sd(varname)
if(i<(m-sd) || i>(m+sd)) {
count = count + 1
}
}
if(count>0) {
print(paste("There are ", count, " extreme values found.", sep = ""))
} else print("There are no extreme values.")
}
我总是得到“没有极端值”。我是 R 的初学者,所以在任何随机生成的服从正态分布的数字集中真的没有极值吗?
【问题讨论】:
-
你不需要循环。看看以下内容:
length(num[abs(num) > 3])。您还可以将 3 替换为样本标准差:num[abs(num) > 3*sd(num)]。 -
这是一个编程问题,而不是统计问题,因此我们将其迁移到 Stack Overflow。 FWIW,您的代码
if(i<(m-sd)...有错误;请记住,i是一个 index,而不是被索引的 value。 -
我认为这是一个统计新手,他没有意识到这不会产生异常值。我认为编程问题的背后是一个统计问题。
标签: r normal-distribution