在r

时间:2019-06-16 15:23:00

标签: r plot statistics distribution

我正在尝试使用联合分布和边际分布绘制双变量正态的条件分布。

给定Y时X的条件分布为X | Y = y〜N(rho * y,1-rho ^ 2),给定X的Y为Y | X = x〜N(rho * x,1-rho ^ 2) 2)

这是我使用模拟在R中实现此目标的方法(有关更多信息see here,请在联合和边距中获取rho = 1/2的特定值:

plot.new()

num<-exp(-2*((x^2)-(x*y)+(y^2))/3)
den<-(exp((-x^2)/2)*sqrt(3))/sqrt(2*pi)

quot<-num/den

fun <- function(x, y){quot} 

xs <- seq(-10, 10, by=1)
ys <- seq(-10, 10, by=1)

res <- mapply(fun, list(xs), list(ys))

cols <- c("black", "cornflowerblue", "orange")
matplot(xs, res, col=cols, type="l", lty=1, lwd=2, xlab="x", ylab="result")
legend("bottomright", legend=ys, title="value of y", lwd=2, col=cols)

运行代码时出现消息错误

Error in matplot(xs, res, col = cols, type = "l", lty = 1, lwd = 2, xlab = "x", : 'x' and 'y' must have same number of rows

为什么说x和y必须具有相同的行数?我可以在代码的哪一部分解决此问题?

我不明白,请帮助我。

1 个答案:

答案 0 :(得分:0)

我已经解决了问题:)

考虑以下

 fun <- function(x, y){(exp(-2*((x^2)-(x*y)+ 
   (y^2))/3))/((exp((-x^2)/2)*sqrt(3))/sqrt(2*pi))}

    xs <- seq(-5, 5, by=.01)
    ys <- seq(-5, 5, by=.01)

    res <- mapply(fun, list(xs), list(ys))


    matplot(xs, res, col="purple", type="l", lwd=3, xlab="x", ylab="pdf")

显示

enter image description here