代码之家  ›  专栏  ›  技术社区  ›  Kebtiz

从dnorm中获取平均值

  •  0
  • Kebtiz  · 技术社区  · 7 年前

    在下面的代码中,我试图从normal1和normal2中获得平均值,这样我就不必在 xintercept 中的值(3和0) geom_vline 函数调用。

    normal1 <- function(x) {
        dnorm(x, 3, 3)
    }
    
    normal2 <- function(x) {
        dnorm(x, 0, 2)
    }
    
    plot + stat_function(fun = normal1) +
           stat_function(fun = normal2) + xlim(c(-10, 15)) +
           geom_vline(xintercept = 3, linetype = "dashed") +
           geom_vline(xintercept = 0, linetype = "dashed")
    

    dnorm 呼叫ie

    x1 <- 3
    x2 <- 0
    
    normal1 <- function(x) {
        dnorm(x, x1, 3)
    }
    
    normal2 <- function(x) {
        dnorm(x, x2, 2)
    }
    

    我对R很陌生,对其中的函数或返回没有很强的把握。

    1 回复  |  直到 7 年前
        1
  •  2
  •   wolf_wue    7 年前

    也许你可以试试这样的

    plotter <- function(m1,m2){
      normal1 <- function(x) {
        dnorm(x, m1, 3)
      }
    
      normal2 <- function(x) {
        dnorm(x, m2, 2)
      }
      ggplot(data = data.frame(x=0), mapping = aes(x=x))+ 
      stat_function(fun = normal1) +
        stat_function(fun = normal2) + xlim(-10, 15) +
        geom_vline(xintercept = m1, linetype = "dashed") +
        geom_vline(xintercept = m2, linetype = "dashed")
    
    
    }
    

    因此可以重新计算normal1和normal2函数。事实上,它们是用可变平均值创建的,很容易用新值修改绘图。

    m_1 <- 4
    m_2 <- 2
    
    plotter(m_1, m_2)
    

    或者直接使用新值执行plotter()函数。


    远足

    事实上,计算一个函数的平均值,而这个函数的创建必然需要平均值,这有点令人困惑,但并非不可能。

    首先修改 plotter

    normal1 <<- function(x) {
      dnorm(x, m1, 3)
    }
    

    所以 normal1 功能在外部可用

    现在我们来看一下数学背景:函数的平均值或期望值与密度乘以变量本身的曲线下的面积重合。

    mean1 <- function(x){
    normal1(x)*x
    }
    

    哪里 法线1 被解释为密度。

    mean1_empirical <- integrate(mean1, lower = -Inf, upper = Inf)
    

    m_1 <- 4 (!) :

    4 with absolute error < 0.00019
    

    请注意:将此方法与现有函数一起使用是一种 实证方法