r - 根据分位数信息确定正态分布

标签 r statistics normal-distribution quantile

我想知道我怎么能让 R 告诉我 SD (作为 qnorm() 内置于 R 中的参数)对于 95% 极限值已知的正态分布?

例如,我知道我的法线的两个 95% 极限值分别是 158 和 168。所以,在 下面的 R 代码 SD 显示为“x”。 “y”(这个简单的 qnorm() 函数的答案)需要是 (158, 168), 然后 R 能告诉我应该是什么 x ?

y <- qnorm(c(.025,.975), 163, x)

最佳答案

正态分布的一般过程
假设我们有一个正态分布 X ~ N(mu, sigma) , 均值未知 mu和未知的标准偏差 sigma .我们的目标是解决 musigma ,给定两个分位数方程:

Pr(X < q1) = alpha1
Pr(X < q2) = alpha2
我们考虑标准化:Z = (X - mu) / sigma , 以便
Pr(Z < (q1 - mu) / sigma) = alpha1
Pr(Z < (q2 - mu) / sigma) = alpha2
换句话说,
(q1 - mu) / sigma = qnorm(alpha1)
(q2 - mu) / sigma = qnorm(alpha2)
RHS 是明确已知的,我们定义了 beta1 = qnorm(alpha1) , beta2 = qnorm(alpha2) .现在,上面简化为 2 个线性方程组:
mu + beta1 * sigma = q1
mu + beta2 * sigma = q2
该系统具有系数矩阵:
1  beta1
1  beta2
行列式 beta2 - beta1 .奇点的唯一情况是 beta2 = beta1 .只要系统是非奇异的,我们就可以使用solve解决 musigma .
想想奇点情况意味着什么。 qnorm对于正态分布是严格单调的。所以beta1 = beta2alpha1 = alpha2 相同.但这很容易避免,因为它符合您的规范,因此在下面我不会检查奇异性。
把上面总结成一个估计函数:
est <- function(q, alpha) {
  beta <- qnorm(alpha)
  setNames(solve(cbind(1, beta), q), c("mu", "sigma"))
  }
我们来做个测试:
x <- est(c(158, 168), c(0.025, 0.975))
#        mu      sigma 
#163.000000   2.551067 

## verification
qnorm(c(0.025, 0.975), x[1], x[2])
# [1] 158 168

我们也可以做一些随意的事情:
x <- est(c(1, 5), c(0.1, 0.4))
#      mu    sigma 
#5.985590 3.890277 

## verification
qnorm(c(0.1, 0.4), x[1], x[2])
# [1] 1 5

关于r - 根据分位数信息确定正态分布,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41132804/

相关文章:

r - 汇总了海量数据,如何用R来处理?

c# - 使用 .Net 的 StatisticFormula 库

normal-distribution - 为高斯马尔可夫随机场创建精度矩阵

r - 从全名中分离姓氏

r - 如何向 data.frame 的每组添加数字序列?

r - ggplot2如何在 map 边界(例如美国州)内保持抖动的位置?

python - Pandas corr() 返回 NaN 的频率太高

elasticsearch - 按比例计算修整平均值

r - 创建虚拟变量以进行双向方差分析

Python:从 NxM 正态分布中抽取的 NxM 样本数组