[英]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定理公式
輸出是:
第三個人一定要喜歡別人。
問題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.