如何在MATLAB中创建模拟的删失数据集

时间:2011-12-03 06:47:34

标签: matlab probability probability-theory

我想编写一个代码来生成一个数据集,该数据集由1个删失数据点和不同的删失百分比进行审查。 我有以下代码来生成一些随机数,但没有审查

n=input('Enter sample size:');
GM=input('Enter geometric mean:'); 
GSD=input('Enter geometric standard deviation:');
m=input('Enter desired number of dataset:');
x = lognrnd(log(GM), log(GSD),n,m);

我有以下代码来创建具有已知检测限(lod)值(LOD)的删失数据集,然后计算删除百分比值,并且我有一个数据集可供使用。

c = (x > lod); % c are values less than this number 
x(c) = lod;  % create single lod
sum(c)/length(c) % calculate percent censored

但我想要做的是为计算机提供所需的百分比审查,并让计算机找到lod对应于被审查的百分比。我可以手动输入lod值,但如果我想创建一个百分比为5-95的数据集,则需要很长时间。

目标是创建不同的审查数据集,并为模拟审查不同的百分比。我一直在做一个数据集,这需要很长时间。如果这一切都有意义,请告诉我。

2 个答案:

答案 0 :(得分:1)

如果您有统计工具箱,则可以使用函数PRCTILE

pct = 10;
lod = prctile(x, pct);

QUANTILE(它实际上使用了内部的prctile)。

pct = 0.1;
lod = quantile(x,pct);

答案 1 :(得分:0)

肯定有不止一种方法可以解决这个问题,但一种非常直接的方法是根据数据使用估计的PMF和CMF。

如果我想确定一个阈值,以便某个百分比的数据低于阈值,我会先这样做:

%# Get a histogram of the data
nbins = 100;
[counts xout]=hist(x,nbins);
pmf = counts/length(x);
cmf = cumsum(pmf);

%# Determine the threshold based on some percentage
pct = 0.05;
idx = find(cmf<0.05,1,'last')
thold = xout(idx);

%# in this instance, 5% of the data is below x(idx)
%# now the data can be thresholded
thresholded = x(x>thold);