3

1000以上のポイントを持つデータセットのqqnormプロットがあります。qqlineが25%と75%で行うのと同じように、一度に2つの分位数(たとえば30%と70%)の間に線を引きたいのですが、使用する分位数を自由に選択できます。私はggplotを少しいじってみましたが、うまくいくものが得られないようです。これを行うための最良の方法は何ですか?

編集:私のデータは、EcdatのGarchデータセットのドルからポンドへの為替レートの変化です。

diffbp = diff(Garch[,5])

その後、私がしているのは

qqnorm(diffbp)

qqline(diffbp)

ただし、比較のために、qqlineがさまざまな分位数を通過できるプロットも必要です。

編集2:私は次のことを試しました:

> qqnorm(diffbp)

> quantile(diffbp,probs=c(0.01,0.99))
       1%       99% 
-0.029850  0.032675 

> qqline(c(-0.029850,0.032675))

結果の行は、私が目指しているものとまったく同じではないと思います。つまり、適切な分位数を通過させたい場合、線は常にx軸の-1と1を通過すると思います。

編集3:それを理解しました!サンプルと理論分位数を手作業で計算し、それらを通る直線の方程式を計算してから、を使用して直線を描きましたabline()。ただし、時間のかかる方法です。

4

3 に答える 3

2

私はあなたがちょうど必要だと思います

qqline(diffbp,probs=c(0.3,0.7))

編集: R に関するコメントからわかります: qqline は 1 番目と 3 番目の四分位数を接続します。異なる分位数 (つまり、30% と 70%) の間に線を引くにはどうすればよいですか? 違いは、私が R-devel を使用していることと、(@caracal が指摘するように) R 2.15.1 パッチ以降にこの機能が新しくなったことです ( http://developer.r-project.org/blosxom.cgi/Rを参照)。 -2-15-支店/NEWS、2012年7月7日)

これが機能することを示す例を次に示しqqline()ます (コントラストを大きくするために 0.1、0.9 を使用しました)。

set.seed(101)
z <- rgamma(1000,shape=1)
newprobs <- c(0.1,0.9)
## png("qq.png")
qqnorm(z,pch=".")
qqline(z,col="red")
qqline(z,col="blue",probs=newprobs)
## add reference lines
abline(h=quantile(z,c(0.25,0.75)),col="red",lty=2)
abline(h=quantile(z,newprobs),col="blue",lty=2)
abline(v=qnorm(c(0.25,0.75)),col="red",lty=2)
abline(v=qnorm(newprobs),col="blue",lty=2)
## dev.off()

ここに画像の説明を入力

于 2012-10-07T17:36:54.617 に答える
2

編集:

以下の情報は、R (およびstatsパッケージ) バージョン 2.15.1 に有効です。明らかに、それ以降のバージョンには、任意の分位数をプロットする組み込み機能が組み込まれます。


qqline.25 および .75 分位点をプロットするようにハードコードされているようです。ただし、独自の関数を作成することを気にしない場合は、次のようにすることができます。

myQqplot <- function(data, probs){
  qqnorm(data)
  theQuants <- quantile(data, probs = probs)
  lm1 <- lm(theQuants~qnorm(probs))
  abline(lm1)
  invisible()
}

myQqplot(diffbp, c(.5,.99))  

ここに画像の説明を入力

引数に2 つの分位数のみを指定することを確認するチェックはありませんprobsが、必要に応じて追加できます。

于 2012-10-07T18:36:55.160 に答える
1

コードをコピーし、2 行目を次のように変更して、新しい関数を作成します。

x <- qnorm(c(0.30, 0.70))
于 2012-10-07T06:25:44.900 に答える