【问题标题】:Is there a simple way to calculate the linear regression slope based on multiple points?有没有一种简单的方法来计算基于多个点的线性回归斜率?
【发布时间】:2018-06-03 21:50:34
【问题描述】:
data <- data.frame(Year1 = c(4, 2), Year2 = c(0, 10), Year3 = c(5, 6), Year4 = c(18, 4))

鉴于上面的 2 行/观察值包含 4 年/列。我想让 R 根据每个观察的所有 4 个点计算线性回归线的斜率。

斜率值应出现在数据框右侧的新列中。

slope_data <- data.frame(Year1 = c(4, 2), Year2 = c(0, 10), Year3 = c(5, 6), Year4 = c(18, 4), Slope = c(5, 5))

我想知道是否有一个简单的函数或包可以实现这一点?

【问题讨论】:

    标签: r


    【解决方案1】:

    根据 cmets,这将需要超过两行。您可以使用lm 获取一行所需的斜率,并使用sapply 获取所有行的斜率。

    Slope = function(x) {
        TempDF = data.frame(x, year=1:ncol(data))
        lm(x ~ year, data=TempDF)$coefficients[2]
    }
    
    TData = as.data.frame(t(data))
    data$slope = sapply(TData, Slope)
    data
      Year1 Year2 Year3 Year4 slope
    1     4     0     5    18   4.7
    2     2    10     6     4   0.2
    

    【讨论】:

    • 感谢您的回复!没错,斜率可能不会使这些数据受益,但那是因为我使用的是样本数据,而我的真实数据有几千个观察值。话虽如此,是否有一种更自动的方法可以在一个代码中找到许多观察的斜率?
    • 感谢您的回答!你能解释一下 $coefficients[2] 部分指的是什么吗?
    • lm 函数返回一个复杂的结构。其中之一是系数 - 斜率和截距。截距是 $coefficients[1]。斜率为 $coefficients[2]。如果您保存其中一个线性模型LM =lm( ... ),然后输入str(LM),您可以看到所有返回的内容。
    • 这真的很有帮助。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-22
    • 2016-06-07
    • 2017-03-01
    • 2011-08-01
    • 1970-01-01
    • 2019-07-21
    相关资源
    最近更新 更多