2014-09-26 70 views
0

我想检查是否标准正态分布的序列有其价值的95%-2和2计算正常的随机变量序列的比例

之间要进行检查的,比方说,50个标准正态分布,我使用x=rnorm(50,0,1)然后,为了得到这个比例,我使用了length(x[x<abs(2)])/length(x)

我想重复这个任务一定的时间(例如25000)看到不同的结果我得到。因此,我使用replicate(2500, rnorm(50,0,1)),但现在我需要一个不同的比例代码。我想到了类似的lapply()与作为第一个参数前面提到的对象replicate(),并作为第二个参数,函数得到的比例,但它不工作。我怎样才能以正确的方式做到这一点?

回答

1

您可以使用replicate()代码块以及单个语句。怎么样

replicate(2500, {x<-rnorm(50,0,1); length(x[x<abs(2)])/length(x)}) 

虽然我可能会写,随着

replicate(2500, {x<-rnorm(50,0,1); mean(abs(x)<2)}) 

Additioanlly的replicate() + *apply组合应该工作以及

sapply(replicate(2500, rnorm(50,0,1), simplify=FALSE), 
    function(x) mean(abs(x)<2)) 
+0

太棒了。我不知道如何在'replicate()'中使用大括号来表示一段代码。谢谢。 – Egodym 2014-09-26 20:40:18

1

这可能工作

# You already have done this: 
x <- rnorm(50, 0, 1) 
length(x[abs(x) < 2])/length(x) 
## [1] 0.96 

# Now you can do something like this: 
y <- replicate(25, rnorm(50,0,1)) # Doing it with 25 "replicas" for demonstration purposes 
colSums(ifelse(abs(y) < 2,1,0))/nrow(y) 
## [1] 0.98 0.98 0.94 0.90 0.94 0.98 0.94 
## [8] 0.96 0.96 0.94 0.98 0.96 0.96 0.92 
## [15] 0.94 0.98 0.92 0.98 0.96 0.96 0.94 
## [22] 0.92 0.94 0.96 0.98 

其他方式,由aosmith in his comment建议。

mean(abs(x) < 2) 
## [1] 0.96 
colMeans(abs(y) < 2) 
## [1] 0.98 0.98 0.94 0.90 0.94 0.98 0.94 
## [8] 0.96 0.96 0.94 0.98 0.96 0.96 0.92 
## [15] 0.94 0.98 0.92 0.98 0.96 0.96 0.94 
## [22] 0.92 0.94 0.96 0.98 
+1

如果您切换到使用'平均(ABS(X) <2)'而不是'length',那么你可以很容易地使用'colMeans'。 – aosmith 2014-09-26 20:26:02

+0

@aosmith的确!现在包括它! (每天学习东西!我爱StackOverflow!) – Barranka 2014-09-26 20:27:03