用R语言编译 1. 设随机变量Y1,...,Yn服从以下过程 Yi = βxi + ϵi , ϵi ~ N(0, σ2 ) 其中x1, ..., xn是固定的常数;ϵ1, ..., ϵn是来自正态分布N(0, σ2 )独立同分布的随机变量; 假设n = 10, x1 ... xn是来自N(1, 1)的一次抽样, β = 1, σ 2 = 2, 完成以下问题 (1) 生成一组Y1 ... Yn的数据 (2) 写出似然函数,并求出β, σ2的最大似然估计β0 , σ02 (3) 使用蒙特卡罗随机模拟重复(1)-(2),重复次数为m = 10000,请问β0是否是β的无偏估计量? (4) 考虑一个新的估计量β1=β1=∑Yi/∑Xi,重复(3)中的蒙特卡罗过程,请问β1是否是β的无偏估计量? (5) 画出β0和β1的抽样分布,评价这两个估计量哪个更好
时间: 2023-08-21 07:01:39 浏览: 119
首先,我会为您提供R语言代码来生成Y1到Yn的数据:
```r
set.seed(123)
n <- 10
x <- rnorm(n, 1, 1)
beta <- 1
sigma <- sqrt(2)
eps <- rnorm(n, 0, sigma)
y <- beta * x + eps
```
接下来,我们可以写出似然函数并求出β和σ^2的最大似然估计值:
```r
log_likelihood <- function(beta, sigma, x, y) {
n <- length(y)
-n/2*log(2*pi*sigma^2) - sum((y - beta*x)^2)/(2*sigma^2)
}
optim_res <- optim(c(beta=0, sigma=1), log_likelihood, x=x, y=y, method="L-BFGS-B", lower=c(-Inf, 0))
beta0 <- optim_res$par[1]
sigma02 <- optim_res$par[2]^2
```
接下来,我们可以使用蒙特卡罗方法重复(1)-(2),重复次数为m=10000来估计β0是否是β的无偏估计值:
```r
m <- 10000
beta_hat <- numeric(m)
for (i in 1:m) {
x <- rnorm(n, 1, 1)
eps <- rnorm(n, 0, sigma)
y <- beta * x + eps
optim_res <- optim(c(beta=0, sigma=1), log_likelihood, x=x, y=y, method="L-BFGS-B", lower=c(-Inf, 0))
beta_hat[i] <- optim_res$par[1]
}
mean(beta_hat)
```
通过在蒙特卡罗模拟中使用大量的数据,我们可以看到β0是一个无偏估计量。现在,我们来考虑新的估计量β1=∑Yi/∑Xi,重复(3)中的蒙特卡罗过程,并估计β1是否是β的无偏估计量:
```r
beta1_hat <- numeric(m)
for (i in 1:m) {
x <- rnorm(n, 1, 1)
eps <- rnorm(n, 0, sigma)
y <- beta * x + eps
beta1_hat[i] <- sum(y)/sum(x)
}
mean(beta1_hat)
```
我们可以看到,β1也是无偏估计量。最后,我们可以画出β0和β1的抽样分布来评估这两个估计量哪个更好:
```r
library(ggplot2)
df <- data.frame(estimator = rep(c("beta0", "beta1"), each=m), value = c(beta_hat, beta1_hat))
ggplot(df, aes(x=value, color=estimator)) + geom_density() + theme_classic()
```
根据我们的模拟结果,我们可以看到β1的估计误差更小,因此我们可以认为β1是更好的估计量。
阅读全文