Как написать эту функцию для модели смеси в R? - PullRequest
0 голосов
/ 03 июня 2019

Я хочу оценить модель в R .

Одной из ее частей является модель конечной смеси, состоящая из двух OLS .

Будучи новичком в R, я не знаю, как написать эту функцию плотности вероятности в R.

Интересно, можете ли вы помочь.

Функция плотности вероятности выглядит следующим образом:

f(y|x)=(p/σ1)*φ(y-x*b1/σ1)+((1-p)/σ2)*φ(y-x*b2/σ2)

Я использовал stata для написания примера:

 
   gen double <code>f1'=normalden($ML_y1,</code>xb1',exp(<code>lns1'))
   gen double</code>f2'=normalden($ML_y1,<code>xb2',exp(</code>lns2'))
   tempvar p
   gen double <code>p'=exp(</code>lp')/(1+exp(<code>lp'))
   replace</code>lnf'=ln(<code>p'*</code>f1'+(1-<code>p')*</code>f2') 
   

Интересно, можете ли вы показать мне, какнаписать эту функцию в R.

Большое спасибо, и я с нетерпением жду вашей помощи

1 Ответ

0 голосов
/ 07 июня 2019

См. Функцию FLXMRglm. Плотность оценивается с dnorm

library(flexmix)
FLXMRglm

# your case 


if (family == "gaussian") {
        z@defineComponent <- function(para) {
            predict <- function(x, ...) {
                dotarg = list(...)
                if ("offset" %in% names(dotarg)) 
                  offset <- dotarg$offset
                p <- x %*% para$coef
                if (!is.null(offset)) 
                  p <- p + offset
                p
            }
            logLik <- function(x, y, ...) dnorm(y, mean = predict(x, 
                ...), sd = para$sigma, log = TRUE)
            new("FLXcomponent", parameters = list(coef = para$coef, 
                sigma = para$sigma), logLik = logLik, predict = predict, 
                df = para$df)
        }
        z@fit <- function(x, y, w, component) {
            fit <- lm.wfit(x, y, w = w, offset = offset)
            z@defineComponent(para = list(coef = coef(fit), df = ncol(x) + 
                1, sigma = sqrt(sum(fit$weights * fit$residuals^2/mean(fit$weights))/(nrow(x) - 
                fit$rank))))
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...