cut vs findInterval

时间:2017-04-05 15:58:24

标签: r simulation

我正在尝试通过模拟重现表格,该表格由两列组成:日期和成功次数。

---------------------
|   Day | successes |
---------------------
|   2   |   12500   |
|   3   |   15900   |
|   4   |   18450   |
|   5   |   21000   |
|   6   |   23450   |
|   7   |   24000   |
|   8   |   25000   |
|   9   |   26050   |
|   10  |   26550   |
|   11  |   27500   |
|   12  |   27600   |
|   13  |   27600   |
|   14  |   28150   |
|   15  |   28500   |
---------------------

人口由两组组成,n.group1= 38700 and n.group2=11300 我正在等待时间,直到成功以指数方式分配,其中group1为the1,group2为theta2。并且出于某些理论原因theta1>theta2
我在r中使用rexp生成时间,然后我将时间分类为日类别 对于这个porpuse,我使用两个不同的功能:

#cut function
c.fun <- function(m){
  c <- cut(m, breaks = c(-Inf, 2:15, Inf), right = FALSE)
  c <-as.data.frame(table(c))
  c<- as.data.frame(c[-15,-1])
  row.names(c) <- c(2:15)
  colnames(c)="Freq"
  return(c)
}

,第二个是

# using findInterval
find.int <- function(d){
  d<-as.data.frame(table(findInterval(d, c(1:cat.end))))
  d[2,2] <- sum(d[1:2,2]) # adding category 1 and 2 together
  d <- d[-c(1, 16:cat.end),]
  d$Var1<-NULL
  return(d)
}

然后将它们总结为看起来像观察到的数据

get.total <- function(theta){
  #group1
  group1 <-rexp(n.group1, rate=theta[1])

  #group2
  group2 <-rexp(n.group2, rate=theta[2])

  #Classifying
  #group1
  group1<-find.int(group1)
  #or group1<-c.fun(group1)

  #group2
  group2<-find.int(group2)
  #or group2<-c.fun(group2)

  total <- data.frame(group1, group2)
  colnames(total)<- c("group1", "group2")
  total$group1 <- cumsum(total$group1)
  total$group2 <- cumsum(total$group2)
  total$total <- total$group1+total$group2
  #total$total <- cumsum(total$total)
  return(total$total)
}

然后计算均方误差并使用3d图来决定我应该选择哪个。

mse.fn <- function(theta){
  mse(get.total(theta),observed.data$successes)
}

我从这两个功能得到不同的结果,我想知道哪一个是正确的?
另外,我正在使用optim内置函数来找到最佳的theta组合,但是它给了我一个负面的theta2值,这是不现实的吗?

optim(theta<-c(0.1,0.1), mse.fn)$par

optimx

相同
optimx(theta<-c(0.1,0.1, mse.fn)

如果有人能看到我犯了错误的地方,我将不胜感激。

0 个答案:

没有答案