0

私はこの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出力から抽出する)です。

4

1 に答える 1

2
modList <- list(a,b,c,d,e,f,g)

モデルから情報を抽出し、切片 (1 行目) に関する情報を行列の前半とし、傾きに関する情報を後半とする 1 行の行列に再フォーマットする関数 ...

tmpf <- function(model) {
    matrix(coef(summary(model)),nrow=1,byrow=TRUE)
}

リストの各要素に対して実行します。

t(sapply(modList[1:5],tmpf))

常に列単位で結果を返すため、これt()が必要です。sapply

これは最初の 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="自分自身を繰り返さないでください")、これらの適合モデルのすべてがワークスペースを乱雑にすることはありません。

于 2016-05-09T15:05:53.273 に答える