在R中的非标准分布曲线下着色

时间:2012-09-16 16:01:14

标签: r distribution

X~N(mu,3 * sigma ^ 2)

Y~N(mu,sigma ^ 2)

我试图以图形方式证明P [| X-mu | < sigma]< P [| Y-mu | < sigma](即蓝色曲线下面积小于0和sigma之间红色曲线下面积)

我创建了| X-mu |的pdf和| Y-mu |使用以下代码,我让mu = 0和sigma = 1:

x<-seq(-10,10,length=10000000)

y1<-rnorm(x,mean=0,sd=sqrt(3))
y2<-rnorm(x,mean=0,sd=1)

absy1<-abs(y1-mean(y1))
absy2<-abs(y2-mean(y2))

plot(density(absy2), type="l", axes=FALSE, xlab = "", ylab = "", main="", col="red")
lines(density(absy1), col="blue")

abline(v=1,lty=2,col="black")

text(3.5,0.18,expression(abs(N(mu,3 * sigma^2)-mu)), col="blue")
text(1.5,0.48,expression(abs(N(mu,sigma^2)-mu)), col="red")
axis(1,at=0,labels=0, line=-1)
axis(1,at=1,labels=expression(sigma), line=-1)

以下是我正在尝试使用的上述代码生成的图像的链接:

https://lh3.googleusercontent.com/-wYtqZpKfkQs/UFXzvAdB1WI/AAAAAAAAACU/W9bXfk-ghew/s371-p-k/HW2problem2graph-iv.jpg

我想在0到sigma之间的每条曲线下阴影区域。

为了遮蔽其他正态分布曲线,我一直在使用类似下面这一行的东西,但我不能用它来解决这个问题(或者我不知道如何)。

polygon(c(0,xred,10),c(0,yred,0),col="mistyrose", border=NA)

非常感谢您的帮助!此外,如果有更好的方法绘制曲线,请指教! (这是我第二天学习R,所以请尽量清楚!)谢谢。

解决方案 - 感谢@DWin

x<-seq(-10,10,length=10000000)

y1<-rnorm(x,mean=0,sd=sqrt(3))
y2<-rnorm(x,mean=0,sd=1)

absy1<-abs(y1-mean(y1))
absy2<-abs(y2-mean(y2))

plot(den2 <-density(absy2), type="l", axes=FALSE, xlab = "", ylab = "", main="", col="red")
with(den2, polygon(x=c(0, x[x < 1], rev(x[x<1]), 0), y=c(0, 0*x[x < 1], rev(y[x<1]), 0), col="mistyrose", border=NA))

lines(den1 <-density(absy1), col="blue")
with(den1, polygon(x=c(0, x[x < 1], rev(x[x<1]), 0), y=c(0, 0*x[x < 1], rev(y[x<1]), 0), col="aliceblue", border=NA))

abline(v=1,lty=2,col="black")

text(3.5,0.18,expression(abs(N(mu,3 * sigma^2)-mu)), col="blue")
text(1.75,0.48,expression(abs(N(mu,sigma^2)-mu)), col="red")
axis(1,at=0,labels=0, line=-1)
axis(1,at=1,labels=expression(sigma), line=-1)

1 个答案:

答案 0 :(得分:1)

密度函数产生绘制图形的副作用,但它也返回一个名为“x”和“y”组件的列表,因此您需要将其保存为命名对象(我将其命名为“den1”)并使用这些组件。由于密度图中有一些“slop”,您可能需要查看'logspline'包,ISTR具有接受约束的密度函数。

所以这样做是作为你的初始策划策略::

plot(den2 <-density(absy2), type="l", axes=FALSE, xlab = "", ylab = "", main="", col="red")
lines(den1 <-density(absy1), col="blue")

然后添加彩色多边形(在这种情况下'sigma'为1):

with( den1, polygon(x=c(0, x[x < 1],   rev(x[x<1]), 0), 
                    y=c(0, 0*x[x < 1], rev(y[x<1]), 0), col="red") )

分解成4个组件,你用一个起点[0,0]概述区域,然后沿着x轴绘制到[sigma,0],然后绘制一条垂直线到[sigma,density(sigma)],然后沿着密度曲线向后移动并向后关闭[0,0]。

enter image description here