Файл: Цель работы Изучить способы аппроксимации функции плотности вероятности по данным наблюдений. Задачи.docx

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 10.11.2023

Просмотров: 31

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Аппроксимация плотности вероятности

Цель работы


Изучить способы аппроксимации функции плотности вероятности по данным наблюдений.

Задачи


1. Сгенерировать выборку случайных чисел.

2. Сформировать локальные оценки логарифма плотности вероятности по полученной выборке значений случайной величины.

3. По новой выборке локальных оценок логарифма плотности выполнить аппроксимацию функции плотности;



Исходные параметры для функции аппроксимации заданы в таблице 1.

n

A

a

lampda

g

200

[0.66; 0.33]

[0; 0]

[1; 0.1]

'N'


Ход работы


М-файл для работы представлен на рис. 2.

n = 200

A = [0.66 0.33];

a = [0 0];

lambda = [1 0.1];

g = 'N';

Approxpdf(n, A, a, lambda, g)

Рис. 2. М-файл для работы

Используя функцию Approxpdf(n,A,a,lampda,g), были получены локальные оценки логарифма плотности (см. рис. 3).



Рис. 3. Формирование локальных оценок логарифма плотности

На рис. 4 показаны результаты аппроксимации по полученным локальным оценкам.



Рис. 4. Результаты аппроксимации

Вывод


В процессе выполнения данной работы были изучены различные методы приближения функции плотности вероятности на основе имеющихся наблюдений. Для этого была создана выборка случайных чисел, на основе которой были получены локальные оценки логарифма плотности вероятности. Затем была создана новая выборка на основе этих оценок, и с ее помощью была выполнена аппроксимация функции плотности, указанной в задании.


function Approxpdf(n,A,a,lampda,g) X=GenRandom(n,A,a,lampda,'N'); [xv,fv,fz,m]=approx(X,1);

F=Truepdf(xv,A,a,lampda,'N');

subplot(211); plot(xv,log(fv),'ro-',xv,log(F),'b'); xlabel('X'); ylabel('log f'); legend('LF','LF*');


% n

объем-выборка




% R

Равномерное

N

Нормальное

% L

Логистическое

E

Экспоненциальное

% G

Гамма (хи-квадрат)









subplot(212); plot(xv,F,'k',xv,fz,'b-'); xlabel('X'); ylabel('f'); legend('F','F*'); function X=GenRandom(n,A,a,lampda,g)


% где A=[A1 A2 ...Am]

% a=[a1 a2...am] lampda=[lampda1 lampda2 ...lampdam]

% если f = 0.5N(5,1)+0.5N(11,2)

% A=[0.5 0.5] a=[5 11] lampda=[1 2] X=[];

for i=1:length(A) ni=n*A(i); switch g

case 'R'

Xi=a(i)+ lampda(i)*rand(ni,1); case 'N';

Xi=a(i)+ lampda(i)*(sqrt(-2*log(rand(ni,1)))).*sin(2*pi*rand(ni,1)); case 'E'

Xi=a(i)- lampda(i) *log(rand(ni,1)); case 'L'

Xi=a(i)+lampda(i)*log((1-rand(ni,1))./rand(ni,1)); case 'G'

ng=input(['n',num2str(i),'\n']); for j=1:ni

Xi(j)=a(i)+ lampda(i)*sum((randn(ng,1)).^2)/2; end

end

if size(Xi,2)>size(Xi,1) Xi=Xi';

end X=[X;Xi];

end

X=sort(X);
function F=Truepdf(X,A,a,lampda,g) F=0;

for i=1:length(A) switch g

case 'N';

F=F+A(i)*exp(-0.5*((X-a(i))/lampda(i)).^2)/(sqrt(2*pi)*lampda(i)); case 'E'

F=F+A(i)*exp(-(X-a(i))/lampda(i))/lampda(i); case 'L'

