张金龙的博客分享 http://blog.sciencenet.cn/u/zjlcas 物种适应性、分布与进化

博文

在频率直方图上添加拟合的曲线-以对数正态分布为例

已有 12647 次阅读 2014-9-25 23:03 |系统分类:科研笔记|关键词:学者

在频率直方图上添加拟合的曲线-以对数正态分布为例


以下为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) ### 繪制曲線




https://m.sciencenet.cn/blog-255662-830854.html

上一篇:PyEphem基本功能介绍
下一篇:基于Rcpp建立一个整合C++函数的R程序包(Rcpp编程)

2 杨正瓴 汪小龙

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-4-24 22:05

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部