R——在大型数据集中重复线性回归

R-- repeating linear regression in a large dataset

我是一名 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 的基础知识,所以任何建议将不胜感激。

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])

一行代码即可完成:

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