如何解决有没有一种方法可以为一系列因变量到一个自变量创建多个回归输出?
我有大约500只股票及其收益的数据集。我想知道是否有一种方法可以生成一个因变量到一个独立变量的一对一关系的多个回归输出?
例如,这是其中一只MSFT股票与市场相比的简单回归输出。有没有办法像我下面那样创建多行,有没有办法将500个变量中的每一个放入公式的Y分量并为每个变量生成新的输出?甚至可能将所有这些数据都放在一个表中?
这些是我试图分组以简化我的过程的变量:
regression_model <- lm(raw_data$MSFT~raw_data$VFINX,raw_data)
summary(regression_model)
解决方法
一种解决方法(一定是某个地方的重复答案?)是
- 将数据重整为长格式
- 嵌套数据以创建一列包含独立值和从属值的小标题
- 运行每个回归并将结果存储在新列中
- 整理回归输出并取消嵌套数据
您的示例数据不可用,因此我们使用mtcars
。假设我们要使用mpg
,disp
,hp
,drat
和wt
中的每一个来预测qsec
。首先,我们选择,收集和嵌套:
library(dplyr)
library(tidyr)
library(purrr)
library(broom)
mtcars %>%
select(mpg,disp,hp,drat,wt,qsec) %>%
gather(Var,Val,-mpg) %>%
nest(data = c(mpg,Val))
结果:
# A tibble: 5 x 2
Var data
<chr> <list>
1 disp <tibble [32 x 2]>
2 hp <tibble [32 x 2]>
3 drat <tibble [32 x 2]>
4 wt <tibble [32 x 2]>
5 qsec <tibble [32 x 2]>
现在,我们可以map
将每一行进行回归,并创建经过整理的输出列:
mtcars %>%
select(mpg,Val)) %>%
mutate(model = map(data,~lm(mpg ~ Val,data = .)),tidied = map(model,tidy))
# A tibble: 5 x 4
Var data model tidied
<chr> <list> <list> <list>
1 disp <tibble [32 x 2]> <lm> <tibble [2 x 5]>
2 hp <tibble [32 x 2]> <lm> <tibble [2 x 5]>
3 drat <tibble [32 x 2]> <lm> <tibble [2 x 5]>
4 wt <tibble [32 x 2]> <lm> <tibble [2 x 5]>
5 qsec <tibble [32 x 2]> <lm> <tibble [2 x 5]>
最后,选择我们想要的列和unnest
:
mtcars %>%
select(mpg,tidy)) %>%
select(-model,-data) %>%
unnest(cols = c(tidied))
结果:
# A tibble: 10 x 6
Var term estimate std.error statistic p.value
<chr> <chr> <dbl> <dbl> <dbl> <dbl>
1 disp (Intercept) 29.6 1.23 24.1 3.58e-21
2 disp Val -0.0412 0.00471 -8.75 9.38e-10
3 hp (Intercept) 30.1 1.63 18.4 6.64e-18
4 hp Val -0.0682 0.0101 -6.74 1.79e- 7
5 drat (Intercept) -7.52 5.48 -1.37 1.80e- 1
6 drat Val 7.68 1.51 5.10 1.78e- 5
7 wt (Intercept) 37.3 1.88 19.9 8.24e-19
8 wt Val -5.34 0.559 -9.56 1.29e-10
9 qsec (Intercept) -5.11 10.0 -0.510 6.14e- 1
10 qsec Val 1.41 0.559 2.53 1.71e- 2
您可以从dplyr::filter()
添加过滤器,例如删除“拦截”行或选择p值阈值。
mtcars %>%
select(mpg,-data) %>%
unnest(cols = c(tidied)) %>%
filter(p.value < 0.01,term != "(Intercept)")
# A tibble: 5 x 6
Var term estimate std.error statistic p.value
<chr> <chr> <dbl> <dbl> <dbl> <dbl>
1 disp Val -0.0412 0.00471 -8.75 9.38e-10
2 hp Val -0.0682 0.0101 -6.74 1.79e- 7
3 drat Val 7.68 1.51 5.10 1.78e- 5
4 wt Val -5.34 0.559 -9.56 1.29e-10
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。