Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用R进行线性回归模拟后绘图_R_Linear Regression_Simulation - Fatal编程技术网

用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

我正在用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)的估计量的分布

## 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