我正在使用面板数据集(210个DMA的24个月数据) . 我试图通过最小化固定效应模型的标准误差来优化自变量的adstock衰减因子 .

在这种特殊情况下,我想得到一个衰减因子,它使模型“Mkt_TRx_norm = b0 b1 * Mkt_TRx_norm_prev b2 * SEM Br_act_norm_adstock”中的adstock变换变量“SEM_Br_act_norm”的SE最小化 .

到目前为止,我已经使用plm在面板正式中加载了数据集,并创建了一个函数来生成adstock值 . 该函数还对adstock值运行固定效果模型并返回SE . 然后我使用optimize()在边界(0,1)内找到最佳衰减值 . 当我的代码返回一个最佳值时,我担心出现错误,因为它会在所有其他变量上返回相同的最佳值(接近1) .

我附上了我的数据样本,以及我的代码的关键部分 . 如果有人能看一眼看看有什么不对,我将不胜感激 .

Sample Data

# Set panel data structure

alldata <- plm.data (alldata, index = c("DMA", "Month_Num"))

alldata$var <- alldata$SEM_Br_act_norm +0

# Create 1 month time lag for TRx

alldata <- ddply( 
  alldata, .(DMA), transform,
  # This assumes that the data is sorted
  Mkt_TRx_norm_prev = c(NA,Mkt_TRx_norm[-length(Mkt_TRx_norm)]) 
)

# Create adstock function and obtain SE of regression

adstockreg <-function(decay, period, data_vector, pool_vector=0){  
  data_vector <-alldata$var
  pool_vector <- alldata$DMA
  data2<-data_vector
  l<-length(data_vector)
  #if no pool apply zero to vector
  if(length(pool_vector)==1)pool_vector<-rep(0,l)
  #outer loop: extract data to decay from observation i
  for( i in 1:l){
    x<-data_vector[i]
    #inner loop: apply decay onto following observations after i
    for(j in 1:min(period,l)){
      #constrain decay to same pool (if data is pooled)
      if( pool_vector[i]==pool_vector[min(i+j,l)]){data2[(i+j)]<- data2[(i+j)]+(x*(decay)^j)}
    }
  }
  #reduce length of edited data to equal length of initial data
  data2<-data2[1:l]

  #regression - excludes NA values
  alldata <- plm.data (alldata, index = c("DMA", "Month_Num"))
  var_fe <- plm(alldata$Mkt_TRx_norm ~ alldata$Mkt_TRx_norm_prev + data2, data = alldata , model = "within", na.action = na.exclude)
  se <- summary(var_fe)$coefficients["data2","Std. Error"]
  return(se)
}

# Optimize decay for adstock variable

result <- optimize(adstockreg, interval=c(0,1), period = 6)
print(result)