R:数据模拟

时间:2015-03-24 14:45:30

标签: r simulation

我正在尝试运行以下代码:

data_greene<-read.delim(file.choose(),header=T)
result_b2_HC0<-matrix(1:2000,ncol=4)
for (i in 1:500){
  X1<-data_greene[[3]]*10^-4
  X2<-X1^2
  e<-rnorm(50,0,1)
  sigma2<-exp(5.30+5.30*X1)
  lambda<-max(sigma2)/min(sigma2)
  Y<-1+1*X1+0*X2+sqrt(sigma2)*e
  lms<-lmsreg(Y~X1+X2)
  yhat<-lms$fitted
  resid<-lms$residual
  s<-abs(resid)
  lms2<-lmsreg(s~yhat)
  shat<-lms2$fitted
  w1<-1/shat^2
  scale<-lms$scale[1]       
  stdres<-resid/scale

  e=abs(stdres)
  w2<-NULL
  for (i in 1:50){
    if(e[i]<=1.345) w2[i]<-1 else w2[i]<-1.345/e[i]
  }

  w<-w1*w2

  WLS<-lm(Y~X1+X2,weights=w)
  res1<-WLS$residual

  HCCMEHC0<-function(Y,X1,X2){
    X<-cbind(1,X1,X2)
    W<-diag(w)
    inv<-solve(t(X)%*%W%*%X)
    psi0<-diag(res1^2)
    HC0<-inv%*%t(X)%*%W%*%psi0%*%W%*%X%*%inv
    return(HC0)
  }
  result_b2_HC0[i,1]<-WLS$coef[3]
  result_b2_HC0[i,2]<-sqrt(HCCMEHC0(Y,X1,X2)[3,3])
  result_b2_HC0[i,3]<-result_b2_HC0[i,1]/result_b2_HC0[i,2]
  result_b2_HC0[i,4]<-2*pt(-abs(result_b2_HC0[i,3]),df=47)
}
result_b2_HC0

我希望矩阵完整,但结果只出现在矩阵的第50行。我做错了什么?

1 个答案:

答案 0 :(得分:2)

您在两个嵌套for循环中使用相同的变量i。更改第二个for循环以改为使用变量j

要避免此错误,请确保始终使用缩进。另外,学习如何使用矢量数学。你的第二个循环可以从

重写
e=abs(stdres)
w2<-NULL
for (i in 1:50){
  if(e[i]<=1.345) w2[i]<-1 else w2[i]<-1.345/e[i]
}

e=abs(stdres)
w2<-ifelse( e <= 1.345, 1, 1.345/e )

这更清洁,更易读,更快。