gpt4 book ai didi

r - 线性预测器 - 有序概率(序数,clm)

转载 作者:行者123 更新时间:2023-12-04 05:15:06 26 4
gpt4 key购买 nike

我有一个关于 ordinal 的问题包裹在 R或者特别是关于 predict.clm()功能。我想计算linear predictorordered probit估计。使用 MASS 包的 polr 函数,可以通过 object$lp 访问线性预测器。它为我提供了每条线的值(value),并且符合我所理解的线性预测变量,即 X_i'beta。但是,如果我使用 predict.clm(object, newdata,"linear.predictor")在使用 clm() 进行有序概率估计时,我得到一个包含 eta1 和 eta2 元素的列表,

  • 每列一列,如果新数据包含因变量
  • 如果新数据不包含因变量
  • ,则每个元素包含与因变量中的级别一样多的列

    不幸的是,我不知道这意味着什么。同样在作者的文档和论文中,我没有找到任何关于它的信息。你们中的一个人会很好地启发我吗?这会很棒。

    干杯,

    AK

    最佳答案

    更新(评论后):

    基础版 clm模型定义如下(详见 clm tutorial):



    生成数据:

    library(ordinal)
    set.seed(1)
    test.data = data.frame(y=gl(4,5),
    x=matrix(c(sample(1:4,20,T)+rnorm(20), rnorm(20)), ncol=2))
    head(test.data) # two independent variables
    test.data$y # four levels in y

    构建模型:
    fm.polr <- polr(y ~ x) # using polr
    fm.clm <- clm(y ~ x) # using clm

    现在我们可以访问 thetasbetas (见上式):
    # Thetas
    fm.polr$zeta # using polr
    fm.clm$alpha # using clm
    # Betas
    fm.polr$coefficients # using polr
    fm.clm$beta # using clm

    获取线性预测变量(仅在公式右侧没有 theta 的部分):
    fm.polr$lp                                                 # using polr
    apply(test.data[,2:3], 1, function(x) sum(fm.clm$beta*x)) # using clm

    新数据生成:
    # Contains only independent variables
    new.data <- data.frame(x=matrix(c(rnorm(10)+sample(1:4,10,T), rnorm(10)), ncol=2))
    new.data[1,] <- c(0,0) # intentionally for demonstration purpose
    new.data
    clm 有四种类型的预测可用模型。我们有兴趣 type=linear.prediction ,它返回一个包含两个矩阵的列表: eta1eta2 .它们包含 new.data 中每个观测值的线性预测变量:
    lp.clm <- predict(fm.clm, new.data, type="linear.predictor")
    lp.clm

    注 1: eta1eta2字面上是相等的。第二个只是 eta1 的旋转通过 1 英寸 j索引。因此,它们分别使线性预测量表的左侧和右侧保持打开状态。
    all.equal(lp.clm$eta1[,1:3], lp.clm$eta2[,2:4], check.attributes=FALSE)
    # [1] TRUE

    注 2:第一行的预测 new.data等于 thetas (就我们将此行设置为零而言)。
    all.equal(lp.clm$eta1[1,1:3], fm.clm$alpha, check.attributes=FALSE)
    # [1] TRUE

    注 3:我们可以手动构建这样的预测。例如,预测 new.data 中的第二行:
    second.line <- fm.clm$alpha - sum(fm.clm$beta*new.data[2,])
    all.equal(lp.clm$eta1[2,1:3], second.line, check.attributes=FALSE)
    # [1] TRUE

    注释 4:new.data包含响应变量,然后 predict仅返回指定级别 y 的线性预测变量.我们可以再次手动检查:
    new.data$y <- gl(4,3,length=10)
    lp.clm.y <- predict(fm.clm, new.data, type="linear.predictor")
    lp.clm.y

    lp.manual <- sapply(1:10, function(i) lp.clm$eta1[i,new.data$y[i]])
    all.equal(lp.clm.y$eta1, lp.manual)
    # [1] TRUE

    关于r - 线性预测器 - 有序概率(序数,clm),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14390080/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com