簡體   English   中英

Matlab中二項分布的Laplace逼近

[英]Laplace approximation for binomial distribution in matlab

我使用bionrnd()函數生成隨機向量,並使用拉普拉斯近似公式近似二項式分布。 但是拉普拉斯直方圖的劑量不像二項分布直方圖。 我的編碼錯誤在哪里? 請幫助我,這是我的代碼:

clear
clc
close all

n = input ('Please Enter Number of Exams : ');
p = input ('Please Enter Probability : ');

eta=n*p;
sigma=sqrt(n*p*(1-p));

for x=1:n*100;
a=rand(1,n);
b=0;
for i=1:n
    if(a(i)>=1-p)
        b=b+1;
    end
end
c(x)=b;
d(x)=binornd(n , p);
e(x)=(1./(sqrt(2*pi*x*p*(1-p)))).* exp(-(((x+1)*p-(x*p)).^2)./(2*x*p*(1-p)));

end

E=sigma*e+eta;

histfit(c);
axis([0 n 0 inf])
M = mean(c);
varc=var(c);
disp(['var is : ', num2str(varc)]);
disp(['Mean is : ', num2str(M)]);
figure
histfit(d);
axis([0 n 0 inf])
M2 = mean(d);
varc2=var(d);
disp(['var is : ', num2str(varc2)]);
disp(['Mean is : ', num2str(M2)]);
figure
histfit(e,100);
axis([0 n 0 inf])
M3 = mean(e);
varc3=var(e);
disp(['var is : ', num2str(M3)]);
disp(['Mean is : ', num2str(M3)]);

e(x)是此鏈接中的Laplace近似公式: De Moivre Laplace定理公式

輸出是: n = 100和p = 0.5的運行代碼的輸出

第三個人一定要喜歡別人。

問題1: c(x)d(x)是具有給定概率分布的隨機數列表。 當繪制c(x)d(x)的直方圖時,您正在繪制每個數字的出現頻率。 該頻率剛好等於分布。

e(x)是完全不同的對象。 您已將其編碼為概率分布本身 ,而不是一組樣本值。 e(x)中的值與c(x)d(x)的值進行比較。 前者是浮點數列表,而后者是整數列表。 e(x)的出現頻率繪制為直方圖是沒有意義的。

解決此問題的最簡單方法可能是將e重寫為函數,在分布e生成一組隨機樣本,然后將它們繪制為直方圖。 然后,您將像對待其他發行版一樣對待e 請查看http://au.mathworks.com/matlabcentral/fileexchange/26003-random-numbers-from-a-user-defined-distribution ,以了解執行此操作的方法。

問題2:我不認為

e(y)=(1./(sqrt(2*pi*y*p*(1-p)))).*exp(-(((y+1)*p-(y*p)).^2)./(2*y*p*(1-p)));

是分配公式的正確翻譯。 你應該有

e(y) = (1./(sqrt(2*pi*n*p*(1-p)))).*exp(-((y-n*p)).^2)./(2*n*p*(1-p)));

請注意,我已將公式寫為新變量y的函數,因為由於上述原因,您仍然需要這樣做。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM