2014-10-03 14 views
1

所以,我試圖繪製一個雙變量法線集中在12.5和7.5,但它總是偏離中心。真的,我試圖從雙變量分佈中抽取樣本,並快速確定它的工作原理。另外,當我將dmvnorm中的mu切換到50時,它將工作。我知道這不是最好的代碼/圖形,但它的格式是爲什麼要弄清楚發生了什麼。我不知道這個錯誤是在抽樣還是在圖表中。這裏發生了什麼?R bivariate正常dmvnorm圖

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]))) 

回答

1

一些評論:

  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) 
+0

真棒!謝謝。這是一個相當新秀的錯誤。我甚至沒有想過要看循環。對於情節,第三個變量是顏色。所以,它接近於相同的圖像。 – WTB 2014-10-03 17:23:21