ECDFの信頼限界


7

PythonのデータからECDF(および信頼限界)を作成しようとしています。ECDFはnumpy、をソートして使用することで、かなり簡単に生成できlinspaceます。しかし、適切な信頼限界が何であるかは完全にstatsmodelsはわかりません。また、境界を計算する組み込みライブラリはないようです(ECDFを与えるだけのようです)。

ポイントごとの信頼限界が必要な場合1αそれを使用するのが適切であるDKWの不平等をして、私の地域を計算します

Cα=12ログ2α

どこ サンプルの観測数は何ですか?したがって、Fバツ 私のECDFです。私の上限と下限は

UBバツ=1Fバツ+Cα
LBバツ=最高0FバツCα

MATLABには組み込み関数ECDFがありますが、境界を生成するためにGreenwoodの公式(下を参照)を適用する方法を理解するのにあまり運がありませんでした。


1
stats.stackexchange.com/questions/298290/…と私のコメントをご覧ください。CRANパッケージsfsmiscのecdf.ksCIのコードを見てください。そのコードは単純です(私が書いたものです...)ため、Pythonに簡単に変換できます...
kjetil b halvorsen

1
完全に明確ではないのは、点ごとの範囲を求めることですが、同時信頼限界を見つけるために主に使用される不等式DKWを使用することをお勧めします。注意:Greenwoodのアプローチはポイントワイズです。
ジム

@ジムそれでは、上記の方法を適用するのは正しくないでしょうか、それとも、同時に信頼限界が得られますか?
ALollz

1
それはあなたに同時の1つを与えるでしょう。それがあなたが求めているものなら、それは問題ありません。ただし、同時CIはポイント単位のCIより広いことに注意してください。
ジム

回答:


2

Matlabのコンソールタイプ:

edit ecdf

エディターでソースコードを開きます。

194行目に移動します。

if nargout>2 || (nargout==0 && isequal(bounds,'on'))

これは、下限(信頼)と上限(境界)を計算するコードブロックの始まりです[Flo, Fup]。コードブロックは30行で、非常に簡単です。あなたの便宜のために以下に掲載:

if nargout>2 || (nargout==0 && isequal(bounds,'on'))
     % Get standard error of requested function
     if cdf_sf % 'cdf' or 'survivor'
         se = NaN(size(D));
         if N(end)==D(end)
            t = 1:length(N)-1;
         else
            t = 1:length(N);
         end
         se(t) = S(t) .* sqrt(cumsum(D(t) ./ (N(t) .* (N(t)-D(t))))); % <--- line 203
     else % 'cumhazard'
         se = sqrt(cumsum(D ./ (N .* N)));
     end

     % Get confidence limits
     zalpha = -norminv(alpha/2);
     halfwidth = zalpha*se;
     Flo = max(0, Func - halfwidth);
     Flo(isnan(halfwidth)) = NaN; % max drops NaNs, put them back
     if cdf_sf % 'cdf' or 'survivor'
         Fup = min(1, Func + halfwidth);
         Fup(isnan(halfwidth)) = NaN; % max drops NaNs
     else % 'cumhazard'
         Fup = Func + halfwidth; % no restriction on upper limit
     end
         Flo = [NaN; Flo];
         Fup = [NaN; Fup];
else 
     Flo = [];
     Fup = [];
end

グリーンウッドの公式の平方根、すなわち

StΣt<Tdrrd

203行で次のように実装されています。

se(t) = S(t) .* sqrt(cumsum(D(t) ./ (N(t) .* (N(t)-D(t)))));

ここからもらえますか?お知らせ下さい。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.