R 最大似然估计

R 最大似然估计,r,regression,R,Regression,我是R的新用户,如果我的问题很傻,希望你能容忍我。我想用R中的最大似然估计来估计下面的模型 y= a+b*(lnx-α) 其中a、b和α是要估计的参数,X和Y是我的数据集。我尝试使用从web获得的以下代码: library(foreign) maindata <- read.csv("C:/Users/NUNU/Desktop/maindata/output2.csv") h <- subset(maindata, cropid==10) library(likelihood) m

我是R的新用户,如果我的问题很傻,希望你能容忍我。我想用R中的最大似然估计来估计下面的模型

y= a+b*(lnx-α)
其中a、b和α是要估计的参数,X和Y是我的数据集。我尝试使用从web获得的以下代码:

library(foreign)
maindata <- read.csv("C:/Users/NUNU/Desktop/maindata/output2.csv")
h <- subset(maindata, cropid==10)
library(likelihood)
modelfun <- function (a, b, x) { b *(x-a)}
par <- list(a = 0, b = 0)
var<-list(x = "x")
par_lo <- list(a = 0, b = 0)
par_hi <- list(a = 50, b = 50)
var$y <- "y"
var$mean <- "predicted"
var$sd <- 0.815585
var$log <- TRUE
results <- anneal(model = modelfun, par = par, var = var,
            source_data = h, par_lo = par_lo, par_hi = par_hi,
            pdf = dnorm, dep_var = "y", max_iter = 20000)
库(外文)

maindata我不确定您的模型公式是否会产生唯一的解决方案,但一般来说,您可以使用
optim
函数找到MLE

下面是一个使用optim进行线性回归的简单示例:

fn <- function(beta, x, y) {
a = beta[1]
b = beta[2]

    sum( (y - (a + b * log(x)))^2 ) 
}

# generate some data for testing
x = 1:100

# a = 10, b = 3.5
y = 10 + 3.5 * log(x)

optim(c(0,0,0),fn,x=x,y=y,method="BFGS")
编辑


我只是举一个简单的例子,如果你有一个自定义的模型公式需要优化,就使用optim。我的意思不是从简单的线性回归中使用它,因为
lm
就足够了。

我有点惊讶于iTech使用optim来解决其参数中的线性问题。根据他的x和y数据:

> lm(y ~ log(x) )

Call:
lm(formula = y ~ log(x))

Coefficients:
(Intercept)       log(x)  
       10.0          3.5  

对于线性问题,最小二乘解是ML解。

这里有几个问题。(1) 如果有一个可复制的示例()就好了。(2) 您最初声明的模型无法识别;它相当于
y
ln(x)
上的一个线性模型,参数斜率=
b
和截距
a-αb
——也就是说,你试图从本质上是一个双参数模型来估计三个参数。(3) 正如您指定的
pdf
dnorm
,正如David Winsemius所说,这正是一个简单的线性模型。不太重要的是,(4)不需要
外来
包…
cropid
???
help(anneal)
页面中非常类似的示例使用“x”作为因变量。你知道模拟退火不是一种确定性的方法,对吗?你没有理由担心微小的差异。我只是举了一个使用optim的简单例子。我从问题中了解到,它需要优化自定义函数,而不仅仅是带有对数(x)变换的普通线性回归。OP可能仍然需要
似然::退火
函数设置方面的帮助,但首先他需要提供一个可复制的示例。
> lm(y ~ log(x) )

Call:
lm(formula = y ~ log(x))

Coefficients:
(Intercept)       log(x)  
       10.0          3.5