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)

相关图

但两个图都在一个图上。

3)最后,我需要在此基础上绘制一个生成的linar回归模型:

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

但错误范围...类似于QQ绘图:

QQ图

但是如果可能的话,会出现拟合错误。

所以问题是:

如何在一张图表上实现所有这些?

Answers:


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)

可以通过添加模型拟合指数(如Cook的距离)和颜色阴影效果来对其进行更多自定义。


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)缩放,它显示了95%的成对置信区。不过,在散点图中使用时,我并不喜欢这样做。但是请参见Murdoch&Chow,大型相关矩阵的图形显示,Am Stat(1996)50:178,或Friendly,Corrgrams:相关矩阵的探索性显示,Am Stat(2002)56:316。
chl

2

对于点1,只需使用cex绘图上的参数来设置点大小。

例如

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

要在一个绘图中包含多个图形,请使用par(mfrow=c(numrows, numcols))具有均匀间隔的布局或layout制作更复杂的布局。


1
有关的提示+1 cex,但我认为OP希望所有内容都位于同一绘图区域,而不是单独的区域。
chl

啊...现在我明白了这个问题。好吧,那么他就可以使用curvepoints叠加三个图;)
nico
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.