如何将正态累积分布函数拟合到数据中

6

我已经生成了一些数据,这些数据实际上是一个累积分布。下面的代码给出了我的数据中的X和Y的示例:

X<- c(0.09787761, 0.10745590, 0.11815422, 0.15503521, 0.16887488, 0.18361325, 0.22166727,
0.23526786, 0.24198808, 0.25432602, 0.26387961, 0.27364063, 0.34864672, 0.37734113,
0.39230736, 0.40699061, 0.41063824, 0.42497043, 0.44176913, 0.46076456, 0.47229330,
0.53134509, 0.56903577, 0.58308938, 0.58417653, 0.60061901, 0.60483849, 0.61847521,
0.62735245, 0.64337353, 0.65783302, 0.67232004, 0.68884473, 0.78846000, 0.82793293,
0.82963446, 0.84392010, 0.87090024, 0.88384044, 0.89543314, 0.93899033, 0.94781219,
1.12390279, 1.18756693, 1.25057774)

Y<- c(0.0090, 0.0210, 0.0300, 0.0420, 0.0580, 0.0700, 0.0925, 0.1015, 0.1315, 0.1435,
0.1660, 0.1750, 0.2050, 0.2450, 0.2630, 0.2930, 0.3110, 0.3350, 0.3590, 0.3770, 0.3950,
0.4175, 0.4475, 0.4715, 0.4955, 0.5180, 0.5405, 0.5725, 0.6045, 0.6345, 0.6585, 0.6825,
0.7050, 0.7230, 0.7470, 0.7650, 0.7950, 0.8130, 0.8370, 0.8770, 0.8950, 0.9250, 0.9475,
0.9775, 1.0000)

plot(X,Y)

我想从这些数据中获取中位数、平均数和一些分位数信息(例如5%,95%)。我考虑的方法是将定义的分布拟合到它上面,然后积分以获得我的分位数、平均值和中位数值。
问题是如何将最适当的累积分布函数拟合到这些数据中(我预计这可能是正态累积分布函数)。
我已经看到了很多拟合概率密度函数的方法,但是我找不到任何关于拟合累积分布函数的内容。
(我意识到这可能对你们许多人来说是一个基础问题,但这让我感到困扰!!)
提前致谢。

你是如何“生成”这些数据的? - Dason
来看一下这个:使用R进行概率分布拟合(Vito Ricci) - Barranka
1个回答

8
也许您可以使用nlm来查找参数,以使观察到的Y值与正态分布的预期值之间的平方差最小化。这里是使用您的数据的示例。
fn <- function(x) {
   mu <- x[1];
   sigma <- exp(x[2])
   sum((Y-pnorm(X,mu,sigma))^2)
}
est <- nlm(fn, c(1,1))$estimate

plot(X,Y)
curve(pnorm(x, est[1], exp(est[2])), add=T)

很遗憾,我不知道在不对变量进行exp转换的情况下约束sigma>0的简单方法。但拟合似乎是合理的。

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接