首先,我建议您阅读本·博尔克 (Ben Bolker) 的一本出色的书,名为《R 中的生态模型和数据》。为生态学家写的,我认为这是关于实用数据分析的最佳书籍之一,无论背景如何,我是一名工程师,并且经常使用它。我敢肯定还有其他数理统计书,但是这本书是迄今为止我读过的最实用的书。他还有一个包BBMLE ,您可能想查看它。这本书不同于其他任何书,涉及最大似然估计、轮廓似然和置信区间估计等等。
回到你的问题,你需要写一个你试图拟合数据的函数的对数似然。显然,您假设误差在模拟中呈正态分布,因此对数似然为:
Log Likelihood(Lambda,sd)=−n2log(sd)−n2log(2π)−(y−xLambda)22sd
您需要使用优化例程来最大化上述方程,例如optimin R。使用Hessian优化中的矩阵来评估估计的对数似然函数的不确定性,即函数在最佳点处的曲率有多陡或多平。如果函数很陡,这意味着在最佳点处的不确定性较小,则参数估计的置信带会更紧,另一方面,如果函数平坦,则置信区间会更宽。Hessian,Fisher 信息矩阵将帮助您计算标准误差和置信区间。
以下是您在 R 中的操作方式:
set.seed(8345)
Lambda = 1/2.42
x = rbeta(1e4, shape1=2,shape2=2)
y = x^Lambda + rnorm(1e4,mean = 0, sd=.1)
plot(x,y)
## Write Log Likelihood function
log.lik <- function(theta,y,x){
Lam <- theta[1]
sigma2 <- theta[2]
# sample size
n <- length(y)
#error
e<-y-(x^Lam)
#log likelihood
logl<- -.5*n*log(2*pi)-.5*n*log(sigma2)-((t(e)%*%e)/(2*sigma2))
return(-logl) # R optim does minimize so to maximize multiply by -1
}
## Estimate Paramters thru maximum likelihood
max.lik <- optim(c(1,1), fn=log.lik, method = "L-BFGS-B", lower = c(0.00001,0.00001), hessian = T,y=y,x=x)
# Lambda
Lam <- max.lik$par[1]
#0.4107119
#Fisher Information MAtrix
fisher_info<-solve(max.lik$hessian)
prop_sigma<-sqrt(diag(fisher_info))
## Estimate 95% Confidence Interval
upper<-max.lik$par+1.96*prop_sigma
lower<-max.lik$par-1.96*prop_sigma
interval<-data.frame(Parameter = c("Lambda","sd"),value=max.lik$par, lower=lower, upper=upper)
interval