【问题标题】:R-- repeating linear regression in a large datasetR——在大型数据集中重复线性回归
【发布时间】:2015-03-10 19:39:41
【问题描述】:

我是一名 R 新手,使用年度时间序列数据集(名为“timeseries”)。该集合有一个用于年份的列和另外 600 个具有不同位置(“L1”、“L2”等)的年度值的列,例如类似于以下内容:

Year    L1     L2     L3    L4
1963   0.63   0.23   1.33  1.41
1964   1.15   0.68   0.21  0.4
1965   1.08   1.06   1.14  0.83
1966   1.69   1.85   1.3   0.76
1967   0.77   0.62   0.44  0.96

我想对每个站点进行线性回归,并且可以将以下内容用于单个站点:

timeL1<-lm(L1~Year, data=timeseries)
summary(timeL1)

但我认为必须有一种方法可以自动对所有位置重复此操作。理想情况下,我希望得到两个结果向量——一个是所有位置的系数,一个是所有位置的 p 值。通过一些搜索,我认为 plyr 包可能有效,但我无法弄清楚。我仍在学习 R 的基础知识,因此我们将不胜感激。

【问题讨论】:

    标签: r regression


    【解决方案1】:

    你可以用一行代码做到这一点:

    apply(df[-1], 2, function(x) summary(lm(x ~ df$Year))$coef[1,c(1,4)])
                       L1           L2          L3          L4
    Estimate -160.0660000 -382.2870000 136.4690000 106.9820000
    Pr(>|t|)    0.6069965    0.3886881   0.7340981   0.7030296
    

    【讨论】:

    • 谢谢!可能是一个愚蠢的后续,但是 coef 后面括号中的数字代表什么?
    • 这是矩阵子集($coef是一个矩阵),选择第一行第一列和第四列
    【解决方案2】:

    applylapply 的组合可以完成此操作。

    d <- read.table(text="Year    L1     L2     L3    L4
    1963   0.63   0.23   1.33  1.41
    1964   1.15   0.68   0.21  0.4
    1965   1.08   1.06   1.14  0.83
    1966   1.69   1.85   1.3   0.76
    1967   0.77   0.62   0.44  0.96", header=TRUE)
    
    year <- d$Year
    d <- d[,-1]
    models<-apply(d, 2, function(x) lm(x ~ year))
    summaries <- lapply(models, summary)
    pvals <- lapply(lapply(summaries, coefficients), function(x) x[4])
    coefs <- lapply(lapply(summaries, coefficients), function(x) x[1])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-05
      • 2016-02-12
      • 2013-09-13
      • 2015-03-13
      • 2021-07-04
      • 2014-05-05
      • 2018-04-28
      • 2017-11-13
      相关资源
      最近更新 更多