具有阴影拒绝区域的统计分布图

时间:2014-05-26 12:15:08

标签: r plot distribution

我在网上找到了这个R代码:

stdDev <- 0.75;
x <- seq(-5,5,by=0.01)
y <- dnorm(x,sd=stdDev)
right <- qnorm(0.95,sd=stdDev)
plot(x,y,type="l",xaxt="n",ylab="p",
     xlab=expression(paste('Assumed Distribution of ',bar(x))),
     axes=FALSE,ylim=c(0,max(y)*1.05),xlim=c(min(x),max(x)),
     frame.plot=FALSE)
axis(1,at=c(-5,right,0,5),
     pos = c(0,0),
     labels=c(expression(' '),expression(bar(x)[cr]),expression(mu[0]),expression('')))
axis(2)
xReject <- seq(right,5,by=0.01)
yReject <- dnorm(xReject,sd=stdDev)
polygon(c(xReject,xReject[length(xReject)],xReject[1]),
        c(yReject,0, 0), col='red')

它正在做我需要的,它正在绘制正态分布,并根据某个数字(0.95)对正确的拒绝区域进行着色。我想问的是:

  1. 如何更改此代码以遮蔽双面拒绝区域?
  2. 如何更改左侧单侧区域?
  3. 并且假设我想要一个卡方或F分布,是否足以改变dnorm&amp;相应的qnorm命令?
  4. 另一个问题:在此图中,图表本身高于y轴。如何修复轴与图的高度匹配?
  5. 谢谢!

2 个答案:

答案 0 :(得分:3)

  1. 您可以从覆盖曲线下整个区域的多边形开始,然后移除未被拒绝的部分:

    ## Calculate the 5th percentile
    left <- qnorm(0.05,sd=stdDev)
    
    ## x and y for the whole area
    xReject <- c(seq(-5,5,by=0.01))
    yReject <- dnorm(xReject,sd=stdDev)
    
    ## set y = 0 for the area that is not rejected  
    yReject[xReject > left & xReject < right] <- 0
    
    ## Plot the red areas
    polygon(c(xReject,xReject[length(xReject)],xReject[1]),
            c(yReject,0, 0), col='red')
    
  2. 和以前一样,但未被拒绝的区域设置为零

    yReject[xReject > left] <- 0
    
  3. 几乎。例如,对于卡方分布,您必须给出df(自由度而不是sd)。而xlim也必须改变。但除此之外,代码将是相同的。

  4. 线axis(2)绘制y轴。你可以提供一些额外的参数来按照你想要的方式。您可以尝试例如:

    s <- seq(0,0.55,0.05)
    axis(2, at = s, labels = s)
    
  5. 希望它有所帮助,

    亚历

答案 1 :(得分:1)

进行遮挡右侧拒绝区域的polygon个调用并重复这些行,替换左侧区域的坐标。

我认为这样做会

left <- qnorm(0.05,sd=stdDev)
xLeject <- seq(left,-5,by=-0.01)
yLeject <- dnorm(xLeject,sd=stdDev)
polygon(c(xLeject,xLeject[length(xLeject)],xLeject[1]),
        c(yLeject,0, 0), col='red')

关于图表范围,请参阅plot(..., ylim=(lower,upper))