求给定区间内标准正态分布的均值

HBa*_*Bat 5 r normal-distribution mean

我想找到给定区间内标准正态分布的均值。

例如,如果我将标准正态分布一分为二 ([-Inf:0] [0:Inf]),我想得到每一半的平均值。

以下代码几乎完全符合我的要求:

divide <- 2
boundaries <- qnorm(seq(0,1,length.out=divide+1))
t <- sort(rnorm(100000))
means.1 <- rep(NA,divide)
for (i in 1:divide) {
    means.1[i] <- mean(t[(t>boundaries[i])&(t<boundaries[i+1])])
  }    
Run Code Online (Sandbox Code Playgroud)

但是我需要一种更精确(和优雅)的方法来计算这些数字(means.1)。

我尝试了以下代码但它不起作用(可能是因为我缺乏概率知识)。

divide <- 2
boundaries <- qnorm(seq(0,1,length.out=divide+1))
means.2 <- rep(NA,divide)
f <- function(x) {x*dnorm(x)}
for (i in 1:divide) {
  means.2[i] <- integrate(f,lower=boundaries[i],upper=boundaries[i+1])$value
}    
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?提前致谢。

Rco*_*ter 3

问题是 dnorm(x) 在区间(-Inf 到 0)中的积分不是 1,这就是你得到错误答案的原因。要进行校正,您必须将得到的结果除以 0.5(积分结果)。喜欢:

func <- function(x, ...) x * dnorm(x, ...)
integrate(func, -Inf, 0, mean=0, sd=1)$value / (pnorm(0, mean=0, sd=1) - pnorm(-Inf, mean=0, sd=1)) 
Run Code Online (Sandbox Code Playgroud)

使其适应不同的间隔应该很容易。

  • @HBat `...` 允许您通过一个函数将参数传递给另一个函数。在此示例中,“...”让 Rcoster 在调用“func”时指定“mean”和“sd”,即使它们未在定义中命名。刚刚被传递到“dnorm”(它们被命名的地方)。 (2认同)