我想编写一个代码来生成一个数据集,该数据集由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的数据集,则需要很长时间。
目标是创建不同的审查数据集,并为模拟审查不同的百分比。我一直在做一个数据集,这需要很长时间。如果这一切都有意义,请告诉我。
答案 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);