2017-12-22 16 views
2

$ n $個の独立したイベントがあるとします。それぞれは確率$ p_n $と関連する損失$ l_n $を持っています。私の目標は、すべての可能性のある損失額とそれに関連する確率のリストを作成することです。イベントの確率が結果によってグループ化される

最終的に、これを可変確率および損失額を伴う10-20イベントのセットに拡張したいと思います。これは全てRで行われる。

さまざまな結果は、パワーセット、例。 (A)、(B)、(C)、(AとB)、(AとC)、(BとC)、(AとBとC)これらの結果のそれぞれの確率は、各サブセット内の確率の積と、各サブセット内の損失の合計をとることによって合計損失とを得ることによって見つけることができる。

私の問題は、損失額を集計する方法です。つまり、パワーセット内の一意的な損失額をすべて見つけ、その確率を生成する方法です。

私はinclusion/exclusion principleと一緒に途中にいるように感じますが、特にイベントの数が3以上になると、それを私の特定の問題にどのように適用するかについて頭を悩ますことはできません。中間サイズのセット、例えば上の2つの要素セットをどのようにグループ化するか。

答えて

1

この問題には、わずか2^20(100万回程度)の可能性があります。ブルートフォースはうまく動作します。ここで

n <- 15 
set.seed(17) 
p <- runif(n) 
loss <- ceiling(rgamma(n, 3, 1/2)) 
signif(rbind(Probability=p, Loss=loss), 2) 

は、この例の入力値は次のとおりです:

Probability 0.16 0.97 0.47 0.78 0.41 0.54 0.21 0.19 0.78 0.19 0.43 0.0023 0.83 0.83 0.96 
Loss  12.00 4.00 10.00 8.00 10.00 6.00 12.00 5.00 4.00 8.00 8.00 8.0000 4.00 4.00 4.00 

は、expand.gridで設定された電力のバイナリ指標を生成してのは、適度な大きさのいくつかのデータを生成してみましょう、説明するために

可能なすべての結果の損失および可能性の比較的迅速な計算のために配列演算を使用する:

powerset <- t(expand.grid(lapply(p, function(x) 0:1))) 
probability <- apply(powerset * (2*p - 1) + (1-p), 2, prod) 
losses <- colSums(powerset * loss) 

nが20である場合、このエージングのXeonワークステーションで、これは5秒までかかります)

集計tapplyを用いて損失によっては:

x <- tapply(probability, losses, sum) 

nである場合(これは別の1〜2秒を要します(a)確率和を単一性に照合し、(b)期待損失が個々の事象の予想損失の合計であることを確認することによって一貫性を確認することができる。

if(sum(probability) - 1 != 0) warning("Unnormalized probability.") 
if(sum(probability * losses) - sum(p*loss) != 0) warning("Inconsistent result.") 

結果の損失分布をプロットしましょう。

library(ggplot2) 
ggplot(data.frame(Loss=as.numeric(names(x)), Probability=x), 
     aes(Loss, Probability)) + 
    geom_col(color="White") 

Figure

+1

おっと、それはそれをやります。とてもいいです、ありがとう! –

関連する問題