【问题标题】:Regression with multivariate vectors and coefficients extraction多元向量回归和系数提取
【发布时间】:2019-04-19 05:14:24
【问题描述】:

我想创建 200 个二元正态分布向量的 1000 个样本

set.seed(42)  # for sake of reproducibility
mu <- c(1, 1)
S <- matrix(c(0.56, 0.4,
              0.4, 1), nrow=2, ncol=2, byrow=TRUE)
bivn <- mvrnorm(200, mu=mu, Sigma=S)

这样我就可以对每个样本运行 OLS 回归,从而获得 1000 个估计量。我试过这个

library(MASS)
bivn_1000 <- replicate(1000, mvrnorm(200, mu=mu, Sigma=S), simplify=FALSE)

但我被困在那里,因为现在我不知道如何继续为每个样本运行回归。

如果能帮助我了解如何运行这 1000 个回归然后提取系数,我将不胜感激。

【问题讨论】:

  • 我刚试过,但我得到了描述性统计数据和一行 NA :(
  • 试试sapply(bivn_1000, function(x) summary(lm(x[, 1] ~ x[, 2]))$coef)。你的数据是双变量的,还是我错了?
  • 是的。每个样本包含 200 个二元向量,我正在尝试创建 1000 个样本
  • 请看下面我的回答。

标签: r regression multivariate-testing


【解决方案1】:

我们可以编写一个自定义回归函数。

regFun1 <- function(x) summary(lm(x[, 1] ~ x[, 2]))

我们可以用lapply循环遍历数据:

l1 <- lapply(bivn_1000, regFun1)

系数保存在一个列表中,可以像这样提取:

l1[[1]]$coefficients  # for the first regression
#              Estimate Std. Error   t value     Pr(>|t|)
# (Intercept) 0.5554601 0.06082924  9.131466 7.969277e-17
# x[, 2]      0.4797568 0.04255711 11.273246 4.322184e-23

编辑:

如果我们只想要没有统计信息的估计器,我们会相应地调整函数的输出。

regFun2 <- function(x) summary(lm(x[, 1] ~ x[, 2]))$coef[, 1]

由于我们可能想要矩阵形式的输出,我们接下来使用sapply

m2 <- t(sapply(bivn_1000, regFun2))

head(m2)
#      (Intercept)    x[, 2]
# [1,]   0.6315558 0.4389721
# [2,]   0.5514555 0.4840933
# [3,]   0.6782464 0.3250800
# [4,]   0.6350999 0.3848747
# [5,]   0.5899311 0.3645237
# [6,]   0.6263678 0.3825725

在哪里

dim(m2)
# [1] 1000    2

向我们保证我们有 1,000 个估算值。

【讨论】:

  • 是的,这行得通。但是是否有可能获得 1000 个估计器,每个样本 1 个?
  • 我不确定我是否理解正确。列表中有 1'000 个估算器。试试length(l1),它会产生1000
  • 是的,你是对的,我没有注意到这一点。我只想要第一列的系数。我试过这个循环for(i in 1:1000){ a&lt;-l1[[i]]$coefficients[,1] b_hat&lt;-rbind() } 但它只粘贴最后一个系数。我也试过这个b_hat&lt;-l1[[c(1:1000)]]$coefficients[,1],但发生了错误。你能帮我解决这个问题吗?谢谢
猜你喜欢
  • 1970-01-01
  • 2011-09-28
  • 1970-01-01
  • 2022-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多