这是mydata的一部分:
原始数据非常大,所以我上传了一部分20行。
x <- [7.6,2.2,1.1,4.7,8.6,7.5,7.5,29.9,5.0,3.0,2.4,1.5,14.9,3.9,3.7,3.2,5.0,1.7,2.9,2.3]
这是功能描述
y=A*x^-(u)
y=B*exp^(-βx)
现在,我想使用MLE(最大似然法)来获得幂律的u
,以及β
的指数分布。
#set likelihood function of power law
pl <- function(u){-n*log(u-1)-n*(u-1)*log(min(x))+u*sum(log(x))}
#set likelihood function of exponential distribution
ex <- function(β){-n*log(β)+β*sum(x)}
使用mle2()获取参数:
#get the parameter u of power law
s1 <- mle2(pl,start = list(u=2),data = list(x))
summary(s1)
#get the parameter lamda of exponential distribution
s2 <- mle2(ex,start = list(β=2),data = list(x))
summary(s2)
现在有两个问题:
如何确定哪一个最适合模型
使用confint()可获得95%CI,如何获得两种模型的Rsquared和AIC(Akaike weigths)?
我在Windows 7中使用R.3.2.2。
答案 0 :(得分:0)
就像你期望的那样。您尚未指定数据的条件分布,因此我将假设为Normality。 (鉴于此,你也可以使用nls()
- 最小二乘是正态,同方位响应的最大似然估计),尽管mle2
提供了更多的游戏余地与优化者等。)
我将使用公式界面,如果您的模型不太复杂,这很方便。
mle2(y~dnorm(mean=A*x^(-mu),sd=exp(logsd),
start=list(A=...,mu=...,logsd=...),
## no need for list() if mydata is already data.frame
data=mydata)
mle2(y~dnorm(mean=B*exp(-beta*x),sd=exp(logsd),
start=list(B=...,beta=...,logsd=...),
data=mydata)
... start
中的元素是合理的起始值。鉴于上述数据,这些方法应该在数据的一个子集上合理地工作。但是,它们在1000万次观测中可能表现不佳。我会考虑使用
glm(y~x,family=gaussian(link="log"),data=mydata)
以拟合指数曲线和
glm(y~log(x),family=gaussian(link="log"),data=mydata)
以符合幂律曲线。