4

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

y= a+b*(lnx-α)

其中 a、b 和 α 是要估计的参数,X 和 Y 是我的数据集。我尝试使用从网上获得的以下代码:

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)

我得到的结果是相似的,尽管数据不同,即即使我改变了作物。同样,生成的预测值是针对 x 而不是 y。我不知道我错过了什么或出了什么问题。非常感谢您的帮助。

4

2 回答 2

4

我不确定您的模型公式是否会导致唯一的解决方案,但通常您可以找到具有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")

您可以更改函数“ fn ”以反映您的模型公式,例如

sum( (y - (YOUR MODEL FORMULA) )^2 )

编辑

我只是给出一个使用 optim 的简单示例,以防您有要优化的自定义模型公式。我并不是说从简单的线性回归中使用它,因为这就lm足够了。

于 2012-12-29T19:25:09.147 回答
2

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

> lm(y ~ log(x) )

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

Coefficients:
(Intercept)       log(x)  
       10.0          3.5  

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

于 2012-12-30T00:57:09.607 回答