我正在使用面板数据集(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在panel formal中加载了数据集,并创建了一个生成adstock值的函数。该函数还对adstock值运行固定效果模型并返回SE。然后我使用optimize()在边界(0,1)内找到最佳衰减值。当我的代码返回一个最佳值时,我担心出现错误,因为它会在所有其他变量上返回相同的最佳值(接近1)。
我附上了我的数据样本,以及我的代码的关键部分。如果有人能看一眼看看有什么不对,我将不胜感激。
# 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)