Вы должны ожидать, что в среднем , вы восстановите истинные значения коэффициентов. Но для данного имитированного набора данных ваши оценки коэффициентов будут отличаться. Я повторяю настройку симуляции 1000 раз, а затем беру среднее значение оценок коэффициентов.
beta <- c(2,3,4)
do_experiment <- function(n = 100, eps.sd = 5) {
x1 <- rnorm(n, 50, 5)
x2 <- sample(c(0,1), replace=T, n)
eps <- rnorm(n, 0, eps.sd)
y <- beta[1] + beta[2]*x1 + beta[3]*x2 + eps
return(coef(lm(y~x1 + x2)))
}
set.seed(1212)
coefEstimates <- replicate(1000, do_experiment(n = 100))
rowMeans(coefEstimates)
(Intercept) x1 x2
1.972531 3.000327 4.010408
apply(coefEstimates, 1, sd)
(Intercept) x1 x2
5.05588111 0.09988136 1.00523822
Вы можете уменьшить дисперсию члена ошибки, если вы хотите меньше вариаций в оценке перехвата от симуляции до симуляции. Как упоминает @rookie, вы также можете увеличить размер выборки.
set.seed(1213)
coefEstimates2 <- replicate(1000, do_experiment(n = 100, eps.sd = 1))
rowMeans(coefEstimates2)
(Intercept) x1 x2
2.046227 2.999186 3.996409
apply(coefEstimates2, 1, sd)
(Intercept) x1 x2
1.0459009 0.0205488 0.1995421