在R中循环optim:你能帮我调整我的循环代码吗
你能帮我纠正我的循环函数吗 我想让optim估计al_j;au_j;西格玛;b_j通过查看0到20、21到40、41到60个数据点 最终结果应包含4列估计值和4行0到20、21到40、41到60 我的代码是:在R中循环optim:你能帮我调整我的循环代码吗,r,optimization,loops,R,Optimization,Loops,你能帮我纠正我的循环函数吗 我想让optim估计al_j;au_j;西格玛;b_j通过查看0到20、21到40、41到60个数据点 最终结果应包含4列估计值和4行0到20、21到40、41到60 我的代码是: n=20 runs=4 out=matrix(0,nrow=runs) llik = function(x) { al_j=x[1]; au_j=x[2]; sigma_j=x[3]; b_j=x[4] sum(na.rm=T, ifelse(a$R_j
n=20
runs=4
out=matrix(0,nrow=runs)
llik = function(x)
{
al_j=x[1]; au_j=x[2]; sigma_j=x[3]; b_j=x[4]
sum(na.rm=T,
ifelse(a$R_j< 0, -log(1/(2*pi*(sigma_j^2)))-
(1/(2*(sigma_j^2))*(a$R_j+al_j-b_j*a$R_m))^2,
ifelse(a$R_j>0 , -log(1/(2*pi*(sigma_j^2)))-
(1/(2*(sigma_j^2))*(a$R_j+au_j-b_j*a$R_m))^2,
-log(pnorm(au_j,mean=b_j*a$R_m,sd=sqrt(sigma_j^2))-
pnorm(au_j,mean=b_j*a$R_m,sd=sqrt(sigma_j^2)))))
)
}
start.par = c(0, 0, 0.01, 1)
out1 = optim(llik, par=start.par, method="Nelder-Mead")
for (i in 1: runs)
{
index_start=20*(i-1)+1
index_end= 20*i
out[i]=out1[index_start:index_end]
}
out
当我尝试运行您的代码时,当调用
llik
时,我会收到错误消息“a
notfound”。您应该重构代码,以便将llik
需要的所有变量传递到代码中或在函数中创建
行
out[i]=out1[index\u start:index\u end]
看起来也很可疑,因为您将一系列值分配给一个位置。您能否将其推广到更大的R社区?我创建了一个代码,可以使用optim在R中估计变量。我希望代码执行循环(正如我在底部尝试的那样)但我遗漏了一些东西?a的后续部分是数据所在的位置。代码如下>a=read.table(“E:/data.txt”,header=T)>a中的附件(a)是R_j和R_m所在的位置。谢谢Edward
R_j R_m
-0.0625 0.002320654
0 -0.004642807
0.033333333 0.005936332
0.032258065 0.001060848
0 0.007114057
0.015625 0.005581558
0 0.002974794
0.015384615 0.004215271
0.060606061 0.005073116
0.028571429 -0.006001279
0 -0.002789594
0.013888889 0.00770633
0 0.000371663
0.02739726 -0.004224228
-0.04 0.008362539
0 -0.010951605
0 0.004682924
0.013888889 0.011839993
-0.01369863 0.004210383
-0.027777778 -0.04658949
0 0.00987272
-0.057142857 -0.062203157
-0.03030303 -0.119177639
0.09375 0.077054642
0 -0.022763619
-0.057142857 0.050408775
0 0.024706076
-0.03030303 0.004043701
0.0625 0.004951088
0 -0.005968731
0 -0.038292548
0 0.013381097
0.014705882 0.006424728
-0.014492754 -0.020115626
0 -0.004837891
-0.029411765 -0.022054654
0.03030303 0.008936428
0.044117647 8.16925E-05
0 -0.004827246
-0.042253521 0.004653096
-0.014705882 -0.004222151
0.029850746 0.000107267
-0.028985507 -0.001783206
0.029850746 -0.006372981
0.014492754 0.005492374
-0.028571429 -0.009005846
0 0.001031683
0.044117647 0.002800551