Rの複素回帰プロット


10

視覚的なデータ分析のために複雑なグラフィックを描く必要があります。2つの変数と多数のケース(> 1000)があります。例(分散を「通常」にするには、数値は100です):

x <- rnorm(100,mean=95,sd=50)
y <- rnorm(100,mean=35,sd=20)
d <- data.frame(x=x,y=y)

1)同時発生の相対頻度に対応するポイントサイズで生データをプロットする必要plot(x,y)があるため、オプションではありません-ポイントサイズが必要です。これを達成するために何をすべきですか?

2)同じプロットで、相関の変化を表す95%信頼区間の楕円と線をプロットする必要があります(正しく名前を付ける方法がわからない)-次のようなもの:

library(corrgram)
corrgram(d, order=TRUE, lower.panel=panel.ellipse, upper.panel=panel.pts)

コレログラム

しかし、1つのプロットで両方のグラフを使用します。

3)最後に、これに加えて、結果の線形回帰モデルを描画する必要があります。

r<-lm(y~x, data=d)
abline(r,col=2,lwd=2)

しかし、エラー範囲... QQ-プロットのようなもの:

QQプロット

しかし、可能であればフィッティングエラーのため。

だから問題は:

これらすべてを1つのグラフで実現する方法は?

回答:


29

下の写真はあなたが達成したいもののように見えますか?

ここに画像の説明を入力してください

コメントに続いて、更新された Rコードを次に示します。

do.it <- function(df, type="confidence", ...) {
  require(ellipse)
  lm0 <- lm(y ~ x, data=df)
  xc <- with(df, xyTable(x, y))
  df.new <- data.frame(x=seq(min(df$x), max(df$x), 0.1))
  pred.ulb <- predict(lm0, df.new, interval=type)
  pred.lo <- predict(loess(y ~ x, data=df), df.new)
  plot(xc$x, xc$y, cex=xc$number*2/3, xlab="x", ylab="y", ...)
  abline(lm0, col="red")
  lines(df.new$x, pred.lo, col="green", lwd=1.5)
  lines(df.new$x, pred.ulb[,"lwr"], lty=2, col="red")
  lines(df.new$x, pred.ulb[,"upr"], lty=2, col="red")    
  lines(ellipse(cor(df$x, df$y), scale=c(sd(df$x),sd(df$y)), 
        centre=c(mean(df$x),mean(df$y))), lwd=1.5, col="green")
  invisible(lm0)
}

set.seed(101)
n <- 1000
x <- rnorm(n, mean=2)
y <- 1.5 + 0.4*x + rnorm(n)
df <- data.frame(x=x, y=y)

# take a bootstrap sample
df <- df[sample(nrow(df), nrow(df), rep=TRUE),]

do.it(df, pch=19, col=rgb(0,0,.7,.5))

そしてこれがggplotizedバージョンです

ここに画像の説明を入力してください

次のコードで生成されます:

xc <- with(df, xyTable(x, y))
df2 <- cbind.data.frame(x=xc$x, y=xc$y, n=xc$number)
df.ell <- as.data.frame(with(df, ellipse(cor(x, y), 
                                         scale=c(sd(x),sd(y)), 
                                         centre=c(mean(x),mean(y)))))
library(ggplot2)

ggplot(data=df2, aes(x=x, y=y)) + 
  geom_point(aes(size=n), alpha=.6) + 
  stat_smooth(data=df, method="loess", se=FALSE, color="green") + 
  stat_smooth(data=df, method="lm") +
  geom_path(data=df.ell, colour="green", size=1.2)

色シェーディング効果を使用して、クックの距離などのモデルフィットインデックスを追加することで、もう少しカスタマイズできます。


1
@chl +1、素晴らしいグラフ、短いコード。
mpiktas 2011年

@mpiktasありがとう。これにより、実際には適切なサンプルで作業していないことに気づきました。実際には:-)
chl

df.new <- data.frame(x = seq(min(x), max(x), 0.1))s size is also strange (too small). Also tryed x,dflibrary(car) cr.plots(m0)

(x,y)car::dataEllipseellipse

2
@Tal楕円の解釈はcorrgramパッケージと同じです。平均を中心とし、SD(x)とSD(y)でスケーリングされた2変量正規分布を想定した95%のペアワイズ信頼領域を示します。散布図で使用する場合、私はこれの大ファンではありません。しかし、Murdoch&Chow、A Stat(大きな相関行列のグラフィック表示、Am Stat(1996)50:178、またはFriendly、Corrgrams:Exploratory display for correlation matrixs、Am Stat(2002)56:316を参照してください。
11年

2

ポイント1の場合、cexプロットのパラメーターを使用してポイントサイズを設定します。

例えば

x = rnorm(100)
plot(x, pch=20, cex=abs(x))

1つのプロットに複数のグラフをpar(mfrow=c(numrows, numcols))配置するには、レイアウトを等間隔layoutにするか、より複雑なグラフを作成するために使用します。


1
チップに関する+1ですcexが、OPはすべてを個別のプロット領域ではなく、同じプロット領域に配置したいと考えています。
chl

ああ...今、私は質問を理解しました。まあ、それから彼はちょうど使用するcurvepoints、3つのグラフを重ね書きすることができます;)
nico
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.