我在下面画了一个直方图,它是多个向量的平均密度。每个向量的频率分布由直方图上覆盖的灰色线表示。与其绘制每条线,是否有一种方法来绘制向量之间频率分布的平均值以上和以下的标准差?即灰色线的标准差。

我试着得到每个向量的密度,并计算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()发布于 2015-06-07 20:56:55
我想下面的代码会有效的。简单地说,我决定每个向量的密度,接近某个已知的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)发布于 2015-06-07 20:56:45
我不完全确定你想要什么,但是你可以保存密度的值。试一试
x <- rnorm(100) dens <- density(x) dens$y
https://stackoverflow.com/questions/30691051
复制相似问题