在r中集成一个函数

时间:2016-12-28 02:36:39

标签: r vector integral

我有以下功能:

  Demandfunction_m1 <- function(y) {y<- exp(coefm1[1,]+x*coefm1[2,])
  return(y)}

在下一步中,我想计算数据集中每个观察值的曲线下面积。

我能够为每一次观察整合功能。看起来像这样(每个观察都有自己的整合限制):

 obs1<-integrate(Demandfunction_m1,3,16)
 obs2<-integrate(Demandfunction_m1,5,12)
 obs3<-integrate(Demandfunction_m1,4,18)

......等等

我的数据集有260个观察结果,我问自己是否有更简单的方法来计算曲线下面积。

我找到了这个解决方案:

Integrate function with vector argument in R

surv <- function(x,score) exp(-0.0405*exp(score)*x) # probability of     survival
area <- function(score) integrate(surv,lower=0,upper=Inf,score=score)$value
v.area <- Vectorize(area)

scores <- c(0.5, 0.6, 0.7, 0.8, 0.9, 1, 1.1)  # 7 different scores
v.area(scores)
# [1] 14.976066 13.550905 12.261366 11.094542 10.038757  9.083443  8.219039

我试图将此应用于我的R-Skript:

Demandfunction_m1 <- function(y) {y<- exp(coefm1[1,]+x*coefm1[2,])
return(y)}
area <- function(x)    integrate(Demandfunction_m1,lower=c(3,5,4),upper=c(16,12,18))$value
v.area <- Vectorize(area)

然后我不知道接下来要做什么。

你有什么建议吗?

1 个答案:

答案 0 :(得分:0)

您的需求函数没有意义。你正在传递一个你不用来进行任何计算的参数y ......

Demandfunction_m1 <- function(x,a,b) {exp(a+x*b)}
area<-function(arg1, arg2, low, high) { integrate(Demandfunction_m1, lower=low, upper=high, a=arg1, b=arg2)$value }
v.area<-Vectorize(area)

lows<-c(3,5,4)
highs<-c(16,12,18)
result <- v.area(rep(coefm[1,],3), rep(coefm1[2,],3), lows, highs) 

#if you want to use different coefficients for a and b, just replace the repeated coef with a vector.
result <- v.area(c(1,2,3), c(10,9,8), lows, highs) 
#equivalent to integrate(exp(1 + x*10), lower=3, upper=16)), integrate(exp(2 + x*9), lower=5, upper=12)), integrate(exp(3 + x*8), lower=4, upper=18))