Регрессия с многомерным вектором и извлечением коэффициентов - PullRequest
1 голос
/ 19 апреля 2019

Я хочу создать 1000 выборок из 200 двумерных нормально распределенных векторов

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 регрессий и затем извлечь коэффициенты.

1 Ответ

0 голосов
/ 19 апреля 2019

Мы могли бы написать собственную функцию регрессии.

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 next.

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

заверяет нас, что у нас есть 1000 оценок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...