全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
4847 3
2014-08-05
x<-mtcars$mpg
h<-hist(x,breaks=12,col="red",xlab="Miles Per Gallon",main="Histogram with normal curve and box")
xfit<-seq(min(x),max(x),length=40)
yfit<-dnorm(xfit,mean=mean(x),sd=sd(x))
yfit<-yfit*diff(h$mids[1:2])*length(x)
lines(xfit,yfit,col="blue",lwd=2)

box()

  yfit<-yfit*diff(h$mids[1:2])*length(x) 这一句不是太懂,为什么画正态曲线是这样画的,是什么公式么?

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2014-8-9 11:58:25
diff(h$mids[1:2])是组距
hist()默认画的是频数图,即纵轴为频数
而density只是密度,密度约为频率/组距 ,所以讲密度图像画到频数图中要进行伸缩变化,频数=频率/组距*组距*样本总数=密度*组距*样本总数,即yfit<-yfit*diff(h$mids[1:2])*length(x)

若果在hist中添加freq=FALSE即可画频率/组距图,直接对应到密度图
给个简单例子吧

x=rnorm(1000)
h1=hist(x,breaks=20)   #频数图
f1=function(x){dnorm(x)*diff(h1$mids[1:2])*1000}   #频数=频率/组距*组距*总数~密度*组距*总数
curve(f1,from=min(x),to=max(x),add=TRUE)


h2=hist(x,breaks=20,freq=FALSE)    #频率/组距图:频率/组距可视为密度,面积和为1
f2=function(x){dnorm(x)}
curve(f2,from=min(x),to=max(x),add=TRUE)
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2014-8-9 12:00:14
不好意思,前面不知道为啥,排版很乱了:

diff(hmids[1:2])是组距hist()默认画的是频数图,
即纵轴为频数而density只是密度,密度约为频率/组距,
所以将密度图像画到频数图中要进行伸缩变化,
频数=频率/组距∗组距∗样本总数=密度∗组距∗样本总数,
即yfit<−yfit∗diff(hmids[1:2])*length(x)

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2017-10-9 20:42:17
huyiustc 发表于 2014-8-9 12:00
不好意思,前面不知道为啥,排版很乱了:

diff(hmids[1:2])是组距hist()默认画的是频数图,
你好 ,我大致明白了,但是,为什么要用diff(h¥mids[1:2])来确定组距呢?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群