jiachunyang1988 发表于 2014-12-2 20:33 
我晓得你的意思了,可是我的程序是分为两个部分,第一部分估计得到一个参数的值,在得到第一个估计值的基 ...
不好意思啊,麻烦你帮我看看
###生成数据
error=c()
sigma=1
error=rnorm(20, mean=0, sd=sigma)
error
beta= c()
r0=1
r1=0.4
alpha=1
T=20
beta[1]=error[1]
for (t in 2:length(error)) {
beta[t]=r0+r1*beta[t-1]+error[t]
}
beta=ts(beta)
beta
X=matrix(runif(600,0,1),nrow=20)
X
Z=matrix( )
Z=diag(beta)%*%X
Z
A=matrix(c(alpha),nrow=20,ncol=30)+Z
A
P=exp(A)/(1+exp(A))
P
W=matrix(runif(600,0,1),20,30)
Y=1*(W<P)
Y
#####################################################################
####给alpha和beta一个初值
a=matrix(0,20,2)
for(t in 1:T){
b=glm(Y[t,]~X[t,],family=binomial)
a[t,]=b$coef
}
a
alpha1=mean(a[,1])
alpha1
beta1=a[,2]
beta1
###############################################################################
###牛顿法得到非线性方程组的解 r0,r1,sigma
Newtons=function(fun,phi, ep=1e-5, it_max=100){
index=0; k=1
while (k<=it_max){
phi1=phi; obj=fun(phi);
phi=phi-solve(obj$J, obj$f);
norm=sqrt((phi-phi1)%*%(phi-phi1))
if(norm<ep){
index=1; break
}
k<-k+1
}
obj=fun(phi);
list(root=phi, it=k, index=index, FunVal=obj$f)
}
t=2:T
funs=function(phi){
f=c((1+phi[3])*(beta1[1]-phi[1]/(1-phi[3]))/phi[2]^2+(sum(beta1[t]-phi[1]-phi[3]*beta1[t-1]))/phi[2]^2,
-T/phi[2]+(sum((beta1[t]-phi[1]-phi[3]*beta1[t-1])^2))/phi[2]^3+((1-phi[3]^2)*(beta1[1]-phi[1]/(1-phi[3]))^2)/phi[2]^3,
- phi[3]/(1-phi[3]^2)+phi[3]*((beta1[1]-phi[1]/(1-phi[3]))^2)/phi[2]^2+
(sum((beta1[t]-phi[1]-phi[3]*beta1[t-1])*beta1[t-1]))/phi[2]^2+phi[1]*(1+phi[3])*(beta1[1]-phi[1]/(1-phi[3]))/(phi[2]^2*(1-phi[3])))
J=matrix(c(-(1+phi[3])/(phi[2]^2*(1-phi[3]))-(T-1)/phi[2]^2,
-2*(1+phi[3])*(beta1[1]-phi[1]/(1-phi[3]))/phi[2]^3-2*(sum(beta1[t]-phi[1]-phi[3]*beta1[t-1]))/phi[2]^3,
(beta1[1]*(1-phi[3])^2-2*phi[1])/(phi[2]^2*(1-phi[3])^2)-(sum(beta1[t-1]))/phi[2]^2,
(-2/phi[2]^3)*((sum(beta1[t]-phi[1]-phi[3]*beta1[t-1]))+(1+phi[3])*(beta1[1]-phi[1]/(1-phi[3]))),
T/phi[2]^2-(3/phi[2]^4)*((sum((beta1[t]-phi[1]-phi[3]*beta1[t-1])^2))+(1-phi[3]^2)*(beta1[1]-phi[1]/(1-phi[3]))^2),
-2*(sum((beta1[t]-phi[1]-phi[3]*beta1[t-1])*beta1[t-1]))/phi[2]^3-2*phi[3]*(beta1[1]-(phi[1]/(1-phi[3]))^2)/phi[2]^3-
2*phi[1]*(1+phi[3])*(beta1[1]-(phi[1]/(1-phi[3])))/(phi[2]^3*(1-phi[3])),
(-2*phi[3]*(beta1[1]-phi[1]/(1-phi[3])))/(phi[2]^2*(1-phi[3]))-(sum(beta1[t-1]))/phi[2]^2+
(1+phi[3])*(beta1[1]-2*phi[1]/(1-phi[3]))/(phi[2]^2*(1-phi[3])),
(-2*phi[3]/phi[2]^3)*(beta1[1]-(phi[1]/(1-phi[3]))^2)-2*(sum((beta1[t]-phi[1]-phi[3]*beta1[t-1])*beta1[t-1]))/phi[2]^3-
(2*phi[1]*(1+phi[3])*(beta1[1]-(phi[1]/(1-phi[3]))))/(phi[2]^3*(1-phi[3])),
-(1+phi[3]^2)/(1-phi[3]^2)^2+(beta1[1]-phi[1]/(1-phi[3]))^2/phi[2]^2-2*phi[1]*phi[3]*(beta1[1]-phi[1]/(1-phi[3]))/(phi[2]^2*(1-phi[3])^2)-
(sum(beta1[t-1]^2))/phi[2]^2+(2*phi[1]*beta1[1]-phi[1]^2-((2*phi[1]^2*(1+phi[3]))/(1-phi[3])))/(phi[2]^2*(1-phi[3])^2)),3,3,byrow=T)
list(f=f,J=J)
}
Newtons(funs,c(1,1,0.4))