我是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)
虽然数据不同,即使我改变了cropid,但我得到的结果是相似的。类似地,生成的预测值是针对x而不是y。 我不知道我错过了什么或出错了什么。非常感谢您的帮助。
答案 0 :(得分: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
就足够了。
答案 1 :(得分:2)
我有点惊讶iTech使用optim来解决其参数线性问题。用他的x和y数据:
> lm(y ~ log(x) )
Call:
lm(formula = y ~ log(x))
Coefficients:
(Intercept) log(x)
10.0 3.5
对于线性问题,最小二乘解是ML解。