надежная регрессия не работает — объект «msg.UCV» не найден

Я пытаюсь запустить надежную линейную регрессию, используя пакет robust в R. Но это не работает и выдает довольно загадочную ошибку.

Вот детали настройки и данные для воспроизведения этого анализа:

# setup
set.seed(123)
library(tidyverse)
library(robust)
#> Loading required package: fit.models

# data
df <- structure(list(value = c(0.833333333333333, 0, 0, 0, 0, 0.166666666666667, 
                         0.166666666666667, 0, 0, 0.166666666666667, 0, 0, 0, 0.333333333333333, 
                         0.333333333333333, 0, 0, 0, 0.5, 0, 0, 0.166666666666667, 0, 
                         0, 0.166666666666667, 0, 0, 0, 0, 0.166666666666667, 0, 0, 0.5, 
                         0.166666666666667, 0, 0, 0, 0.333333333333333, 0, 0.5, 0.333333333333333, 
                         0.5, 0, 0.166666666666667, 0.333333333333333, 0.166666666666667, 
                         0, 0, 0.166666666666667, 0, 0.833333333333333, 0, 0, 0.333333333333333, 
                         0, 0, 0.166666666666667, 0, 0.166666666666667, 0.5, 0, 0, 0, 
                         0.166666666666667, 0, 0, 0.166666666666667, 0.166666666666667, 
                         0, 0, 0, 0, 0, 0, 0, 0, 0.166666666666667, 0.166666666666667, 
                         0.166666666666667, 0.666666666666667, 0, 0, 0, 0.166666666666667, 
                         0.166666666666667, 0, 0.166666666666667, 0, 0, 0, 0.166666666666667, 
                         0, 0, 0, 0.166666666666667, 0, 0.333333333333333, 0.166666666666667, 
                         0.166666666666667, 0, 0.166666666666667, 0.166666666666667, 0, 
                         0, 0, 0, 0, 0.166666666666667, 0.166666666666667, 0, 0, 0, 0.333333333333333, 
                         0, 0, 0, 0, 0.333333333333333, 0, 0, 0, 0.166666666666667, 0.166666666666667, 
                         0.166666666666667, 0.166666666666667, 0, 0.166666666666667, 0.166666666666667, 
                         0.166666666666667, 0.166666666666667, 0, 0.666666666666667, 0.333333333333333, 
                         0.166666666666667, 0, 0.166666666666667, 0.333333333333333, 0.333333333333333, 
                         0, 0.166666666666667, 0, 0.166666666666667, 0.333333333333333, 
                         0.333333333333333, 0, 0.166666666666667, 0.166666666666667, 0.666666666666667, 
                         0.5, 0, 0, 0, 0, 0.666666666666667, 0.166666666666667, 0, 0.333333333333333, 
                         0.166666666666667), parameter = c(-0.26053156261281, 0.294881565797054, 
                                                           0.294881565797054, -0.260531562612809, -1.37135781943254, 0.294881565797054, 
                                                           0.850294694206917, -1.37135781943254, -0.260531562612809, -1.37135781943254, 
                                                           -0.26053156261281, 1.40570782261678, -0.26053156261281, 0.850294694206917, 
                                                           1.96112095102664, -0.260531562612809, -1.9267709478424, 0.850294694206917, 
                                                           1.40570782261678, 0.850294694206917, -1.37135781943254, -0.26053156261281, 
                                                           0.294881565797054, -2.48218407625226, 0.850294694206917, 1.40570782261678, 
                                                           -0.260531562612809, 0.294881565797053, 0.294881565797054, -0.260531562612809, 
                                                           -0.260531562612809, -1.37135781943254, 0.294881565797054, 0.294881565797054, 
                                                           0.294881565797054, 0.850294694206917, 1.96112095102664, 0.850294694206917, 
                                                           0.294881565797054, 0.294881565797054, -0.815944691022672, 0.294881565797054, 
                                                           0.850294694206917, -0.260531562612809, 0.850294694206917, -1.37135781943254, 
                                                           -1.37135781943254, -0.815944691022673, -1.37135781943254, -1.9267709478424, 
                                                           1.40570782261678, -1.37135781943254, 0.294881565797054, -0.815944691022673, 
                                                           0.850294694206917, 0.850294694206917, -0.260531562612809, 0.850294694206917, 
                                                           -0.26053156261281, 0.850294694206917, -1.37135781943254, -1.9267709478424, 
                                                           1.40570782261678, 1.96112095102664, 0.850294694206917, -0.815944691022672, 
                                                           -0.260531562612809, 0.850294694206917, 0.850294694206917, -0.815944691022673, 
                                                           0.294881565797053, -0.260531562612809, -0.260531562612809, -1.9267709478424, 
                                                           -0.815944691022673, -1.9267709478424, -1.9267709478424, 0.294881565797054, 
                                                           0.294881565797054, -1.9267709478424, 0.850294694206917, 0.850294694206917, 
                                                           -0.815944691022672, -0.815944691022672, -1.9267709478424, 1.40570782261678, 
                                                           -0.815944691022673, 0.294881565797054, 0.850294694206917, -1.37135781943254, 
                                                           0.850294694206917, 0.294881565797054, -0.260531562612809, -1.9267709478424, 
                                                           1.40570782261678, -0.815944691022673, -0.260531562612809, 1.40570782261678, 
                                                           0.294881565797054, 1.40570782261678, -0.815944691022672, -0.815944691022673, 
                                                           -0.815944691022673, 0.850294694206917, -1.37135781943254, 0.294881565797054, 
                                                           1.96112095102664, -0.260531562612809, -0.26053156261281, 0.294881565797054, 
                                                           0.850294694206917, 0.850294694206917, -0.260531562612809, 0.294881565797054, 
                                                           1.96112095102664, -0.260531562612809, 1.40570782261678, 1.96112095102664, 
                                                           -0.815944691022672, 0.294881565797054, -0.815944691022672, -0.815944691022672, 
                                                           -0.815944691022673, 0.850294694206917, -1.9267709478424, -1.37135781943254, 
                                                           -1.37135781943254, -0.815944691022672, 1.96112095102664, 0.850294694206917, 
                                                           -0.26053156261281, -0.815944691022672, 0.850294694206917, 0.294881565797054, 
                                                           0.294881565797053, -0.815944691022672, 0.850294694206917, -0.815944691022673, 
                                                           1.40570782261678, 1.96112095102664, -0.815944691022673, 0.294881565797054, 
                                                           0.850294694206917, -0.260531562612809, 0.294881565797054, 1.40570782261678, 
                                                           0.850294694206917, 1.96112095102664, -0.260531562612809, 2.51653407943651, 
                                                           0.294881565797054, 0.294881565797054, 0.294881565797053, -0.815944691022672, 
                                                           -1.37135781943254, -1.37135781943254, -1.37135781943254, 0.294881565797054
                         )), row.names = c(NA, -158L), class = c("tbl_df", "tbl", "data.frame"
                         ))

