Was Sie beschreiben, ist die Verwendung der method of moments, um eine Verteilung zu definieren. Solche Methoden sind im Allgemeinen in der Statistik unbeliebt. Sie können jedoch pearsonrnd
auschecken, was abhängig von Ihren Daten gut funktionieren kann.
Stattdessen würde ich empfehlen, die empirical CDF für die Daten mit ecdf
direkt zu finden und diese in Verbindung mit inverse sampling zu verwenden, um Zufallsvariablen zu generieren. Hier ist eine grundlegende Funktion, die das tun:
function r=empiricalrnd(y,varargin)
%EMPIRICALRND Random values from an empirical distribution
% EMPIRICALRND(Y) returns a single random value from distribution described by the data
% in the vector Y.
%
% EMPIRICALRND(Y,M), EMPIRICALRND(Y,M,N), EMPIRICALRND(Y,[M,N]), etc. return random arrays.
[f,x] = ecdf(y);
r = rand(varargin{:});
r = interp1(f,x,r,'linear','extrap');
Sie können mit den Optionen für interp1
spielen, wenn Sie mögen. Und hier ist ein schneller Test:
% Generate demo data for 100 samples of log-normal distribution
mu = 1;
sig = 1;
m = 1e2;
rng(1); % Set seed to make repeatable
y = lognrnd(mu,sig,m,1);
% Generate 1000 random variates from data
n = 1e3;
r = empiricalrnd(y,n,1);
% Plot CDFs
ecdf(y);
hold on;
ecdf(r);
x = 0:0.1:50;
plot(x,logncdf(x,mu,sig),'g');
legend('Empirical CDF','CDF of sampled data','Actual CDF');
Per Definition, wenn es verzerrt ist, ist es nicht normal, wenn es normal ist, ist es nicht verzerrt. Also was ist es? Haben Sie darüber nachgedacht, Ihre empirischen Daten einfach zu erfassen? – pjs
Es ist verzerrt. Ich kann die vier Momente aus meiner Probe perfekt herausfinden, aber ich habe Schwierigkeiten, eine Funktion zu finden, die die vier Momente als Argumente nimmt und mir eine Reihe von simulierten Werten gibt. Danke! –