R直方图 - 多条密度线的标准差
R histogram - standard deviation of multiple density lines
我在下面绘制了一个直方图,它是多个向量的平均密度。每个向量的频率分布由叠加在直方图上的灰线表示。不是绘制这些线中的每一条,有没有办法绘制向量频率分布平均值上方和下方的标准偏差?即灰线的标准差。
我尝试获取每个向量的密度并计算 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()
我不完全确定你想要什么,但你可以保存密度值。尝试
x <- rnorm(100)
dens <- density(x)
dens$y
我认为下面的代码可以工作。简而言之,我确定每个向量的密度,近似于某个已知的 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)
我在下面绘制了一个直方图,它是多个向量的平均密度。每个向量的频率分布由叠加在直方图上的灰线表示。不是绘制这些线中的每一条,有没有办法绘制向量频率分布平均值上方和下方的标准偏差?即灰线的标准差。
我尝试获取每个向量的密度并计算 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()
我不完全确定你想要什么,但你可以保存密度值。尝试
x <- rnorm(100)
dens <- density(x)
dens$y
我认为下面的代码可以工作。简而言之,我确定每个向量的密度,近似于某个已知的 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)