R中的截距和斜率函数

问题描述

R 中是否有像 excel 中那样的截距和斜率函数?我知道您可以使用函数“lm”来运行线性回归,但就我而言,将输出简单地作为一个数字来获取会更实用,就像在 excel 中使用截距和斜率一样。

解决方法

创建模型后,您可以从模型内的 coefficients 矩阵中提取截距和斜率值。这可以使用 coefficients()/coef() 函数(这些是同一函数的别名)或直接使用 $coefficient 提取系数来提取。最好使用coefficients()函数,因为它也可以用于lm以外的模型,所以这是一个好习惯。

x <- rnorm(100)
y <- 0.5*x + rnorm(100)

mod <- lm(y ~ x)
cf <- coef(mod)

cf 现在将包含一个带有 (Intercept)x(也就是斜率)的向量。然后,您可以使用任一数字提取这些:

Intercept <- cf[1]
Slope <- cf[2]

或按他们的名字:

Intercept <- cf["(Intercept)"]
Slope <- cf["x"]

如果你在做多变量,那么建议使用名称,因为输出的顺序可能出乎意料(再次,这是一个好习惯)

,

假设问题是要求具有一个自变量和截距的线性模型的截距和斜率函数:

1) mean/cov/var 如果问题的想法是使用 lm 那么试试这些函数:

slope <- function(x,y) cov(x,y) / var(x)
intercept <- function(x,y) mean(y) - slope(x,y) * mean(x)

要对此进行测试,请使用内置的 CO2 数据:

coef(lm(uptake ~ conc,CO2))
## (Intercept)        conc 
## 19.50028981  0.01773059 


with(CO2,intercept(conc,uptake))
## [1] 19.50029

with(CO2,slope(conc,uptake))
## [1] 0.01773059

2) lm 如果可以使用 lm 那么:

intercept <- function(x,y) coef(lm(y ~ x))[[1]]
slope <- function(x,y) coef(lm(y ~ x))[[2]]

3) lm.fit 另一种可能性是像这样使用 lm.fit

intercept <- function(x,y) coef(lm.fit(cbind(1,x),y))[[1]]
slope <- function(x,y))[[2]]