2015-06-07 36 views
1

我繪製了一個直方圖,下面是多個矢量的平均密度。每個矢量的頻率分佈由覆蓋在直方圖上的灰線表示。不是繪製這些線中的每一條,是否有一種方法可以繪製矢量上頻率分佈平均值以上和以下的標準差?也就是灰線的標準偏差。R直方圖 - 多密度線的標準差

standard deviation

我試圖獲得每個矢量的密度並計算在y變量的標準偏差,但是似乎從該行沒有以對應於平均值。

ln <- length(names(data)) 
hist(data_mean, breaks=100, prob=TRUE) 
for(i in 1:ln) { 
    lines(density(data[,i], na.rm = TRUE), col="grey", lwd=1) 
} 
dev.off() 
+1

如果包含在某些樣品[再現的示例](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)這將是有益輸入數據,以便我們可以真正運行您的代碼。 – MrFlick

回答

1

我認爲下面的代碼將工作。簡而言之,我確定每個向量的密度,近似於一些已知的x值向量,將它們全部一起包含在矩陣中,然後計算彙總統計量和圖。這是你想要做的嗎?

#Make up some fake data (each column is a sample) 
mat=matrix(rnorm(5000,2,0.5),ncol=50) 

#Determine density of each column 
dens=apply(mat, 2, density) 

#Interpolate the densities so they all have same x coords 
approxDens=lapply(dens, approx, xout=seq(0.1,3.5,by=0.1)) 

#Create your output matrix, and fill it with values 
approxDens2=matrix(0, ncol=ncol(mat), nrow=length(approxDens[[1]]$y)) 

for(i in 1:length(approxDens)){ 
    approxDens2[,i]=approxDens[[i]]$y} 

#Determine the mean and sd of density values given an x value 
mn = rowMeans(approxDens2) 
stdv = apply(approxDens2,1,sd) 

#pull out those x values you approx-ed things by for plotting 
xx = approxDens[[1]]$x 

#plot it out 
plot(xx, mn, las=1, ylim=c(0,1), type='l', ylab='Density', xlab='X') 
lines(xx, mn+stdv, lty=2);lines(xx, mn-stdv, lty=2) 
+0

謝謝,我改變了xout序列以使線更平滑,但否則它效果很好! – Jon

0

我不完全確定你想要什麼,但你可以保存密度的值。嘗試

x <- rnorm(100) dens <- density(x) dens$y