楼主: lvdan1990
4765 4

[问答] 用R拟合一个密度函数 [推广有奖]

  • 0关注
  • 0粉丝

博士生

20%

还不是VIP/贵宾

-

威望
0
论坛币
2039 个
通用积分
1.3385
学术水平
1 点
热心指数
1 点
信用等级
0 点
经验
2799 点
帖子
173
精华
0
在线时间
218 小时
注册时间
2010-1-15
最后登录
2017-5-5

10论坛币
未命名.jpg
怎么样在一个图中画出y 的直方图和拟合的密度函数呢??
求指教~~

最佳答案

kk22boy 查看完整内容

参考 http://cos.name/2009/07/maximum-likelihood-estimation-in-r/ 3.1. 在R中定义对数似然函数: > #定义log-likelihood函数 > LL geyser.res #初始值为p=0.5,mu1=50,sigma1=10,mu2=80,sigma2=10 > #LL是被最小化的函数。 > #data是拟合用的数据 > #lower和upper分别指定参数的上界和下界。 3.3. 估计结果 > #查看拟合的参数 > geyser.res$par [1] 0.3075937 54.2026518 4.9520026 80.3603085 7.5076330 > #拟合 ...
关键词:密度函数 SOSO 怎么样 sos 直方图 直方图

回帖推荐

kk22boy 发表于2楼  查看完整内容

参考 http://cos.name/2009/07/maximum-likelihood-estimation-in-r/ 3.1. 在R中定义对数似然函数: > #定义log-likelihood函数 > LL geyser.res #初始值为p=0.5,mu1=50,sigma1=10,mu2=80,sigma2=10 > #LL是被最小化的函数。 > #data是拟合用的数据 > #lower和upper分别指定参数的上界和下界。 3.3. 估计结果 > #查看拟合的参数 > geyser.res$par [1] 0.3075937 54.2026518 4.9520026 80.3603085 7.5076330 > #拟合 ...
沙发
kk22boy 发表于 2012-5-14 16:09:34 |只看作者 |坛友微信交流群
参考 http://cos.name/2009/07/maximum-likelihood-estimation-in-r/
3.1. 在R中定义对数似然函数:

> #定义log-likelihood函数
> LL<-function(params,data)
+ {#参数"params"是一个向量,依次包含了五个参数:p,mu1,sigma1,
+ #mu2,sigma2.
+ #参数"data",是观测数据。
+ t1<-dnorm(data,params[2],params[3])
+ t2<-dnorm(data,params[4],params[5])
+ #这里的dnorm()函数是用来生成正态密度函数的。
+ f<-params[1]*t1+(1-params[1])*t2
+ #混合密度函数
+ ll<-sum(log(f))
+ #log-likelihood函数
+ return(-ll)
+ #nlminb()函数是最小化一个函数的值,但我们是要最大化log-
+ #likeilhood函数,所以需要在“ll”前加个“-”号。
+ }
3.2. 参数估计

> #用hist函数找出初始值
> hist(waiting,freq=F)
> lines(density(waiting))
> #拟合函数####optim####
> geyser.res<-nlminb(c(0.5,50,10,80,10),LL,data=waiting,
+ lower=c(0.0001,-Inf,0.0001,-Inf,-Inf,0.0001),
+ upper=c(0.9999,Inf,Inf,Inf,Inf))
> #初始值为p=0.5,mu1=50,sigma1=10,mu2=80,sigma2=10
> #LL是被最小化的函数。
> #data是拟合用的数据
> #lower和upper分别指定参数的上界和下界。
3.3. 估计结果

> #查看拟合的参数
> geyser.res$par
[1] 0.3075937 54.2026518 4.9520026 80.3603085 7.5076330
> #拟合的效果
> X<-seq(40,120,length=100)
> #读出估计的参数
> p<-geyser.res$par[1]
> mu1<-geyser.res$par[2]
> sig1<-geyser.res$par[3]
> mu2<-geyser.res$par[4]
> sig2<-geyser.res$par[5]
> #将估计的参数函数代入原密度函数。
> f<-p*dnorm(X,mu1,sig1)+(1-p)*dnorm(X,mu2,sig2)
> #作出数据的直方图
> hist(waiting,probability=T,col=0,ylab="Density",
+ ylim=c(0,0.04),xlab="Eruption waiting times")
> #画出拟合的曲线
> lines(X,f)
已有 3 人评分学术水平 热心指数 信用等级 收起 理由
famousid + 1 + 1 + 1 热心帮助其他会员
qoiqpwqr + 1 热心帮助其他会员
lvdan1990 + 1 + 1 + 1 热心帮助其他会员

总评分: 学术水平 + 2  热心指数 + 3  信用等级 + 2   查看全部评分

如果该贴对您有些许帮助,希望你能回复一下或者评一下热心指数!谢谢!

使用道具

藤椅
lvdan1990 发表于 2012-5-14 22:26:59 |只看作者 |坛友微信交流群
kk22boy 发表于 2012-5-14 22:15
参考 http://cos.name/2009/07/maximum-likelihood-estimation-in-r/
3.1. 在R中定义对数似然函数:
未命名.jpg
可是我这里的这个y的分布是这样的,可以这么做吗?

使用道具

板凳
kk22boy 发表于 2012-5-14 22:41:44 |只看作者 |坛友微信交流群
原理就是这样的,
你也可以把部分数据放上来看看
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
famousid + 1 + 1 + 1 热心帮助其他会员

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

如果该贴对您有些许帮助,希望你能回复一下或者评一下热心指数!谢谢!

使用道具

报纸
lvdan1990 发表于 2012-5-21 16:43:30 |只看作者 |坛友微信交流群
kk22boy 发表于 2012-5-14 16:09
参考 http://cos.name/2009/07/maximum-likelihood-estimation-in-r/
3.1. 在R中定义对数似然函数:
请问下,参数都估计出来后,如何根据一组数据估计后验的p值呢?

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-5-15 01:27