z=(X-a(i))/lampda(i); F=F+A(i)*1/lampda(i)*exp(-z)./(1+exp(-z)).^2;

case 'G'

n=input(['n',num2str(i),'\n']);

F=F+A(i)*(X-a(i)).^(n/2-1)/(lampda(i)^(n/2)*gamma(n/2)).*exp(-(X-a(i))/lampda(i)); end

end
function [xv,fv,fz,m]=approx(x,criteria)

% Дубов И.Р. Аппроксимация вероятностных законов в системах мониторинга:

% Владимир, 2001. –137с.

% criteria=0 или 1

x=sort(x); % упорядоченная выборка

n=length(x); for i=1:(n-1)

xv(i)=(x(i)+x(i+1))/2; end

xv=xv'; k=1:n;

d=sum(k.^-2); % Дисперсия ошибок

M=-1*sum(k.^-1); % пси-функция Эйлера (дигамма – функция) nr=n-1;

for i=1:nr fv(i)=exp(M)/(x(i+1)-x(i));

end

fv=fv'

lfv=log(fv); % lfv локальные оценок логарифма плотности вероятности

% Аппроксимация логарифма плотности

if criteria==0 [m,fest,lfz,a]=Malloca(xv,lfv,d);

else

for i=1:n-1 [yest,fest]=fit(xv,lfv,'x',i-1,1);

f(i)=abs(mean((lfv-yest).^2)-d);

j=i+1; [yest,fest]=fit(xv,lfv,'x',j-1,1);

c=abs(mean((lfv-yest).^2)-d); if c>f(i)

break; end

end m=i-1;

[lfz,fest]=fit(xv,lfv,'x',m,1); end

fz=exp(lfz);
function [yest,fest,a]=fit(x,y,f,m,s)

% y=X1(x)+X2(x)+X3(x) +Xm(x)+error of std s

% where Xj(x) bases function

% A=[X1(x) X2(x) X3(x) Xm(x)]

% % size of A is N*M

% for example if y(x)=a_0+a_1*x+a_2*x^2 a_m*x^m

% A=[1 X X^2 X^m]

% a=[a_0 a_1 a_m]

% where X=[x_1 x_2 x_n]'
if size(x,2)>size(x,1) x=x';

end

if size(y,2)>size(y,1) y=y';

end

if size(s,2)>size(s,1) s=s';

end n=length(x); s=s.*ones(n,1); si=1./s;

sg=sqrt(1/mean(si.^2)); sb=si*sg; Af=zeros(n,m+1);

for i=0:m Af(:,i+1)=(((eval(f)).^i));

end sa=sb(:,ones(1,m+1)); A=Af.*sa; alpha=A'*A;

b=y.*sb; Beta=A'*b; a=inv(alpha)*Beta; yest=Af*a;

fest=[num2str(a(1))]; for i=2:length(a)

fest=[fest,'+',num2str(a(i)),'*',f,'.^',num2str(i-1)]; end

%fest=['y=',fest]; temp=fest; n=length(temp)-1; j=1;

i=1;

while (j
if (temp(j)=='+')&(temp(j+1)=='-') fest(i)=[];

i=i-1; end i=i+1; j=j+1;

end
function [degree,fest,LF,a]=Malloca(xf,lfv,sd2)

%==================================================

% malloca criteria

% c=abs(mean((lfv-yest).^2)-d*(1-2*(j-1)/n))

%==================================================

n=length(xf); sd=sd2.^0.5; for i=2:n

[yest,fest]=fit(xf,lfv,'x',i-1,sd); f(i)=sum(((yest-lfv).^2)./sd2)-(n-2*(i-1)); j=i+1;

[yest,fest,a]=fit(xf,lfv,'x',j-1,sd);

c=sum(((yest-lfv).^2)./sd2)-(n-2*(j-1)); if c>f(i)

break; end

end degree=i-1;

[yest,fest,a]=fit(xf,lfv,'x',degree,sd); LF=yest;