【问题标题】:How to get least squares estimates by hand in R如何在R中手动获得最小二乘估计
【发布时间】:2019-09-17 01:02:14
【问题描述】:

我不知道如何使用公式而不是使用函数手动获得最小二乘估计(beta 1 hat 和 beta not hat)。

我已经尝试了下面的公式,我觉得我需要使用 for 循环,但我就是不知道该怎么做。一旦我获得 beta 1,我应该能够获得 beta 不。

x <- toluca$lot 
y <- toluca$work

beta1hat <- (sum(x[i]-mean(x)*sum(y[i] - mean(y))/sum(x[i]-mean(x)^2)

它说 I 没有定义,但我不知道我会如何定义 I,因为它是 x 中的一个特定值。

【问题讨论】:

  • 像这样的 R 函数是矢量化的,您根本不必指定 ix &lt;- 1:10 然后看看x - mean(x) 给出了什么。还有(x - mean(x))^2
  • 您不需要[i] 条款。 R 自动处理向量。另外:注意括号和求和的内容。
  • 您还需要确保括号有意义。另外...您的公式在分子中的总和太多。
  • ` beta_1_hat
  • i 未定义,因为您没有为其分配任何值。广义形式是 solve(t(x) %*% x) %*% (t(x) %*% y)

标签: r linear-regression least-squares


【解决方案1】:

您可以为 R 中的普通最小二乘估计器编写 equation 的矩阵形式。下面是一个示例:

set.seed(123)

x <- 1:10
a <- 2
b <- 3

y <- a*x + b + rnorm(10)

xm <- matrix(c(x, rep(1, length(x))), ncol = 2, nrow = 10)
ym <- matrix(y, ncol = 1, nrow = 10)

beta_hat <- MASS::ginv(t(xm) %*% xm) %*% t(xm) %*% ym

这给出了与summary(lm(y ~ x)) 完全相同的输出。但是请注意,lm 函数并不是一个简单的单行函数,因为计算矩阵的逆是一个具有数值挑战性的问题,因此必须采取一些预防措施。

【讨论】:

  • 我要使用公式。
  • 为什么这会让 beta 1 变成无穷大? sum((x-mean(x))*(y-mean(y)))/sum(x-mean(x))^2
  • 你的公式是错误的。对方差和协方差使用显式公式。
猜你喜欢
  • 2019-10-24
  • 1970-01-01
  • 2012-03-05
  • 2011-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多