2015-11-05 141 views
-2

試圖做到以下幾點。用統一的(0,1)分佈生成30行500個隨機數。生成500行隨機數,30行,均勻分佈

但它只有整數,當我需要小數位數字。

+3

'矩陣(runif(60 * 300),ncol = 60)',當然還有'rexp'來實現您的實際目標。 – Roland

回答

3

您的runif命令不正確。不要:

df<-data.frame(replicate(60,runif(300,0,1))) 

正如蒂姆和羅蘭指出,這是最好(快)使用方法:

df<-matrix(runif(60*300),ncol=60) 

對於runif,第一個參數是觀測的數量,然後分鐘,然後最大值,用逗號分隔。

df[1:5,1:5] 
     X1   X2  X3  X4  X5 
1 0.4375043 0.76986901 0.1154772 0.8861121 0.0275067 
2 0.4024352 0.19291795 0.7496475 0.5159706 0.8768299 
3 0.3164539 0.02212373 0.2091863 0.2792025 0.5175030 
4 0.2496215 0.51070780 0.8462652 0.2604232 0.9109863 
5 0.8450932 0.68503812 0.2391174 0.0220619 0.4943907 

至於你的指數分佈,如果我是正確的,如果U是0和1,則-ln(U)之間的均勻分佈/λ是指數分佈的λ參數。 LN函數是R.

log

用下面的代碼:

require(fitdistrplus) 
set.seed(1) 
df<-runif(100000,0,1) 
df<-(-log(df)) 
png('fit.png') 
descdist(df) 
dev.off() 

你得到這個情節:數據似乎遵循指數分佈(如預期)

enter image description here

+0

謝謝!你會知道如何應用反演嗎? – john

+0

你的意思是像'-log(df)/ lamda' ='-log(df)',你想'lambda = 1'嗎? – etienne

+0

'複製'是無用的,並放慢速度!嘗試'rbenchmark :: benchmark(runif(100 * 100),replicate(100,runif(100)))'''replicate'解決方案慢兩倍。 – Tim