1

我还必须记住分布的偏度和峰度,这些都必须反映在模拟值中。

我的经验值是过去的股票收益(非标准正态分布)。

是否有现有的软件包可以为我做到这一点?我在网上看到的所有包裹都只有前两个时刻。

4

1 回答 1

1

您所描述的是使用矩方法来定义分布。这种方法在统计学中普遍失宠。但是,您可以签出pearsonrnd,这可能会根据您的数据正常工作。

相反,我建议直接找到数据的经验 CDF,并将ecdf其与逆采样结合使用以生成随机变量。这是一个可以做到这一点的基本功能:

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');

interp1如果您愿意,您可以使用这些选项。这是一个快速测试:

% 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');
于 2016-06-10T22:21:20.127 回答