Это точная ошибка, которую я получаю-

# running robust linear model
# using robust
robust::lmRob(
  data = df,
  formula = value ~ parameter,
  control = robust::lmRob.control(
    tlo = 1e-100,
    tua = 1.5e-100,
    tl = 1e-100,
    mxr = 10000,
    mxf = 10000,
    mxs = 10000,
    final.alg = "Adaptive"
  ),
  nrep = 100000
)
#> Error in paste(msg.UCV, " when refining initial estimates."): object 'msg.UCV' not found

С другой стороны, если я использую пакет robustbase, это дает мне возможную причину, почему-

# using robustbase
robustbase::lmrob(data = df,
                  formula = value ~ parameter,
                  method = "MM")
#> Warning in lmrob.S(x, y, control = control): S-estimated scale == 0:
#> Probably exact fit; check your data
#> 
#> Call:
#> robustbase::lmrob(formula = value ~ parameter, data = df, method = "MM")
#> 
#> Exact fit detected
#> 
#> Coefficients:
#> (Intercept)    parameter  
#>           0            0

Поэтому я хотел знать, могу ли я каким-либо образом получить функцию robust::lmRob с данными, которые у меня есть.

Это связано с тем, что я запускаю один и тот же анализ на всех уровнях группирующей переменной, и функция дает сбой только для одного уровня, и в результате весь анализ не выполняется. Я бы предпочел более отказоустойчивый подход.


person Indrajeet Patil    schedule 28.05.2019    source источник


Ответы (1)


Это похоже на ошибку. См. здесь, где предупреждение появляется в строка 547, но msg.UCV нигде вокруг не определяется (на самом деле только в строке 419, до которой не доходит). Учитывая, что на этом этапе переменная просто не определена, обходным путем было бы определить ее в глобальной среде:

msg.UCV <- "A WORKAROUND"

robust::lmRob(
  data = df,
  formula = value ~ parameter,
  control = robust::lmRob.control(
    tlo = 1e-100,
    tua = 1.5e-100,
    tl = 1e-100,
    mxr = 10000,
    mxf = 10000,
    mxs = 10000,
    final.alg = "Adaptive"
  ),
  nrep = 100000
)
# Call:
# robust::lmRob(formula = value ~ parameter, data = df, nrep = 1e+05, 
#     control = robust::lmRob.control(tlo = 1e-100, tua = 1.5e-100, 
#         tl = 1e-100, mxr = 10000, mxf = 10000, mxs = 10000, final.alg = "Adaptive"))
# 
# Coefficients:
# (Intercept)    parameter  
#           0            0  
#
# Warning message:
# In lmRob.fit.compute(x, y, x1.idx = x1.idx, nrep = nrep, robust.control =  robust.control,  :
#   A WORKAROUND  when refining initial estimates.
person Julius Vainora    schedule 28.05.2019
comment
Спасибо. Только что отправил электронное письмо сопровождающему, уведомив их об этой ошибке. - person Indrajeet Patil; 28.05.2019