我想为以下输出拟合一个函数ecdf
:
x<-rnorm(100)
z<-ecdf(x)
请注意,我不想适合常规分布,而是适合通用函数。我最初的方法是使用lm
,但我无法检索z
用于执行拟合的单个值。
我也不知道如何使用内置ecdf
函数来做到这一点,但它很简单,可以自己编写,然后用来nls
进行拟合。这是ECDF函数:
ecdf2<-function(data) {
sorted.data<-data[order(data)]
return(data.frame('x'=sorted.data, 'y'=index(sorted.data)/length(sorted.data)))
}
这是使用它然后进行拟合:
require("pracma") #needed for erf()
e2<-ecdf2(x)
y<-e2$y
x<-e2$x
fit<-nls(y ~ 0.5 * (1 + erf((x - mu) / (sigma * sqrt(2)))))
如果你看fit
, mu 应该是 ~ 0 和 sigma 应该是 ~ 1,正如预期的那样。