1

我想模拟异方差性,看看 White 检验如何针对各种样本量执行(这类似于 Greene,但测试不同类型)。

现在,我要测试的模型是:

Replications=1000=n 
y=1.5x+ e 
x ~ N(25, 15) 
e ~ N(0, sigma_i) 
sigma_i= 1+ alpha (sqrt(x[i]^2) 

并说最初的样本大小=20(改变这部分很容易)

因此,使用 bstats 命令进行白色测试,我将代码编写为

for (j in 1:n) {
  for (i in 1:20){
    x[i]=rnorm(1, 25, 15)
    sigma [i]=1+0*sqrt(x[i]^2)
    epsilon[i]=rnorm(1, 0, sigma[i])
    y[i]=1.5*x[i]+epsilon[i]}
  lm1[j]<- lm(y~x); white.test(lm1[j])
  if (white.test(lm1)$p.value > 0.05){ind=ind
  }else{
    if (white.test(lm1)$p.value < 0.05) {ind=ind+1}
  } 
  IND1=ind/1000}
} 

现在,我知道这是一个问题,因为 i 部分有效,但我无法让外部 for 循环工作。有没有人有什么建议?

4

1 回答 1

2
require(tseries)
# if you dont have above package, please install it
# it can be done by running following code
# install.packages('tseries')

########### function that simulates 100 times for hetro- 
test_gen=function(n,m){
  esp=0
  saved=0
  for(i in 1:m){   # simulate  100 times
    X=rnorm(n,25,1)
    for(j in 1:length(X)){
    eps[j]=rnorm(1,0,sqrt((X[j])^2)[1])
    }
    Y=1.5*X+eps

    temp=white.test(X,Y)

    saved[i]=temp$p.value
  }
  return(saved)
}

#red dots are the values less than 0.05
#n controls the size of sample
#m controls numbers of simulation
n=20
m=100
out=test_gen(n,m)
plot(c(1:length(out)),out,main="p-value(whitetest) for each simulated data") 
ind=out<0.05
points(c(1:length(out))[ind],out[ind],col='red',pch=16)

阴谋

out2=0
#simulate 100 times for each specific data size 
for(i in 20:100){
  k=i-19
  temp=test_gen(i,100)
  out2[k]=sum(temp<0.5)/100
}

plot(20:100,out2,main="error rate",xlab="sample size") # error rate

阴谋

我觉得我在做你的功课......无论如何祝你好运

于 2013-11-06T04:01:51.760 回答