首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R直方图.多密度线的标准偏差

R直方图.多密度线的标准偏差
EN

Stack Overflow用户
提问于 2015-06-07 07:12:40
回答 2查看 1.4K关注 0票数 1

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

我试着得到每个向量的密度,并计算y变量的标准差,但这条线似乎与平均值不一致。

代码语言:javascript
复制
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()
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-07 20:56:55

我想下面的代码会有效的。简单地说,我决定每个向量的密度,接近某个已知的x值向量,把它塞进一个矩阵中,然后计算汇总统计量和图。这就是你想做的吗?

代码语言:javascript
复制
#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)
票数 1
EN

Stack Overflow用户

发布于 2015-06-07 20:56:45

我不完全确定你想要什么,但是你可以保存密度的值。试一试

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30691051

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档