2017-09-17 14 views
1

私はいくつかの独立変数に対して分数回帰を別々に実行しています(同じ依存関係)。私は、1つのプロットで各変数の複数のクオンタイルにわたってスロープ推定値だけをプロットしたいと思います。単一ページ内の変数による分数回帰のプロット

set.seed(1988) 

y <- rnorm(50, 5, 3) 
x1 <- rnorm(50, 3, 1) 
x2 <- rnorm(50, 1, 0.5) 

# Running Quantile Regression 
require(quantreg) 
fit1 <- summary(rq(y~x1, tau=1:9/10), se="boot") 
fit2 <- summary(rq(y~x2, tau=1:9/10), se="boot") 

私はクォンタイルの上にのみスロープ推定値をプロットしたい:

は、ここでおもちゃのデータです。したがって、私はにparm=2を与えています。

plot(fit1, parm=2) 
plot(fit2, parm=2) 

は今、私は単一のページにこれらのプロットの両方を組み合わせたいです。

これまでに何を試みましたか。

  1. 私はpar(mfrow=c(2,2))を設定してプロットしてみました。しかし、それは空白のページを生成しています。
  2. 私はgridExtraとgridGraphicsをうまく使用せずに試しました。私はplot.rqsのソースコードに見えるようにしようとしていますthis文書
  3. のように機能layout機能を使用してみました
  4. hereを述べたようにグロブはオブジェクトにベースのグラフを変換しようとしました。しかし、私は信頼バンドをプロットしているかどうかを理解できません(私は係数のみの係数をプロットすることができます)、またはそこでmfrowパラメータを変更することができます。

誰かが間違っていると指摘できますか?ソースコードplot.rqsを調べて、そこにパラメータを変更する必要がありますか?

答えて

1

ながらquantreg::plot.summary.rqsmfrowパラメータを持っているし、それを

もう1つの方法は、オブジェクトを解析して手動でプロットすることです。タウ値と係数を引き出すことができますあなたが好きならそうtidyverse文法の各タウに対する値の単なるリストですfit1fit2のうち効率の良い行列、、、

library(tidyverse) 

c(fit1, fit2) %>% # concatenate lists, flattening to one level 
    # iterate over list and rbind to data.frame 
    map_dfr(~cbind(tau = .x[['tau']], # from each list element, cbind the tau... 
        coef(.x) %>% # ...and the coefficient matrix, 
         data.frame(check.names = TRUE) %>% # cleaned a little 
         rownames_to_column('term'))) %>% 
    filter(term != '(Intercept)') %>% # drop intercept rows 
    # initialize plot and map variables to aesthetics (positions) 
    ggplot(aes(x = tau, y = Value, 
       ymin = Value - Std..Error, 
       ymax = Value + Std..Error)) + 
    geom_ribbon(alpha = 0.5) + 
    geom_line(color = 'blue') + 
    facet_wrap(~term, nrow = 2) # make a plot for each value of `term` 

facetted plot

は水平を追加し、オブジェクトのうちの多くを引き出しますオリジナルのライン、そうでなければワイルドになります。


別のオプションは、元の画像を撮影(または任意のデバイスでそれらを保存し、それらを再読み込み)するmagickを使用して手動でそれらを組み合わせることである。

library(magick) 

plots <- image_graph(height = 300) # graphics device to capture plots in image stack 
plot(fit1, parm = 2) 
plot(fit2, parm = 2) 
dev.off() 

im1 <- image_append(p1p2, stack = TRUE) # attach images in stack top to bottom 

image_write(im1, 'rq.png') 

joined plots

+0

これは完全にうまく動作しますが、私は今すぐコードを解読することはできません。この道をありがとう。 – Enigma

+0

私はいくつかのコメントと、より直接的な「magick」アプローチで編集しました。 – alistaire

0

quantregで使用される関数plotは、独自のmfrowパラメータを持っています。あなたはそれを指定しない場合、それはそれ自身で選択したいくつかのオプションを強制し(したがって、あなたのpar(mfrow = c(2,2))

plot.rqsmfrowパラメータの使用よりも優先されます:。

# make one plot, change the layout 
plot(fit1, parm = 2, mfrow = c(2,1)) 
# add a new plot 
par(new = TRUE) 
# create a second plot 
plot(fit2, parm = 2, mfrow = c(2,1)) 
+0

私はこれを試してみました。しかし、私がmfrowの次元を増やすと(私がOPで示したような変数が増えているので)、それらは順番にプロットされません。 'mfrow = c(2,2)'では、最初のプロットは左上(Grid-1,1)に、2番目のプロットは右下(Grid-2,2)に、3番目のプロットは(2,2) 。 – Enigma

関連する問題