2013-05-25 4 views
-2

Что делает мой блок кода, это заполнить матрицу 4X100000 либо T F. F. позволяет назвать матрицу X. то Xij ~ Bernoulli (P) и P ~ normal (0.5, 0,15) где max (P) = 1 и min (P) = 0.R: статистика/вычислительная эффективность

Статистика очень неэффективна. Если есть распределение, которое придерживается вышеприведенный процесс, пожалуйста, помогите мне также.

Вычисление происходит очень медленно, потому что я должен заполнить всю матрицу 1 запись на 1 запись, которая каждый раз будет случайной. Есть ли способ сократить время, затрачиваемое значительно? Это крайне неэффективно.

Статистика проблема эффективности здесь

x = rnorm(100000,mean = 0.5,sd = 0.15) 
x[x > 1] = 1 
x[x < 0] = 0 

probability = function(x){ 
    x.sam = sample(x,1) 
    p = c(x.sam,1-x.sam) 
    return(p) 
} 

aggro2 = function(x){ 
    aggro2 = sample(c(T,F),1, prob = probability(x)) 
    return(aggro2) 
} 

Вычислительная проблема эффективности здесь

ptm = proc.time() 
aggro =c() 
n=100000 
for (i in 1:(4*n)){ 
    cat(round(i/(4*n)*100,2),"\n") 
    aggro = c(aggro, aggro2(x)) 
} 
aggro.mat = matrix(aggro,4,n) 

elapsed = proc.time()[3] - ptm[3] 
cat(elapsed) 

ответ

7

Как об этом?

system.time({ 
    x <- rnorm(400000,mean = 0.5,sd = 0.15) ## pick normal variables 
    x2 <- pmin(1,pmax(0,x))     ## bound at 0 and 1 
    mids <- which(x2>0 & x2<1) 
    x2[mids] <- rbinom(length(mids),prob=x2[mids],size=1) 
    res <- matrix(x2,ncol=4) 
}) 

Это не похоже на то, что вы делаете, но кажется, что (?) Соответствует вашему описанию.

истекшее время: 0.443 секунды

Несколько вещей, которые вы делаете, будет излишне медленно:

  • используя for петлю вместо векторизации
  • создания вектора, добавляя вместо выделение всего вектора, а затем замена элементов
  • печать в ходе цикла for
+2

+1 Большой (и быстрый) ответ. Понял меня немного, чтобы понять это. Умное использование pmin и pmax, а также без излишней выборки случайных вариаций с вероятностью 1 и 0! –

+0

Распределение бинома не подходит, но в остальном просто блеск! спасибо! –

+0

Что значит «распределение бинома не подходит»? 'rbinom (n, prob, size = 1)' является образцом 'n' испытаний Bernoulli с вероятностью' prob' ... что я и думал, что вы хотите –

Смежные вопросы