本文为大家带来的是通过蒙特卡罗模拟(Monte CarloSimulation)检验CLRM假定下,最小二乘估计量的BLUE性质的检验。(Monte Carlo本质上是一种计算机模拟或抽样实验),以下的实验过程来自于古扎拉蒂 计量经济学(第5版),第三章3.8.验证OLS估计是无偏估计。
1-3. 给参数beta1,2,样本大小n和所有观测的X值赋值。这里我们取beta1=20,beta2=0.6,样本大小n取25,观测值X以向量形式从1取到n(1:n来表示),即到25。
b1 <- 20
b2 <- 0.6
n <- 25
X <- c(1:n)
4. 利用rnorm函数生成n个正态分布的随机数,并将他们组成向量其值赋给u。
5. 根据上述公式计算出对应的向量Y。
u <- rnorm(n)
Y <- b1+b2*X+u
6. 利用回归函数lsfit()对X,Y做回归(这里用lm(Y~X)函数做回归也可以),然后用$符号取出coefficients中的回归系数。
7. 用for循环重复实验100次,i作为计数变量,每一次循环得出的结果放入一个叫做lsfit.b的数组里(数组名随便你取啦)的一行,所以最终这个数组就应该有100行,2列,所以我们需要在循环体外面先初始化一个所有元素全为0的100行2列的数组,dim中的向量就是行列数,然后在循环体内把每第i次循环计算出的回归系数放在数组的第i行。
lsfit.b <- array(0, dim = c(100,2))
for(i in 1:100){
lsfit.b[i,] <- c(lsfit(X,Y)$coefficients)
}
8. 最终我们利用apply函数按列计算出数组lsfit.b中平均数,参数2表示按第二行,mean表示取均值。
9. 输出结果就好啦
lsfit.bmean <- apply(lsfit.b, 2, mean)
lsfit.bmean
以下是具体的全部代码,因为先开始忽视了随机数u需要满足正态分布的条件,并且手抖把赋值写到循环里去啦,不过现在都已经改正啦~结果比对与初值是差不多的,检验正确~
b1 <- 20
b2 <- 0.6
n <- 25
X <- c(1:n)
u <- rnorm(n)
Y <- b1+b2*X+u
lsfit.b <- array(0, dim = c(100,2))
for(i in 1:100){
lsfit.b[i,] <- c(lsfit(X,Y)$coefficients)
}
lsfit.bmean <- apply(lsfit.b, 2, mean)
lsfit.bmean