【问题标题】:Markov switching model, R package, how to view source code马尔可夫切换模型,R包,如何查看源码
【发布时间】:2016-10-30 21:22:30
【问题描述】:

我正在尝试查看 MSwM 包中通用马尔可夫切换模型实现的源代码。我是 R 新手,我已经设法研究了函数 msmFit()。

但是,msmFit() 内部还有另一个函数,位于底部称为 em()。我还不能查看这个内部函数的源代码。有谁知道如何查看这个 em() 函数?

非常感谢

代码和输出

> getMethod(msmFit, signature = c(object="lm", k="numeric", sw="logical", p="ANY", data="missing", family="missing")):


Method Definition:

function (object, k, sw, p, data, family, control) 
{
    if (!missing(data)) {
        if (is.list(data)) {
            if (class(data[[1]]) == "call") {
                call = data[[1]]
            }
            else {
                call = match.call()
            }
        }
        else {
            call = match.call()
        }
    }
    else {
        call = match.call()
    }
    if (missing(p)) 
        p = 0
    if (missing(control)) 
        control = list()
    control <- do.call(msmControl, control)
    if (p > 0) {
        var = object$model[, 1]
        Ar = apply(as.matrix(1:p), 1, function(el) {
            length(var) = length(var) - el
            var = c(rep(NA, el), var)
            return(var)
        })
        colnames(Ar) = paste(names(object$model)[1], "_", 1:p, 
            sep = "")
        aux = paste(colnames(Ar), collapse = "+")
        object = update(formula = as.formula(paste("~.+", aux, 
            sep = "")), data = data.frame(object$model, Ar), 
            object)
    }
    Coef = data.frame(matrix(NA, nrow = k, ncol = length(coef(object))))
    std = rep(0, k)
    ind = sample(1:k, length(object$residuals), replace = T)
    for (i in 1:k) {
        data1 = as.data.frame(object$model[ind == i, , drop = F])
        mod1 = update(object, formula = object$terms, data = data1)
        Coef[i, ] = coef(mod1)
        std[i] = summary(mod1)$sigma
    }
    names(Coef) = names(coef(object))
    transMat = t(matrix(table(ind, c(ind[-1], NA))/rep(table(ind[-length(ind)]), 
        k), ncol = k))
    ans = new(Class = "MSM.lm", call = as.call(call), model = object, 
        k = k, switch = sw, p = p, Coef = Coef, std = std, transMat = transMat, 
        iniProb = rep(1/k, k))
    validMSM.linear(ans)
    validMSM.lm(ans)
    ans = em(ans, control)
    return(ans)
}
<environment: namespace:MSwM>

Signatures:
        object k         sw        p     data      family   
target  "lm"   "numeric" "logical" "ANY" "missing" "missing"
defined "lm"   "numeric" "logical" "ANY" "missing" "missing"

【问题讨论】:

  • 查看here并搜索字符串.MSM.em
  • 非常感谢!有没有办法在 R 中而不是在 Github 上查看此代码?

标签: r open-source


【解决方案1】:

如果您使用的是传统的 R 堆栈,请将git clone MSwM 项目添加到您自己的机器上并查看R 子目录。看起来em 是一个泛型(我不是 R 对象模型方面的专家!),这就是为什么它有一个有趣的扩展名称。您可能可以直接查看.MSM.embody(),但我不确定它是否会在您的 R 会话中可见。

请考虑更改此问题的标签,因为包的技术目标(与代码结构的细节相反!)不是很相关。

【讨论】:

    猜你喜欢
    • 2016-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-27
    • 1970-01-01
    相关资源
    最近更新 更多