用R进行线性回归模拟后绘图
我正在用R做线性回归的模拟用R进行线性回归模拟后绘图,r,linear-regression,simulation,R,Linear Regression,Simulation,我正在用R做线性回归的模拟 回归模型:YYI=A+BY1*XY1I+BY2*XY2I+EAI, 参数设计如下所示: x_1i~N(2,1),x_2i~Poisson(4),e_i~N(0,1),θ=(a,b_1,b_2) 我正在做的以下代码是,我想使用我上面提到的分布生成100个(y,x_1,x_2)1000次的独立随机样本,我还想估计θ(θ的估计器)。在得到theta_hat之后,我想分别绘制a(a_hat)、b_1(b_1_hat)、b_2(b_2_hat)的估计量的分布 ## Constr
回归模型:YYI=A+BY1*XY1I+BY2*XY2I+EAI,
参数设计如下所示: x_1i~N(2,1),x_2i~Poisson(4),e_i~N(0,1),θ=(a,b_1,b_2) 我正在做的以下代码是,我想使用我上面提到的分布生成100个(y,x_1,x_2)1000次的独立随机样本,我还想估计θ(θ的估计器)。在得到theta_hat之后,我想分别绘制a(a_hat)、b_1(b_1_hat)、b_2(b_2_hat)的估计量的分布## Construct 1000 x_1
x_1_1000 <- as.data.frame(replicate(n = 1000,expr = rnorm(n = 100,
mean = 2, sd = 1)))
colnames(x_1_1000) <- paste("x_1", 1:1000, sep = "_")
x_2_1000 <- as.data.frame(replicate(n = 1000,expr = rpois(n = 100,
lambda = 4)))
colnames(x_2_1000) <- paste("x_2", 1:1000, sep = "_")
error_1000 <- as.data.frame(replicate(n = 1000, expr = rnorm(n = 100,
mean = 0, sd = 1)))
colnames(error_1000) <- paste("e", 1:1000, sep = "_")
y_1000 <- as.data.frame(matrix(data = 0, nrow = 100, ncol = 1000))
y_1000 = 1 + x_1_1000 * 1 + x_2_1000*(-2) + error_1000
colnames(y_1000) <- paste("y", 1:1000, sep = "_")
######################################################################
lms <- lapply(1:1000, function(x) lm(y_1000[,x] ~ x_1_1000[,x] + x_2_1000[,x]))
theta_hat_1000 <- as.data.frame(sapply(lms, coef))
因此,我注意到有一些奇怪的事情。因此,我尝试了第二种方法,如下所示
我尝试取消列出“theta_hat_1000”,这是一个存储在我的全局环境中的列表。然而,在做了这些事情之后,我没有得到我想要的。预期结果是只得到三行,每行有1000个值,但实际结果是我得到了3000个OB,其中有一列
理想的结果是得到三列,每列有1000个值,并将它们放入一个数据框中进行进一步的处理,如使用ggplot演示估计系数的分布
我已经坚持了好几个小时了。如果有人能帮助我并给我一些建议,我们将不胜感激。您代码中的这一行
theta\u hat\u 1000$ahat
不起作用,因为“ahat”是数据框中的行名而不是列名。您可以通过调用theta\u hat\u 1000[“ahat”,]
获得结果
然而,我知道您想要的结果实际上是一个数据帧,它有3列(和1000行),表示回归模型的3个参数(截距、x1、x2)。代码中的这一行as.data.frame(sapply(lms,coef))
生成一个包含3行和1000列的数据帧。例如,您可以在将矩阵更改为数据帧之前对其进行转置,以获得1000行和3列
theta_hat_1000 <- sapply(lms, coef)
theta_hat_1000 <- as.data.frame(t(theta_hat_1000))
colnames(theta_hat_1000) <- c("ahat", "x1hat", "x2hat")
head(theta_hat_1000)
ahat x1hat x2hat
1 2.0259326 0.7417404 -2.111874
2 0.7827929 0.9437324 -1.944320
3 1.1034906 1.0091594 -2.035405
4 0.9677150 0.8168757 -1.905367
5 1.0518646 0.9616123 -1.985357
6 0.8600449 1.0781489 -2.017061
theta\u hat\u 1000
rownames(theta_hat_1000) <- c("ahat", "x1hat", "x2hat")
theta_hat_1000$ahat
NULL
theta_hat_1000 <- sapply(lms, coef)
theta_hat_1000 <- as.data.frame(t(theta_hat_1000))
colnames(theta_hat_1000) <- c("ahat", "x1hat", "x2hat")
head(theta_hat_1000)
ahat x1hat x2hat
1 2.0259326 0.7417404 -2.111874
2 0.7827929 0.9437324 -1.944320
3 1.1034906 1.0091594 -2.035405
4 0.9677150 0.8168757 -1.905367
5 1.0518646 0.9616123 -1.985357
6 0.8600449 1.0781489 -2.017061