【问题标题】:icenReg: length of 'dimnames' [2] not equal to array extenticenReg:“dimnames”[2] 的长度不等于数组范围
【发布时间】:2017-07-10 21:18:43
【问题描述】:

我正在尝试在 R 中运行一个区间删失的 Cox 模型。icenReg 包有一个函数 ic_sp 来执行此操作。但是,当我给它一个因子变量作为预测变量时,我遇到了一个问题。

data = data.frame(R = c(2, 1, 4, 7, 4, 6, 8, 8, 12, 3),
                  L = c(3, 1, 4, 7, 5, 6, 8, 9, 12, 3),
                  gender = c("m", "f", "f", "m", "m", "f", "f", "m", "f", "m"))
s = survival::Surv(data$R, data$L, type = 'interval2')
icenReg::ic_sp(s ~ relevel(gender, "f"), model = 'ph', bs_samples = 5, data = data)

> Error in dimnames(x) <- dn : length of 'dimnames' [2] not equal to array extent

我已经调试了函数并逐步完成了它。看来问题出在

myFit <- new(callText)

在 fit_ICPH 子函数中,因为在它抱怨之后

Error in fit$model == "ph" : comparison (1) is possible only for atomic and list types    

我尝试过使用这个“新”功能,但当时我无法使用它。

任何帮助将不胜感激!这一切都包含在一个闪亮的应用程序中,所以如果可能的话,我真的不想编辑数据集;数据集和公式都是反应式的。

奇怪的是,虽然可能不是一旦我找到了解决方案,但如果变量有 3 个级别,它就可以工作。

data = data.frame(R = c(2, 1, 4, 7, 4, 6, 8, 8, 12, 3),
                  L = c(3, 1, 4, 7, 5, 6, 8, 9, 12, 3),
                  gender = c("m", "a", "f", "m", "m", "f", "a", "m", "f", "m"))
s = survival::Surv(data$R, data$L, type = 'interval2')
icenReg::ic_sp(s ~ relevel(gender, "f"), model = 'ph', bs_samples = 5, data = data)
> results...

【问题讨论】:

    标签: r


    【解决方案1】:

    由于公式内部的relevel 调用而出现此问题。将来我会考虑允许这样做(这是 icenReg 的作者)。

    一种解决方法是仅在函数调用之外重新调整数据级别。例如,以下将正常工作:

    # Same data as above, 
    # but changing L to be left side of interval, R as right side
    data = data.frame(L = c(2, 1, 4, 7, 4, 6, 8, 8, 12, 3),
                  R = c(3, 1, 4, 7, 5, 6, 8, 9, 12, 3),
                  gender = c("m", "f", "f", "m", "m", "f", "f", "m", "f", "m"))
    
    # Releveling the code outside formula
    data$gender_f <- relevel(data$gender, 'f')
    
    # Fitting model using cbind syntax
    icenReg::ic_sp(cbind(L, R) ~ gender_f, model = 'ph', bs_samples = 5, data = data)
    

    【讨论】:

    • 谢谢,我希望我可以在不修改数据集的情况下逃脱。知道为什么它会在三个级别上工作吗?令人困惑的是,我正在从事的项目使用 R 来表示右检查点和 L 左检查点,这就是我切换我的原因。
    • @Nick(替换了之前的评论,因为我已经挖掘了更多内容)。问题三个以上的工作是有道理的:基本上,如果只有两个因素,数据矩阵最终会成为一个向量,我需要一个自定义方法来提取列名。我的自定义方法没有考虑公式右侧可能存在函数的事实。对于三个以上的因素,生成的数据矩阵是一个矩阵(因为三个级别扩展为两列)。同样,如果您有一个具有两个水平的因子加上另一个协变量,这不会有问题。
    • @Nick,很快就会有这个问题的补丁。
    • @Nick:补丁已推送至the GitHub repo。鉴于这是一个相当小的错误(仅在调用具有只有 2 个级别的单个协变量的函数时才会发生),可能会推迟推送到 CRAN,直到进行更大的更新。
    猜你喜欢
    • 2016-12-01
    • 1970-01-01
    • 2016-06-25
    • 1970-01-01
    • 2022-12-08
    • 1970-01-01
    • 2018-04-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多