【问题标题】:R bivariate normal dmvnorm graphR二元正态dmvnorm图
【发布时间】:2014-10-03 13:27:41
【问题描述】:

所以,我试图绘制一个以 12.5 和 7.5 为中心的双变量法线,但它总是偏离中心。真的,我正在尝试从双变量分布中采样,并快速绘制它以确保它有效。此外,当我将 dmvnorm 中的 mu 切换到 50 时,它会起作用。我知道这不是最好的代码/图表,但它的格式是为什么要试图弄清楚发生了什么。我不知道错误是在采样中还是在图形中。这是怎么回事?

library(mixtools)

x3<-seq(10,15,by=.05)
x4<-seq(5,10,by=.05)
y<-matrix(NA,nrow=length(x3)*length(x4),ncol=3)
dim(y)
counter<-1
for(i in seq(1,length(x3))){
  for(j in seq(1,length(x4))){
    #Change 12.5 and 7.5 to 50's will put it in the center
    y[counter,]<-c(dmvnorm(y=c(i,j),mu=c(12.5,7.5),sigma=matrix(c(1000,0,0,1000),nrow=2))*1000,x3[i],x4[j])
    counter<-counter+1
  }
}
plot(y[,2],y[,3],pch=16,col=rgb(0,y[,1],0,maxColorValue=(dmvnorm(y=c(12.5,7.5),mu=c(12.5,7.5),sigma=matrix(c(1000,0,0,1000),nrow=2))*1000)),asp=1,xlim=c(min(y[,2]),max(y[,2])),ylim=c(min(y[,3]),max(y[,3])))

【问题讨论】:

    标签: r


    【解决方案1】:

    一些cmets:

    1. dmvnorm(y=c(i,j)) 错误,您需要评估c(x3[i], x4[j]) 处的密度。
    2. 我没有仔细阅读你的plot() 声明,但plot() 最多只需要两个变量(你有3 个),你需要使用image()levelplot() 之类的变量。

    这就是您要查找的内容:

    library(lattice)                                                                    
    d <- expand.grid("x3" = seq(10, 15, .05), "x4" = seq(5, 10, .05))                   
    d$dens <- dmvnorm(as.matrix(d), mu = c(12.5, 7.5), sigma = diag(1000, 2))           
    levelplot(dens ~ x3 * x4, data = d)
    

    【讨论】:

    • 太棒了!谢谢。这是一个相当菜鸟的错误。我什至没有想过要看循环。对于绘图,第三个变量是颜色。因此,它接近于相同的图像。
    猜你喜欢
    • 2018-04-22
    • 1970-01-01
    • 1970-01-01
    • 2018-04-17
    • 2015-09-05
    • 1970-01-01
    • 1970-01-01
    • 2014-02-03
    • 1970-01-01
    相关资源
    最近更新 更多