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

标签 r

我生成了一些实际上是累积分布的数据,下面的代码从我的数据中给出了 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%)。我想这样做的方法是将定义的分布拟合到它,然后整合以获得我的分位数、平均值和中值。

问题是如何为这些数据拟合最合适的累积分布函数(我预计这很可能是正态累积分布函数)。

我已经看到了很多适合 PDF 的方法,但我找不到关于适合 CDF 的任何内容。

(我意识到这对你们中的许多人来说似乎是一个基本问题,但它让我很挣扎!!)

提前致谢

最佳答案

也许你可以使用 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)

不幸的是,我不知道用这种方法来约束 sigma>0 而不做 exp 的简单方法。变量的变换。但合身似乎合理

enter image description here

关于r - 如何将正态累积分布函数拟合到数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24662987/

相关文章:

r - all.equal() 的公差参数是如何工作的?

r - User-Function,已定义但未通过代码找到的形式对象

R:在 ggplot 中禁用科学记数法

sql - 创建一个以整列作为输入和输出的函数

r - 如何在单独的 jpeg 文件中分页 R 中的多个图?

向量和平均数的随机化

r - 读取数据时出错

用新数据替换部分数据框

r - 未找到 Python 共享库,未加载 Python 绑定(bind)。在 Mac 上的 RStudio 中

r - 如何从 ggplot2 中的 x 轴的 %m 中删除前导零