我试图建立一个估计量来比较GLS估计量和OLS估计量的渐近性,我的想法是尝试看看在大样本情况下会发生什么。
理想情况下,我希望创建一个循环,该循环将为不同的参数值生成6000个不同的随机样本,每个样本的大小为50和100。
N=1000
n=c(50, 100)
#parameters
alpha0=1
beta0=1
gamma0=c(0, 0.1, 0.5)
alpha1=matrix(NA,N,6)
beta1=matrix(NA,N,6)
alpha2=matrix(NA,N,6)
beta2=matrix(NA,N,6)
alphaOLS=matrix(NA,N,6)
betaOLS=matrix(NA,N,6)
不同的样本来自gamma 0和n的组合,这将等于6(乘以N),得到6000。我的第一个想法是构建一个用于生成随机样本的循环,我尝试使用的模型如下:y_i=alpha+betax_i+u_i
u_i=e_ih(x_i)^(1/2)且h(x)=exp(γ 0)
u <- list()
for (i in n) {
for (k in gamma0) {
x=rnorm(i,0,1)
h=exp(gamma0[k]*x)
e=rnorm(i,0,1)
u[[i]] <- e*h^(1/2)
}
}
这个循环的问题是,我只得到x和e中的一个随机样本,h作为空矩阵出来,因此,u也是空的。h这里应该是一个矩阵,其中列对应于x* γ 0的不同值。e应该是N(0,1),u是模型的残差
我的理想输出应该是让这个循环工作,因为从那里开始,我可以围绕手动构建OLS和GLS估计器进行排序。
多谢了!
2条答案
按热度按时间tmb3ates1#
这应该可以工作,这里我们直接使用
i
和k
,而不是循环中的n
和gamma0
。编辑(根据您最近的请求)
1szpjjfi2#
或者,通过使用R固有的矢量化和tidyverse处理组的能力来完全避免循环。使用R时的一个很好的经验法则是“如果我想使用
for
循环,可能有更好的方法来做到这一点”。这里,我只是为了简单起见而使用OLS,但是使用这两种方法的扩展应该是直接的。您可以将代码 Package 在函数中,并为
N
、n
和gamma0
提供参数,以提供更大的通用性。