對於給定的觀察向量x和給定的參數向量(長度爲5),θ0,下面的代碼產生這些參數θ1的更好估計的向量。R中的迭代
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)
我的問題是如何迭代過程而不必重新編寫代碼?我希望theta1取代原始估計的矢量,theta0,theta2來代替theta1等。收斂速度相當慢,所以我假設需要執行10000次迭代。有一個方便的捷徑嗎?
PS正如你可能會說,我是R的初學者,所以請儘量保持簡單。謝謝。
您可以使用for循環進行固定次數的迭代。基本的語法是:for(i in 1:10000){do something}。 如果您可以測試收斂,則可以使用while循環來檢查每次迭代是否達到足夠的收斂。這最大限度地減少了計算時間(但要確保你的算法確實收斂!)。 –
@AlexanderVosdeWael我將如何替換我的參數向量? – JohnK
閱讀關於[申請](http://stackoverflow.com/questions/3505701/r-grouping-functions-sapply-vs-lapply-vs-apply-vs-tapply-vs-by-vs-aggrega/7141669# 7141669)功能。 – zx8754