r - R - 如何从“扩展”矩阵中获取每列的系数〜时间线?
问题描述
我想收集每一列的线性回归系数~ ind。
这是我的数据:
temp <- data.frame(
ind = c(1:10),
`9891` = runif(10, 15, 75),
`7891` = runif(10, 15, 75),
`5891` = runif(10, 15, 75)
)
我试过
result = data.frame()
cols <- colnames(temp)[-1]
for (code in cols) {
fit <- lm(temp[, code] ~ temp$ind)
coef <- coef(fit)['ind']
result$ind <- code
result$coef <- coef
}
但这不起作用。
任何人都可以修复我的方法,或提供更好的解决方案吗?另外,我想知道是否lapply()
并且summarise_at()
可以完成这项工作。
谢谢!
解决方案
这是一个summarise_at
选项
temp %>%
summarise_at(vars(-contains("ind")), list(coef = ~list(lm(. ~ ind)$coef))) %>%
unnest()
# X9891_coef X7891_coef X5891_coef
#1 25.927946 52.5668120 35.152330
#2 2.459137 0.3158741 1.013678
第一行给出偏移量,第二行给出斜率系数。
或者只提取斜率系数并将结果存储在一个长data.frame
temp %>%
summarise_at(vars(-contains("ind")), list(coef = ~list(lm(. ~ ind)$coef[2]))) %>%
unnest() %>%
stack() %>%
setNames(c("slope", "column"))
# slope column
# 1 2.4591375 X9891_coef
# 2 0.3158741 X7891_coef
# 3 1.0136783 X5891_coef
PS。在处理随机数据以确保结果的可重复性时,最好包含一个固定的随机种子。
样本数据
set.seed(2018)
temp <- data.frame(
ind = c(1:10),
`9891` = runif(10, 15, 75),
`7891` = runif(10, 15, 75),
`5891` = runif(10, 15, 75)
)
推荐阅读
- javascript - 定义后日期对象不存在?
- html - 在 css 中取消设置 css 属性。是否可以?
- php - 将所选名称发布到数据库
- python - 为什么我的再训练模型的准确性很差?
- android - Kotlin - 使用 RxJava 的改造请求给出空响应
- botframework - 找不到 V4 Botbuilder 的代码示例
- angular - 从应用组件侧栏路由到带参数的组件
- php - Laravel - 通过检查数据库中的数组中是否存在值来过滤集合
- css - Chrome 上的 Mac OS X Mojave 字体变薄 - 如何修复?
- python - Python:忽略已经过时的用户输入