【问题标题】:Shading under non-standard distribution curves in RR中非标准分布曲线下的阴影
【发布时间】:2012-09-16 16:01:14
【问题描述】:

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

Y ~ N(mu,sigma^2)

我试图以图形方式证明 P[ |X-mu|

我已经创建了 |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)

这是我尝试使用的上述代码生成的图像的链接:

我想在 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)

【问题讨论】:

标签: r distribution


【解决方案1】:

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

因此,请将此作为您的初始绘图策略::

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] 处关闭。

【讨论】:

  • 感谢@DWin!像魅力一样工作:-)
  • 要不是因为菜,我早就把你打败了! :) +1
  • @RomanLuštrik:我相信这是真的。这实际上是 rhelp 上的常见问题解答。
猜你喜欢
  • 2016-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-02
  • 1970-01-01
  • 1970-01-01
  • 2018-06-21
相关资源
最近更新 更多