从摘要中提取系数和区间构建矩阵
Building matrix from Extracting Coefficients and Interval from summary
我有这个data.frame:
df <- data.frame(a=rnorm(500),b=rnorm(500),c=rnorm(500),
d=rnorm(500),e=rnorm(500),f=rnorm(500),g=rnorm(500))
我运行分位数回归:
library(quantreg)
a<-rq(a~g,tau = 0.5,method="br",data=df)
summary.rq(a)
b<-rq(b~g,tau = 0.5,method="br",data=df)
summary.rq(b)
c<-rq(c~g,tau = 0.5,method="br",data=df)
summary.rq(c)
d<-rq(d~g,tau = 0.5,method="br",data=df)
summary.rq(d)
e<-rq(e~g,tau = 0.5,method="br",data=df)
summary.rq(e)
f<-rq(f~g,tau = 0.5,method="br",data=df)
summary.rq(f)
g<-rq(g~g,tau = 0.5,method="br",data=df)
summary.rq(g)
例如:
summary.rq(a)
Call: rq(formula = a ~ g, tau = 0.5, data = df, method = "br")
tau: [1] 0.5
Coefficients:
coefficients lower bd upper bd
(Intercept) 0.12940 0.04870 0.17940
g -0.02131 -0.08078 0.05370
我想构建这样的矩阵:
Matrix.Parameters.Interval<-matrix(0,7,6)
第一行将与第一个模型相关。第一列是截距参数,2º 和 3º 列是它的置信区间(我将从 summary
输出中提取),4º 列是变量参数,5º 和 6º 列是它的区间(我将从 summary
输出中提取)
modList <- list(a,b,c,d,e,f,g)
一个函数,用于从模型中提取信息并将其重新格式化为单行矩阵,其中关于截距(第一行)的信息作为矩阵的前半部分,关于斜率的信息作为后半部分...
tmpf <- function(model) {
matrix(coef(summary(model)),nrow=1,byrow=TRUE)
}
运行 对列表的每个元素:
t(sapply(modList[1:5],tmpf))
t()
是必要的,因为 sapply
总是 returns 以列方式产生结果。
这仅适用于前 5 个模型;第 6 个模型是奇异的,因为预测变量和响应相同。
更系统的方法:
tmpf2 <- function(respvar) {
fit <- rq(reformulate("g",response=respvar),
tau = 0.5,method="br",data=df)
matrix(coef(summary(fit)),nrow=1,byrow=TRUE)
}
t(sapply(names(df)[1:5],tmpf2))
这样您就不必重复代码 (DRY="do not repeat yourself"),并且您的工作空间中不会出现所有那些合适的模型。
我有这个data.frame:
df <- data.frame(a=rnorm(500),b=rnorm(500),c=rnorm(500),
d=rnorm(500),e=rnorm(500),f=rnorm(500),g=rnorm(500))
我运行分位数回归:
library(quantreg)
a<-rq(a~g,tau = 0.5,method="br",data=df)
summary.rq(a)
b<-rq(b~g,tau = 0.5,method="br",data=df)
summary.rq(b)
c<-rq(c~g,tau = 0.5,method="br",data=df)
summary.rq(c)
d<-rq(d~g,tau = 0.5,method="br",data=df)
summary.rq(d)
e<-rq(e~g,tau = 0.5,method="br",data=df)
summary.rq(e)
f<-rq(f~g,tau = 0.5,method="br",data=df)
summary.rq(f)
g<-rq(g~g,tau = 0.5,method="br",data=df)
summary.rq(g)
例如:
summary.rq(a)
Call: rq(formula = a ~ g, tau = 0.5, data = df, method = "br")
tau: [1] 0.5
Coefficients:
coefficients lower bd upper bd
(Intercept) 0.12940 0.04870 0.17940
g -0.02131 -0.08078 0.05370
我想构建这样的矩阵:
Matrix.Parameters.Interval<-matrix(0,7,6)
第一行将与第一个模型相关。第一列是截距参数,2º 和 3º 列是它的置信区间(我将从 summary
输出中提取),4º 列是变量参数,5º 和 6º 列是它的区间(我将从 summary
输出中提取)
modList <- list(a,b,c,d,e,f,g)
一个函数,用于从模型中提取信息并将其重新格式化为单行矩阵,其中关于截距(第一行)的信息作为矩阵的前半部分,关于斜率的信息作为后半部分...
tmpf <- function(model) {
matrix(coef(summary(model)),nrow=1,byrow=TRUE)
}
运行 对列表的每个元素:
t(sapply(modList[1:5],tmpf))
t()
是必要的,因为 sapply
总是 returns 以列方式产生结果。
这仅适用于前 5 个模型;第 6 个模型是奇异的,因为预测变量和响应相同。
更系统的方法:
tmpf2 <- function(respvar) {
fit <- rq(reformulate("g",response=respvar),
tau = 0.5,method="br",data=df)
matrix(coef(summary(fit)),nrow=1,byrow=TRUE)
}
t(sapply(names(df)[1:5],tmpf2))
这样您就不必重复代码 (DRY="do not repeat yourself"),并且您的工作空间中不会出现所有那些合适的模型。