我在网上找到了这个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)对正确的拒绝区域进行着色。我想问的是:
谢谢!
答案 0 :(得分:3)
您可以从覆盖曲线下整个区域的多边形开始,然后移除未被拒绝的部分:
## 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')
和以前一样,但未被拒绝的区域设置为零
yReject[xReject > left] <- 0
几乎。例如,对于卡方分布,您必须给出df(自由度而不是sd)。而xlim
也必须改变。但除此之外,代码将是相同的。
线axis(2)
绘制y轴。你可以提供一些额外的参数来按照你想要的方式。您可以尝试例如:
s <- seq(0,0.55,0.05)
axis(2, at = s, labels = s)
希望它有所帮助,
亚历
答案 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))