问题描述
我有两个xts数据集。每个包含50个变量。一种是因变量数据集,另一种是自变量数据集。我想应用多个回归模型,即每个数据集中的一个变量。但是没有得到理想的结果。许多价值缺失。我想从每次回归中提取系数以及t和p值。
library(xts)
library(zoo)
library(PerformanceAnalytics)
dep_var<-managers[,c(1,3)]
ind_var<-managers[,c(8,9)]
## individually running each model
model1<-lm(dep_var[,1]~ind_var[,1])
model2<-lm(dep_var[,2]~ind_var[,2])
summary(model1)
summary(model2)
models<-lapply(dep_var,function(x) lm(x[i]~ind_var[i]))
解决方法
输入注释太长了,我的意思是将您的data.frame写成长格式,例如,每一行都是一个观察值,列var
表示比较:
library(broom)
library(dplyr)
dep_var<-data.frame(matrix(runif(30),ncol=3))
colnames(dep_var) = paste0("dv",1:3)
ind_var<-data.frame(matrix(runif(30),ncol=3))
colnames(ind_var) = paste0("iv",1:3)
df = do.call(rbind,lapply(1:3,function(i)data.frame(var=i,indep=ind_var[,i],dep=dep_var[,i])))
head(df)
var indep dep
1 1 0.9138594 0.01566731
2 1 0.8426182 0.09871969
3 1 0.6374313 0.38409883
4 1 0.2891506 0.13790234
5 1 0.2363087 0.60410820
6 1 0.9763011 0.21100213
然后可以使用tidy
中的broom
使线性模型输出更好:
df %>% group_by(var) %>% do(tidy(lm(dep ~ indep,data=.)))
# A tibble: 6 x 6
# Groups: var [3]
var term estimate std.error statistic p.value
<int> <chr> <dbl> <dbl> <dbl> <dbl>
1 1 (Intercept) 0.496 0.200 2.48 0.0380
2 1 indep 0.0485 0.382 0.127 0.902
3 2 (Intercept) 0.459 0.196 2.34 0.0476
4 2 indep -0.0880 0.356 -0.247 0.811
5 3 (Intercept) 0.591 0.185 3.19 0.0129
6 3 indep -0.183 0.270 -0.675 0.519