2016-11-20 4 views
0

Я действительно надеюсь, что вы можете помочь мне с проблемой, которую я не могу решить самостоятельно. Я пытаюсь запрограммировать базовую модель урны для веб-приложения. Я хочу рассчитать вероятности конкретных случайных событий в соответствии с различными методами рисования в модели с двумя разными цветами.Модель Urn в R (пытается рассчитать вероятности случайных событий)

Состав урны (красный и черные шары) задаются в векторе < -c (number_red, number_black)

Случайное событие указано в другом vecotor, позволяет сказать б < -c («красный», «красный», «черный», «красный») или любая другая комбинация красных и черных шаров.

Теперь вы хотите рассчитать вероятность события (вектор b), когда шары равны 1) заменяется в урне, и порядок имеет значение 2) НЕ заменяется в урне, и порядок имеет значение 3) НЕ заменен в урну, и порядок не имеет значения 4) заменен в урну, и порядок не имеет значения

я придумал несколько различных идей, но ни один из них действительно не работал ... В сначала я написал fuctions, чтобы определить, сколько различных комбинаций можно использовать в каждом из сценариев.

stan = function(n,x) {return(n^x)} 
perm = function(n, x) {return(factorial(n)/factorial(n-x))} 
komb = function(n, x) {return(factorial(n)/(factorial(n-x)*factorial(x)))} 
komb2 = function(n, x) {return(factorial(n+x-1)/(factorial(n-1)*factorial(x)))} 

Но тогда я действительно не знал, как их применять, чтобы рассчитать окончательные вероятности.

Я также экспериментировал с циклами для того, чтобы эмулировать древовидную диаграмму, но для меня это стало слишком сложным. Например:

c <- c(number_red/(number_red+number_black), number_red/(number_red+number_black)) 
b <- c("red","black","red") 
b[b=="red"]<-1 
[b=="black"]<-2 
b<-as.numeric(b) 

vec<-NULL 

for (i in b){ 
vec<-c(vec, c[i])} 

prod(vec) 

Решение, как это дает правильные результаты для задачи № 1, но я действительно не знаю, как применить его к другим проблемам, так как я должен был бы найти способ, чтобы изменить вектор с в соответствии с состав вектора b каждый раз, когда я запускаю цикл.

Конечно, я экспериментировал с различными идеями, но ни один из них действительно не работает. Я был бы очень благодарен, если бы кто-то помог мне с моей проблемой.

Бест, Генри

+0

во втором кодовом блоке, 'c' - доля шаров, в то время как в тексте' c' есть количество мячей, не могли бы вы сделать это ясно? и 'c' - также имя внутренней функции, вы можете лучше выбрать другие имена. – mt1022

+0

Я использовал пропорции, потому что они представляют вероятности нарисовать один шар. Таким образом, каждый раз, когда цикл работает, либо вероятность рисования красного шара, либо рисования черного шара добавляется к vec, в соответствии с объединением b. В конце все единичные вероятности умножаются, чтобы получить общую вероятность b. Извините, я не был в курсе об этом –

ответ

0

Правильно ли это?

a <- c(red = 5, black = 5) 
b <- c("red","red","black","red") 


# (1) 
prod((a/sum(a))[b]) 

# (2) 
p <- c() 
n <- a 
for(i in b){ 
    p <- c(n[i]/sum(n), p) 
    n[i] <- n[i] - 1 
} 
prod(p) 

# (3) 
komb <- function(n, x) { 
    return(factorial(n)/(factorial(n-x)*factorial(x))) 
} 

n <- table(b) 

prod(sapply(names(n), function(i){ 
    komb(a[i], n[i]) 
}))/komb(sum(a), sum(n)) 

# (4) 
# I think it is the same as (1) as each sample is independent; 
+0

Большое вам спасибо. Очень полезно. Решения для № 1, 2 и 3 кажутся мне правильными. Однако, # 4 - это не то же самое, что и # 1, так как порядок рисованных шаров не имеет значения. Таким образом, вероятность события должна быть выше, чем в сценарии №1. Я думаю, что одним из способов его вычисления было бы умножить результат # 1 на количество возможных положений или ордеров b. В нашем примере есть 4 разных возможных соглашения (я их подсчитал) ... Но как я могу рассчитать количество возможных аранжировок, если они меняются? Я ищу абстрактное решение. –

+0

один тонкий, я пытался это, но он не дает правильный результат (и, вероятно, это очень неправильно, так как я пытался изменить решение проблемы № 3) komb2 = function (n, x) {return (factorial (n + x -1)/(факториала (п-1) * факториала (х)))} п <- таблица (б) прод ( sapply (имена (п), функция (я) { komb2 (а [ i], n [i]) }) )/komb2 (сумма (a), сумма (n)) –

+0

Поверьте мне, это то же самое, что и 1. – mt1022

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