2014-09-26 69 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