R中的迭代

R中的迭代,r,statistics,simulation,R,Statistics,Simulation,对于给定的观测向量x和给定的参数向量(长度为5),θ0,下面的代码生成这些参数的更好估计向量θ1 part1=(1-theta0[5])*dnorm(x,theta0[1],theta0[3]) part2=theta0[5]*dnorm(x,theta0[2],theta0[4]) gam=part2/([part1+part2) denom1=sum(1-gam) denom2=sum(gam) mu1=sum((1-gam)*x)/denom1 sig1=sqrt(sum((1-gam)*

对于给定的观测向量x和给定的参数向量(长度为5),θ0,下面的代码生成这些参数的更好估计向量θ1

part1=(1-theta0[5])*dnorm(x,theta0[1],theta0[3])
part2=theta0[5]*dnorm(x,theta0[2],theta0[4])
gam=part2/([part1+part2)
denom1=sum(1-gam)
denom2=sum(gam)
mu1=sum((1-gam)*x)/denom1
sig1=sqrt(sum((1-gam)*((x-mu1)^2))/denom1)
mu2=sum(gam*x)/denom2
sig2=sqrt(sum(gam*((x-mu2)^2))/denom2
p=mean(gam)
theta[1] <- c(mu1,mu2,sig1,sig2,p)
part1=(1-theta0[5])*dnorm(x,theta0[1],theta0[3])
第2部分=θ0[5]*数据形式(x,θ0[2],θ0[4])
gam=part2/([part1+part2]
denom1=总和(1-gam)
denom2=总和(gam)
mu1=总和((1-gam)*x)/denom1
sig1=sqrt(和((1-gam)*((x-mu1)^2))/denom1)
mu2=总和(gam*x)/denom2
sig2=sqrt(和(gam*((x-mu2)^2))/denom2
p=平均值(gam)
θ[1]未测试

theta0 <- c()
x <- 

for (i in 1:10000) {
part1 = (1 - theta0[5])*dnorm(x,theta0[1],theta0[3])
part2 = theta0[5] * dnorm(x,theta0[2],theta0[4])
gam = part2 / (part1 + part2)
denom1 = sum(1-gam)
denom2 = sum(gam)
mu1 = sum((1-gam)*x) / denom1
sig1 = sqrt(sum((1-gam)*((x-mu1)^2))/denom1)
mu2 = sum(gam*x)/denom2
sig2 = sqrt(sum(gam * ((x - mu2) ^ 2)) / denom2)
p = mean(gam)

theta0 <- c(mu1,mu2,sig1,sig2,p)
if (i %% 500 == 0) print(theta0)
}

theta0您可以使用for循环进行固定次数的迭代。基本语法是:for(1:10000中的i){do something}。如果您可以测试收敛性,您可以使用while循环来检查每次迭代是否达到足够的收敛性。这可以最大限度地减少计算时间(但确保您的算法确实收敛!)@AlexanderVosdeWael我该如何替换我的参数向量呢?请继续阅读函数。好的,谢谢。所以当我输入θ0时,我将得到10000次迭代的估计值,每次替换参数向量?是的。你正在重写θ0 10000次(或者9999次,我的数学不好:)。如果您想在每次迭代中看到它,请添加
print(theta0)
(不推荐)。或者如果(i%%500==0)print(theta0)
,您也可以说
。这样可能更好