Giới hạn niềm tin cho ECDF


7

Tôi đang cố gắng tạo ECDF (và độ tin cậy bị ràng buộc) từ dữ liệu trong Python. Tôi có thể tạo ECDF khá dễ dàng bằng numpycách sắp xếp và sử dụng linspace. Tuy nhiên, tôi không hoàn toàn chắc chắn giới hạn tin cậy thích hợp là gì và dường như không có bất kỳ thư viện tích hợp nào tính toán giới hạn ( statsmodelsdường như chỉ đưa ra ECDF).

Nếu tôi muốn một sự tự tin sáng suốt bị ràng buộc bởi1αcó phù hợp để sử dụng bất đẳng thức DKW để tính toán vùng của tôi với

Cn(α)=12nlog(2α),

Ở đâu nsố lượng quan sát trong mẫu của tôi là gì? Như vậy nếuF(x) là ECDF của tôi, giới hạn trên và dưới của tôi sẽ là

UB(x)=min(1,F(x)+Cn(α))
LB(x)=max(0,F(x)Cn(α))

MATLAB có chức năng ECDF tích hợp , nhưng tôi không có nhiều may mắn để hiểu cách áp dụng Công thức của Greenwood (được tham chiếu ở phía dưới) để tạo giới hạn.


1
Hãy xem stats.stackexchange.com/questions/298290/ và nhận xét của tôi ở đó. Nhìn vào mã của ecdf.ksCI trong gói CRAN sfsmisc. Mã đó rất đơn giản (tôi đã viết nó ...) vì vậy nên dễ dịch sang python ...
kjetil b halvorsen

1
Có gì không phải là hoàn toàn rõ ràng là bạn yêu cầu điểm khôn ngoan vọt, nhưng đề nghị sử dụng một sự bất bình đẳng, DKW , đó là chủ yếu được sử dụng để tìm đồng thời giới hạn sự tự tin. Xin lưu ý: Cách tiếp cận của Greenwood là khôn ngoan.
Jim

@Jim Vì vậy, việc áp dụng phương pháp đó ở trên chỉ là không chính xác, hoặc thay vào đó nó sẽ mang lại cho tôi sự tự tin đồng thời bị ràng buộc?
ALollz

1
Nó sẽ cung cấp cho bạn một trong những đồng thời. Sẽ tốt thôi nếu đó là những gì bạn đang theo đuổi. Nhưng lưu ý rằng một CI đồng thời rộng hơn một điểm khôn ngoan.
Jim

Câu trả lời:


2

Trong loại bảng điều khiển của Matlab:

edit ecdf

Nó mở mã nguồn trong trình soạn thảo.

Chuyển đến dòng 194:

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

Đây là sự khởi đầu của khối mã tính các giới hạn dưới - và trên (độ tin cậy) : [Flo, Fup]. Khối mã dài 30 dòng và khá đơn giản. Đăng dưới đây để thuận tiện cho bạn:

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

Căn bậc hai của công thức Greenwood, nghĩa là

S(t)ti<Tdiri(ridi),

được thực hiện trong dòng 203 như:

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

Bạn có thể lấy nó từ đây? Cho tôi biết.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.