2012-06-29 132 views
1

我有一個關係: Y = A + B + Cř獲得的概率分佈

我的平均值和標準偏差,b和c 和我想獲得y的概率分佈由蒙特卡洛模擬從這個 。

是否有一個函數或包或簡單的方法,我可以用它來做到這一點?

回答

3

我假設你假設你的輸入a,b和c是正態分佈的,因爲你說你可以用均值和標準差來定義它們。如果是這樣的話,你可以很快做到這一點,沒有任何特殊的包裝。

mu.a=33 
mu.b=32 
mu.c=13 
sigma.a=22 
sigma.b=22 
sigma.c=222 

n= a.large.number=10^5 
a=rnorm(n,mu.a,sigma.a) 
b=rnorm(n,mu.b,sigma.b) 
c=rnorm(n,mu.c,sigma.c) 
y=a+b+c 
plot(density(y)) 
mean(y) 
sd(y) 

請務必注意所有我們所做的關於yabc的假設。 如果你想做更復雜的事情,比如找出y的均值的取樣方差。然後多次執行這個程序來收集平均值並繪製它。

mysimfun=function(n,mu,sigma,stat.you.want='mean') 
    # mu is length 3 and sigma is too. 

{ 
n= a.large.number=10^5 
    a=rnorm(n,mu[1],sigma[1]) 
    b=rnorm(n,mu[2],sigma[2]) 
    c=rnorm(n,mu[3],sigma[3]) 
    y=a+b+c 
    plot(density(y)) 


return(ifelse(stat.you.want=='mean',mean(y),sd(y)) 
} 


mu=c(mu.a,my.b,mu.c) 
sigma=c(sigma.a,sigma.b,sigma.c) 
mi=rep(NA,100) 

然後在某種循環中運行它。

for(i in 1:100) {mi[i]=mysimfun(10,mu,sigma,stat.you.want='mean') } 

par(mfrow=c(2,1) 
hist(mi) 
plot(density(mi)) 

mean(mi) 
sd(mi) 
+0

這是偉大的非常感謝 –

2

將會有兩種方法:引導我認爲這是你可以通過蒙特卡羅的意思,或者如果你更感興趣的是理論不是從經驗分佈中,「頗」包及其朋友的distrSim構建估計「和 」distrTEst「

require(boot) 
ax <- rnorm(100); bx<-runif(100); cx<- rexp(100) 
dat <- data.frame(ax=ax,bx=bx,cx=cx) 

boot(dat, function(d){ with(d, mean(ax+bx+cx))}, R=1000, sim="parametric") 
boot(dat, function(d){ with(d, sd(ax+bx+cx))}, R=1000, sim="parametric") 
+0

感謝很有意思 –

+0

也:。。http://www.statoo.com/en/publications/bootstrap_scgn_v131.pdf –

+0

也:HTTP ://www.statmethods.net/advstats/bootstrapping.html –