在 R 中手动执行线性回归
Manually performing linear regression in R
假设我有以下线性模型。
y = ax + bz
我的问题是;如何在不使用 lm 函数的情况下估计这些参数。
不清楚您希望对无包裹要求有多严格。如果你愿意使用 stats
包(大多数人甚至不认为这是一个包,因为它是基本 R 的标准,你不必用 library()
加载它) , 然后你可以调用通常的“线性模型”函数 lm()
.
使用 `lm()`
fit <- lm(y ~ x + z, data = your_data_frame)
summary(fit)
使用矩阵代数
相比之下,您还可以采取更自命不凡的方式编写矩阵代数以手动拟合这些参数。除了基础 R 之外,这不涉及任何包。
X <- as.matrix(your_data[, c('x', 'z')]) # extract your predictors
X <- cbind(1, X) # add an intercept to your design matrix
y <- your_data$y
betas <- solve(t(X) %*% X) %*% t(X) %*% y
编辑:请注意,这些方法假定没有缺失数据(即每一行都有一个 y、x 和 z 值)。
假设我有以下线性模型。
y = ax + bz
我的问题是;如何在不使用 lm 函数的情况下估计这些参数。
不清楚您希望对无包裹要求有多严格。如果你愿意使用 stats
包(大多数人甚至不认为这是一个包,因为它是基本 R 的标准,你不必用 library()
加载它) , 然后你可以调用通常的“线性模型”函数 lm()
.
使用 `lm()`
fit <- lm(y ~ x + z, data = your_data_frame)
summary(fit)
使用矩阵代数
相比之下,您还可以采取更自命不凡的方式编写矩阵代数以手动拟合这些参数。除了基础 R 之外,这不涉及任何包。
X <- as.matrix(your_data[, c('x', 'z')]) # extract your predictors
X <- cbind(1, X) # add an intercept to your design matrix
y <- your_data$y
betas <- solve(t(X) %*% X) %*% t(X) %*% y
编辑:请注意,这些方法假定没有缺失数据(即每一行都有一个 y、x 和 z 值)。