我可以通过apply传递行元素作为参数吗?如何?

时间:2017-04-14 15:25:45

标签: r function parameter-passing apply mle

从一些样本数据开始:

sample_data <- data.frame(id = 1:3, 
                          x = c(128, 113, 126), 
                          n = c(347, 344, 347), 
                          m = c(335, 334, 347), 
                          index = c(11, 9, -1))

theta <- matrix(c(0.5 ,0.5, 2, 2), nrow=2, ncol=2)

lhs <- function(a, b, g, d, dat){

    beta(a + dat$x, b + dat$n - dat$x) / beta(a, b) * beta(g, d + dat$n) / beta(g, d)
}

函数lhs返回与参数dat相同行数的向量。

rhs <- function(dat, ...){

  n = dat$n
  m = dat$m
  x = dat$x
  index = dat$x

  temp <- data.frame(i = 0:index, 
                 n = rep(n, index + 1) , 
                 m = rep(m, index + 1) , 
                 x = rep(x, index + 1))

  sum(beta(a + temp$x, b + temp$m - temp$x + temp$i) / beta(a,b) * beta(g + 1, d + temp$m + temp$i) / beta(g, d))

}

函数rhs仅适用于单行,因为每个观察值都有不同的索引值(rhs内的和的索引)。目的是在dat中每行返回一个值。我试图在函数LL(下面)中应用。

LL <- function(theta, dat){
  a <- theta[1,1]
  b <- theta[2,1]
  g <- theta[1,2]
  d <- theta[2,2]

  .lhs <- lhs(a, b, g, d, dat)

  .rhs <- ifelse(index > -1, apply(dat, 1, rhs), 0)

  sum(log(.lhs+log.rhs))
 }

似乎我需要能够将index,n,m和x的值传递给给定行的rhs。也就是说,不是长度向量(数据$ n),而是传递该行的n值应用于函数LL。

这是正确的做法吗?我怎么能这样做?

感谢。

修改

我清理了一些东西并对样本数据稍作修改。正确的回报值 - 我想! - 可以通过(明确传递a,b,g和d)

来到达
sum(lhs(a = theta[1,1], 
        b = theta[2,1],
        g = theta[1,2],
        d = theta[2,2],
        sample_data)) +
 rhs(sample_data[1,]) +
 rhs(sample_data[2,]) +
 rhs(sample_data[3,])

0 个答案:

没有答案