当前位置:天才代写 > tutorial > 其他教程 > 二项漫衍的对数似然面:算法与R语言实现

二项漫衍的对数似然面:算法与R语言实现

2017-12-04 08:00 星期一 所属: 其他教程 浏览:1433

对数似然面是极大似然预计的功效之一,这里先容在R语言中如何绘制对数似然面(Log Likelihood Surface),这里用到的对数似然函数是二项漫衍的,对付泊松漫衍,正态漫衍,负二项漫衍等,只需对对数似然函数举办适当修改即可。



绘制二项漫衍的对数似然面举例:
主要进程
(1) 写出对数似然函数
(2) 用nlm求对数似然函数的预计值
(3) 若绘制似然曲线,则牢靠一个参数值,并变革别的一个参数,

计较Loglikelihood,用lines添加曲线。


(4) 若绘制趋势面,则先要计较参数组合矩阵,并求各栅格处的

LogLikelihood,用persp, image, contour等函数即可。也


可以用lattice函数包的wireframe()


以下的例子给出全部的R代码和相应说明。

该例子引自:
http://www.unc.edu/courses/2010fall/ecol/563/001/docs/lectures/lecture10.htm#Rcode


## 实例: 假设有以下数据, 记录每个枝条上蚜虫的数量,该数据出自


##Krebs, Charles. 1999. Ecological Methodology.


## Menlo Park, CA: Addison-Wesley. 130页


###########################################################


#######################原始数据############################


###########################################################


### 数据导入


num.stems <- c(6,8,9,6,6,2,5,3,1,4)


aphids_count <- c(0,1,2,3,4,5,6,7,8,9)


aphids <- data.frame(aphids_count, num.stems)


### Raw Data,整理出二项漫衍拟合所需要的名目


aphids_raw <- rep(aphids_count, num.stems)



###########################################################


####################写出对数似然函数#######################


###########################################################



## 二项漫衍的对数似然函数,用来绘制对数似然曲线和趋势面


nnominb.loglik <- function(p) {


res <- sum(log(dnbinom(aphids_raw, mu = p[1], size = p[2])))


return(res)


}


## 二项漫衍的负对数似然函数,nlm()函数只能求最小值,因此极大


## 似然值时必需用到此函数


neg.nnominb.loglik <- function(p) {


res <- sum(log(dnbinom(aphids_raw, mu = p[1], size = p[2])))


return(-res)


}


###########################################################


###################预计对数似然函数极值####################


###########################################################


#操作nlm预计极值


out.NB <- nlm(neg.nnominb.loglik, c(4,4))


# estimate 是对两个参数的预计,即对neg.nnominb.loglik函数参数p的预计


out.NB


###########################################################


###################图 1 ##绘制似然曲线#####################


###########################################################



### x 序列


x <- seq(0.1, 10, by = 0.1)


### 计较y


y_max <- sapply(x, function(x) nnominb.loglik(p = c(out.NB$estimate[1], x)))


plot(y_max ~ x, type = “l”, ylab = “Log Likelihood”, xlab = “Size”)


### 当mu = 2时


y_2 <- sapply(x, function(x) nnominb.loglik(p = c(2, x)))


lines(y_2 ~ x, col = 2)


### 当mu = 5时


y_5 <- sapply(x, function(x) nnominb.loglik(p = c(5, x)))


lines(y_5 ~ x, col = 3)


### 添加图例


 

    关键字:

天才代写-代写联系方式