乐观中的目标函数求值长度3而不是1

时间:2019-05-06 18:50:14

标签: r

我是R的新手,它试图通过从模拟面板数据集中的间接推断来找到3个参数的最佳值,但是却收到错误消息“优化中的目标函数求值长度3而不是1”。我试图检查过去的帖子,但发现的帖子没有解决我所面临的问题。

如果我仅尝试使用一个参数而不是3,则该代码有效。这是代码:

#Generating data

modelp <- function(Y,alpha,N,T){
Yt <- Y[,2:T]
Ylag <- Y[,1:(T-1)]
Alpha <- alpha[,2:T]
yt <- matrix(t(Yt), (T-1)*N, 1)
ylag <- matrix(t(Ylag), (T-1)*N, 1)
alph <- matrix(t(Alpha), (T-1)*N, 1)

rho.ind <- rep(NA,N)
sigma_u <- rep(NA,N)
sigma_a <- rep(NA,N)
for(n in 1:N){
  sigma_u[n] <- sigma(lm(yt~alph+ylag))
  sigma_a[n] <- lm(yt~alph+ylag)$coef[2] # 
  (diag(vcov((lm(yt~alph+ylag)$coef),complete=TRUE)))[2] #
  rho.ind[n] <- lm(yt~alph+ylag)$coef[3]
 }
 param <- matrix(NA,1,3)
 param[1]<- mean(sum(rho.ind))
 param[2]<- mean(sum(sigma_u))
 param[3]<- mean(sum(sigma_a))
 return(param)
 }
 ## Function to estimate parameters
 H.theta <- function(param.s){
 set.seed(tmp.seed)                      #set seed 
 param.s.tmp <- matrix(0,1,3)
 for(s in 1:H){
 eps.s <- matrix(rnorm(N*T), N, T)       #white noise erros
 eps0.s <- matrix(rnorm(N*T), N, 1) #error for initial condition
 alph.s <-   matrix(rnorm(N*T),N,T)
 Y.s <- matrix( 0, N, T)
 ys.lag <- eps0.s
  for(t in 1:T){   #Simulating the AR(1) process data
  ys <- alph.s[,t]+param.s[1] * ys.lag + eps.s[,t]  # [n,1:t]
  Y.s[,t] <- ys
  ys.lag <- ys
 }
 param.s.tmp <- param.s.tmp + modelp(Y.s, alph.s,N, T)
 param.s[2] <- param.s.tmp[2]
 param.s[3] <- mean(var(alph.s)) #param.s.tmp[3]
}
 return( (param.data - param.s.tmp/H)^2 )
#return(param.s[1])
}
 #Results for T = 10 & H = 10, N=100

nrep <-10
rho <-0.9
 sigma_u <- 1
 sigma_a <- 1.5
 param <- matrix(NA,1,3)
 param[1] <- rho
 param[2] <- sigma_u
 param[3] <- sigma_u
 s.mu <- 0              # Mean
 s.ep <- 0.5             #White Noise -initial conditions
 Box <- cbind(rep(100,1),c(20),rep(c(5),1))
 r.simu.box <- matrix(0,nrep,nrow(Box))
 r.data.box <- matrix(0,nrep,nrow(Box))
 for(k in 1:nrow(Box)){
  N <- Box[k,1]        #Number of individuals in panel 
  T <- Box[k,2]      #Length of Panel
   H <- Box[k,3]       # Number of simulation paths 
  p.data <-matrix(NA,nrep,3)
  p.simu <-matrix(NA,nrep,3)
 est <- matrix(NA,1,3)
 for(i in 1:nrep){
 mu <- matrix(rnorm(N )*s.mu, N, 1)
 eps <- matrix(rnorm(N*T)*s.ep, N, T)
 eps0 <- matrix(rnorm(N*T)*s.ep, N, 1)
 alph <- matrix(rnorm(N ), N, T)
 Y <- matrix( 0, N, T)
 y.lag <- (1-param[1])*mu + eps0
for(t in 1:T){
  y <- alph[,t]+param[1]*y.lag +eps[,t]
  Y[,t] <- y
  y.lag <- y
}
param.data <- modelp(Y,alph,N,T)          #Actual data
p.data[i,1:3] <- param.data
tmp.seed <- 3864+i+100*(k-1)       #Simulated data

x0 <- c(0.5, 0,0)
est[i] <- optim(x0, H.theta,method = "BFGS", hessian = TRUE)$par   
p.simu[i,1:3] <- est[i]
if(i%%10==0) print(c("Finished the (",i,")-th replication"))
 }
}
 mean(p.data[,1])- mean(p.simu[,1])
 mean(p.data[,2])- mean(p.simu[,2])
 sqrt(mean((p.data[1]-p.simu[1])^2))

我希望得到三个值。任何帮助或建议将不胜感激。

0 个答案:

没有答案