0

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のデータセットを作成する場合は、非常に長い時間がかかります。

目標は、シミュレーション用に打ち切られた割合が異なるさまざまな打ち切りデータセットを作成することです。私は一度に1つのデータセットを実行してきましたが、非常に長い時間がかかります。これがすべて理にかなっている場合はお知らせください。

4

2 に答える 2

1

統計ツールボックスをお持ちの場合は、関数PRCTILEを使用できます。

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

またはQUANTILE(実際には内部でprctileを使用します)。

pct = 0.1;
lod = quantile(x,pct);
于 2011-12-03T18:11:31.240 に答える
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);
于 2011-12-03T16:00:03.090 に答える