在 R 中创建具有不同冲击水平 (SD) 的估计器?

机器算法验证 r 标准差 预测模型 模拟
2022-03-28 14:42:56

第一次发帖!

我正在尝试使用循环模拟创建一个 logit 估计器,其中循环检测正确预测的数量(我的代码如下)。在一定数量的正确预测之后,是否有可能改变分布中的冲击(定义为 rnorm 分布中的标准偏差)?我正在尝试使用下面初始化的 f 变量,但收效甚微。例如,我在想 f 变量可能会在 20 次正确预测后变为 2。下面的代码有效 - 哈希隐藏了一些工作代码 - 但结果不会因冲击而变化(标准偏差是恒定的)。

谢谢!

x<-1:7
y<-c(0,0,0,1,0,1,1)
n=2000
bin1<-rep(NA,n)
bin2<-rep(NA,n)
right<-NULL
b0<-rnorm(1,-4,.1)
b1<-rnorm(1,1,.1) 
n=1000
ti=0
f<-1
iter<-0
bin1<-NULL
bin2<-NULL
right=-1

for (i in 1:n) {
nright<-NULL
nb0<-b0 + rnorm(1,0,1/f)
nb1<- b1+ rnorm(1,0,1/f)
predict<-((1/(1+exp(- nb0- nb1*x))))
for (j in 1:7) {
ifelse ( y[j]==1,nright[j]<-predict[j],nright[j]<-1-predict[j])     }
nright <- prod(nright)
if (nright>right) b0 <-nb0
if (nright>right) b1<- nb1
bin1[i]<-b0
bin2[i]<-b1
#   ifelse ( nright > right, iter<-0, iter<-iter+1)
#   if (iter > 50)  f<- f/2
#   if (f<.05) stop("Done")
if (nright>right) right<-nright
ti<-ti+1
}   
f   
ti  
b0
b1
1个回答

事实证明,上面的代码确实有效。如果您删除代码中间部分的哈希标签,您将拥有一个基于模拟的 logit 估计器(生成截距、斜率、迭代次数,直到收敛于真实值,以及输出“完成”)。

估计器在给定数量的正确预测后调整标准偏差。变量“ti”提供了 logit 估计器运行的迭代次数,直到估计器收敛于真实值。要操纵冲击(标准偏差),请调整变量“f”的值。下面是两个例子:

nb0<-b0 + rnorm(1,0,1*f)
nb1<- b1+ rnorm(1,0,1*f)

nb0<-b0 + rnorm(1,0,1/f)
nb1<- b1+ rnorm(1,0,1/f)

为了进一步澄清,下面是绘制估计斜率和截距的代码。您会注意到,估计在开始时会不太准确,但随后会随着给定次数的迭代后冲击减小而收敛到真实值

 plot(1:n,bin1,ylim=c(-10,0), ylab="", main="intercepts")
 plot(1:n,bin2,ylim=c(-2,2), ylab="", main="slopes")

享受!