2014-12-07 88 views
0

我試圖實現R函數ecdf()在R中實現ECDF

我正在考慮兩種情況:一種用t一維,另一種用t作爲矢量。

#First case 
my.ecdf<-function(x,t) { 
      indicator<-ifelse(x<=t,1,0) 
      out<-sum(indicator)/length(x) 
      out 
    } 


#Second case 
my.ecdf<-function(x,t) { 
    out<-length(t) 
    for(i in 1:length(t)) { 
      indicator<-ifelse(x<=t[i],1,0) 
      out[i]<-sum(indicator)/length(t) 
    } 
    out 
} 

我如何檢查我是否在做正確的事的R功能ecdf()與否?該函數僅作爲參數x,因此我無法指定值t

回答

0

你可以只繪製的結果,並認爲它給了非常類似的東西:

# slightly improved version of my.ecdf 
my.ecdf<-function(x,t) { 
    out<-numeric(length(t)) 
    for(i in 1:length(t)) { 
    indicator <- as.numeric(x<=t[i]) 
    out[i] <- sum(indicator)/length(t) 
    } 
    out 
} 
# test 1 
x <- rnorm(1000) 
plot(ecdf(x)) 
lines(seq(-4, 4, length=1000), 
    my.ecdf(x, seq(-4, 4, length=1000)), 
    col='red') 
# test 2 
x <- rexp(1000) 
plot(ecdf(x)) 
lines(seq(0, 8, length=1000), 
    my.ecdf(x, seq(0, 8, length=1000)), 
    col='red') 
0

一般提示 - 您可以通過輸入其名稱不帶括號或參數控制檯查看任何功能的源代碼:

edcf 
function (x) 
{ 
    x <- sort(x) 
    n <- length(x) 
    if (n < 1) 
     stop("'x' must have 1 or more non-missing values") 
    vals <- unique(x) 
    rval <- approxfun(vals, cumsum(tabulate(match(x, vals)))/n, 
     method = "constant", yleft = 0, yright = 1, f = 0, ties = "ordered") 
    class(rval) <- c("ecdf", "stepfun", class(rval)) 
    assign("nobs", n, envir = environment(rval)) 
    attr(rval, "call") <- sys.call() 
    rval 
} 
+0

我知道這一點,但我不認爲它可以幫助我的問題。 – Egodym 2014-12-07 23:47:56