как создать смоделированный цензурированный набор данных в MATLAB - PullRequest
0 голосов
/ 03 декабря 2011

Я хотел бы написать код для создания набора данных, подвергнутого цензуре с 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 ]

1 голос
/ 03 декабря 2011

Если у вас есть Statistical Toolbox, вы можете использовать функции PRCTILE :

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

или QUANTILE (в действительности используется prctile внутри).

pct = 0.1;
lod = quantile(x,pct);
0 голосов
/ 03 декабря 2011

Конечно, есть несколько способов приблизиться к этому, но очень простым подходом было бы использование оценочных 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);
...