4

私は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)

データは異なりますが、つまり、cropidを変更した場合でも、得られる結果は似ています。同様に、生成される予測値は、yではなくxに対するものです。何を逃したのか、何がうまくいかなかったのかわかりません。あなたの助けは大歓迎です。

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 に答える