0

在 R 中建模的方程

数据结构

该变量gdp_pc_ppp对应于方程中的 y。变量gdp_pc_ppp已经从最小值到最大值排序。变量world_pop_share对应于方程中的 p。

我需要在 R 中编写代码来创建一个新变量,如下所示:

For the first row, it evaluates to NA 

   For the second row: (651.9531 - 378.5343)*9.568926e-03*2.636202e-03  

   For the third row: ((742.9709 - 651.9531)*8.084378e-03*9.568926e-03) 
             + ((742.9709 - 378.5343)*8.084378e-03*2.636202e-03) 

   For the fourth row: ((744.1971 - 742.9709)*1.878016e-03*8.084378e-03) 
              + ((744.1971 - 651.9531)*1.878016e-03*9.568926e-03)
              + ((744.1971 - 378.5343)*1.878016e-03*2.636202e-03) 

依此类推,以进行以下观察。

我需要在不同的年份这样做,因此,我试图在整洁的诗句语法中做到这一点。

例如:

d = d %>%
    group_by(year) %>%
    mutate( INSERT HERE FUNCTION THAT WOULD CALCULATE EQUATION ABOVE )

谢谢你。

4

1 回答 1

0

我认为这些或多或少是你的数据。

data <- data.frame(country=c("Moz.", "Eth.", "Mya.", "Mal.", "Uga."),
                   year= c(1990, 1990, 1990, 1990, 1990),
                   gdp_pc_ppp=c(378.5, 651.9, 742.9, 744.2, 782.0),
                   world_pop_share=c(2.6e-3,9.5e-3,8.1e-3,1.8e-3,3.5e-3))

为了做你想做的事,我写了这个函数。

my.math <- function(data, y, p) {

  # check args
  if(!is.data.frame(data))
    stop("Bad input!")

  # Do the math
  out <- sapply(2:nrow(data), (function(i){
    p.i <- data[i, p]
    y.i <- data[i, y]
    sum(sapply(1:i, (function(j){
      p.tmp <- data[j, p]
      y.tmp <- data[j, y]
      (y.i - y.tmp) * p.i * p.tmp
    })), na.rm = TRUE)
  }))
  return(c(NA, out))
}

这就是你如何得到你的结果。它是否按预期工作?

my.math(data,
        y = 3, # your y is the third column
        p = 4) # your p is the fourth column)

在我手中,它返回:

[1]         NA 0.00675298 0.01467671 0.00330876 0.00934430
于 2017-08-23T00:04:36.683 回答