|
在频率直方图上添加拟合的曲线-以对数正态分布为例
以下为R代码
##### 第一個方案
##### 擬合正態分布
x <- log(rlnorm(1000))*500 ### 提取數據框
h <- hist(x, ylim = c(0, 300)) ## 繪制頻率直方圖
xfit <- seq(min(x),max(x),length=500) ### 取要計算的x值
yfit <- dnorm(xfit, mean=mean(x), sd=sd(x)) ### 假設是正態分布, 則對應的概率密度為 yfit
yfit <- yfit*diff(h$mids[1:2])*length(x) ### 求x向量內每一個值與前面數值的差, 以確定在y方向上, 應該放大多少倍
lines(xfit, yfit, col="blue", lwd=2) ### 繪制曲線
##### 第二個方案
##### 擬合對數正態分布
x <- rlnorm(1000)*1000 ### 提取第一列
h <- hist(x, ylim = c(0, 1000), breaks = 25) ## 繪制頻率直方圖
xfit <- seq(min(x),max(x),length=500) ### 取要繪圖的x值取值范圍
yfit <- dlnorm(xfit, meanlog=log(mean(x)), sdlog=sd(log(x))) ### 假設是對數正態分布, 則對應的概率密度為 yfit
yfit <- yfit*diff(h$mids[1:2])*length(x) ### 求x向量內每一個值與前面數值的差, 以確定在y方向上, 應該放大多少倍
lines(xfit, yfit, col="blue", lwd=2) ### 繪制曲線
##### 第三個方案
##### 基于核密度估计
x <- rlnorm(1000)*1000 ### 提取第一列
h <- hist(x, breaks = 25) ## 繪制頻率直方圖
xfit <- seq(min(x),max(x),length=500) ### 取要繪圖的x值取值范圍
yfit <- density(x, n = length(xfit))$y ### 假設是對數正態分布, 則對應的概率密度為 yfit
yfit <- yfit*diff(h$mids[1:2])*length(xfit) ### 求x向量內每一個值與前面數值的差, 以確定在y方向上, 應該放大多少倍
lines(xfit, yfit, col="blue", lwd=2) ### 繪制曲線
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-12-26 04:02
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社