全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
2611 4
2015-04-26
以下的code是用牛顿算法来找使得目标函数最大化的参数b ,原方程为y[i]=a+b*x[i]+e[i]  假设a=1  ,  e~N(0,1)iid
即通过极大似然估计的方法估计参数b
但是若a也是未知数,能否用该方法同时估计a,b  使得目标函数最大化   


##目标函数
f<-function(x,y,b)
{
sum(-0.5*log(2*pi)-(y-1-b*x)^2/2)
}
##一阶导数
df<-function(x,y,b)
{
sum((y-1-b*x)*x)
}
##二阶导数
d2f<-function(x,y,b)
{
sum(-x^2)
}
##循环找到最好的b
n=10
b=rep(NA,n)
x=matrix(c(1,2,3,4,5),5,1)
y=matrix(c(3,5,7,9,11),5,1)
b[1]=5   #赋给b的初始值
for(i in 1:n)
{
b[i+1]<-b[i]-(d2f(x,y,b[i]))^(-1)*df(x,y,b[i])
}
## 画图 Check the convergence
par(mfrow = c(4, 1))
plot(b,ylim=c(0,5),type = "l", col = "red")

p=f(x,y,b[1])
for(i in 2:n)
p=c(p,f(x,y,b[i]))
plot(p,type="l", col = "red")

q=df(x,y,b[1])
for(i in 2:n)
q=c(q,df(x,y,b[i]))
plot(q,type = "l", col = "red")            

plot(rep(d2f(x,y,b),n), type = "l", col = "red")




二维码

扫码加我 拉你入群

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

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

全部回复
2015-4-26 15:43:42
基础包里的nlm()就是实现这个功能的
二维码

扫码加我 拉你入群

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

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

2015-4-26 17:01:07
zhyalo 发表于 2015-4-26 15:05
以下的code是用牛顿算法来找使得目标函数最大化的参数b ,原方程为y=a+b*x+e  假设a=1  ,  e~N(0,1)iid
...
看看。。。
二维码

扫码加我 拉你入群

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

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

2015-4-26 22:58:43
katymeala 发表于 2015-4-26 15:43
基础包里的nlm()就是实现这个功能的
是的,但是我想弄清楚是怎么实现的
二维码

扫码加我 拉你入群

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

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

2015-4-27 15:50:15
帮你找到了
https://bbs.pinggu.org/forum.php?mod=viewthread&tid=2927102&page=1#pid23883587
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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