是否可以在R中解决以下问题?
特别是,我想找到a1和a2的值,使下面的损失最小:
> n <- 1000
> x <- rnorm(n, 1, 1)
> e <- rnorm(n, 0, 1)
> d <- a1+a2*x+e < 0
> loss <- (mean(d) - 0.5) + (mean((a1 + a2*x + e)[d=0]) - 2)
也就是说,我想找到a1和a2的值,使mean(d)
和mean((a1+a2*x+e)[d=0])
分别尽可能接近0.5和2。
(选择的值0.5和2只是暂时值)
使用optim
和f
函数计算定义损耗。p
是参数向量,即p[1]
是您的a1,p[2]
是您的a2。在函数中调用optim
时,请使用合理的起始值。
f <- (p) {
d <- p[1] + p[2]*x + e < 0
(mean(d) - 0.5) + (mean((p[1] + p[2]*x + e)[d]) - 2)
}
res <- optim(c(0, 0), f)
res$par
# [1] 4.393432e+53 1.010012e+55 ## a1 and a2
注意d
已经是布尔值了。
如果你用不同的起始值得到不同的结果,你的分布可能是多模态的。
数据:
n <- 1e3; set.seed(42); x <- rnorm(n, 1, 1); e <- rnorm(n, 0, 1)