plot_model(type="diag") 中的错误:参数暗示不同的行数错误

Error in plot_model(type="diag") : arguments imply differing number of rows error

我正在做回归分析并用这段代码建立回归模型,

regrs_2 <- lm(gii.score ~ hof.pdi + hof.idv + hof.mas + hof.uai + hof.ltowvs + 
                hof.ivr + ctnt.dummy.asia + ctnt.dummy.europe + ctnt.dummy.noram + 
                ctnt.dummy.africa + ctnt.dummy.oceania, data = data)
library(sjPlot)
plot_model(regrs_2, type="diag")

和运行这个代码:

sjPlot::plot_model(regrs_2,type="diag")

这时候出现错误,说:

Error in data.frame(x = fitted_, y = res_) : 
  arguments imply differing number of rows: 61, 60**

但是当我将 plot_modeltype= 参数从 "diag" 更改为 "std""est" 时没有错误。

我该如何解决这个问题?

这是我的 data:

structure(list(X = c(4L, 5L, 11L, 31L, 32L, 41L, 57L, 91L, 93L, 
94L, 1L, 2L, 3L, 6L, 7L, 8L, 9L, 10L, 12L, 13L, 14L, 15L, 16L, 
17L, 18L, 19L, 20L, 21L, 22L, 23L, 24L, 25L, 26L, 27L, 28L, 29L, 
30L, 33L, 34L, 35L, 36L, 37L, 38L, 39L, 40L, 42L, 43L, 44L, 45L, 
46L, 47L, 48L, 49L, 50L, 51L, 52L, 53L, 54L, 55L, 56L, 58L, 59L, 
60L, 61L, 62L, 63L, 64L, 65L, 66L, 67L, 68L, 69L, 70L, 71L, 72L, 
73L, 74L, 75L, 76L, 77L, 78L, 79L, 80L, 81L, 82L, 83L, 84L, 85L, 
86L, 87L, 88L, 89L, 90L, 92L), ctnt = structure(c(6L, 3L, 6L, 
5L, 3L, 6L, 6L, 3L, 6L, 6L, 2L, 2L, 2L, 4L, 6L, 6L, 6L, 6L, 6L, 
6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 1L, 2L, 1L, 1L, 1L, 1L, 
1L, 3L, 3L, 5L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 
6L, 6L, 6L, 6L, 6L, 3L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 2L, 2L, 
2L, 2L, 1L, 1L, 3L, 1L, 2L, 3L, 3L, 3L, 3L), .Label = c("남아메리카", 
"북아메리카", "아시아", "아프리카", "오세아니아", "유럽"), class = "factor"), 
    c_code = c(7L, 20L, 34L, 61L, 62L, 90L, 351L, 971L, 994L, 
    995L, 1L, 1L, 1L, 27L, 30L, 31L, 32L, 33L, 36L, 39L, 40L, 
    41L, 43L, 44L, 45L, 46L, 47L, 48L, 49L, 51L, 52L, 54L, 55L, 
    56L, 57L, 58L, 60L, 63L, 64L, 65L, 66L, 81L, 82L, 84L, 86L, 
    91L, 92L, 98L, 212L, 213L, 223L, 226L, 233L, 234L, 250L, 
    251L, 255L, 256L, 260L, 263L, 352L, 353L, 354L, 355L, 356L, 
    357L, 358L, 359L, 370L, 371L, 372L, 373L, 374L, 375L, 380L, 
    381L, 382L, 385L, 387L, 420L, 421L, 502L, 503L, 506L, 507L, 
    593L, 598L, 852L, 868L, 876L, 880L, 962L, 966L, 972L), country = structure(c(73L, 
    27L, 80L, 6L, 43L, 86L, 71L, 3L, 8L, 33L, 16L, 25L, 87L, 
    79L, 37L, 62L, 11L, 32L, 40L, 47L, 72L, 82L, 7L, 36L, 24L, 
    81L, 65L, 70L, 34L, 68L, 58L, 4L, 13L, 17L, 19L, 91L, 55L, 
    69L, 63L, 77L, 84L, 49L, 51L, 92L, 18L, 42L, 66L, 44L, 61L, 
    2L, 56L, 15L, 35L, 64L, 74L, 30L, 83L, 88L, 93L, 94L, 54L, 
    45L, 41L, 1L, 57L, 22L, 31L, 14L, 53L, 52L, 29L, 59L, 5L, 
    10L, 89L, 76L, 60L, 21L, 12L, 23L, 78L, 38L, 28L, 20L, 67L, 
    26L, 90L, 39L, 85L, 48L, 9L, 50L, 75L, 46L), .Label = c("Albania", 
    "Algeria", "Arab countries", "Argentina", "Armenia", "Australia", 
    "Austria", "Azerbaijan", "Bangladesh", "Belarus", "Belgium", 
    "Bosnia", "Brazil", "Bulgaria", "Burkina Faso", "Canada", 
    "Chile", "China", "Colombia", "Costa Rica", "Croatia", "Cyprus", 
    "Czech Rep", "Denmark", "Dominican Rep", "Ecuador", "Egypt", 
    "El Salvador", "Estonia", "Ethiopia", "Finland", "France", 
    "Georgia", "Germany", "Ghana", "Great Britain", "Greece", 
    "Guatemala", "Hong Kong", "Hungary", "Iceland", "India", 
    "Indonesia", "Iran", "Ireland", "Israel", "Italy", "Jamaica", 
    "Japan", "Jordan", "Korea South", "Latvia", "Lithuania", 
    "Luxembourg", "Malaysia", "Mali", "Malta", "Mexico", "Moldova", 
    "Montenegro", "Morocco", "Netherlands", "New Zealand", "Nigeria", 
    "Norway", "Pakistan", "Panama", "Peru", "Philippines", "Poland", 
    "Portugal", "Romania", "Russia", "Rwanda", "Saudi Arabia", 
    "Serbia", "Singapore", "Slovak", "South Africa", "Spain", 
    "Sweden", "Switzerland", "Tanzania", "Thailand", "Trinidad and Tobago", 
    "Turkey", "U.S.A.", "Uganda", "Ukraine", "Uruguay", "Venezuela", 
    "Vietnam", "Zambia", "Zimbabwe"), class = "factor"), hof.pdi = c(44L, 
    NA, 24L, 11L, 39L, 31L, 28L, 40L, NA, NA, 12L, NA, 13L, NA, 
    26L, 11L, 30L, 33L, 17L, 20L, 43L, 9L, 2L, 10L, 4L, 7L, 7L, 
    33L, 10L, 29L, 41L, 19L, 34L, 28L, 32L, 41L, 1L, 45L, 5L, 
    37L, 29L, 21L, 26L, 35L, 40L, 38L, 22L, 25L, 35L, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, 13L, 6L, NA, NA, 23L, 
    NA, 8L, 35L, 14L, 15L, 13L, NA, NA, NA, NA, 42L, NA, 36L, 
    NA, 24L, 1L, 46L, 31L, 10L, 46L, 39L, 27L, 33L, 18L, 16L, 
    40L, NA, NA, 3L), hof.idv = c(21L, NA, 25L, 46L, 4L, 19L, 
    13L, 20L, NA, NA, 44L, NA, 47L, NA, 17L, 44L, 40L, 38L, 44L, 
    41L, 14L, 35L, 28L, 45L, 39L, 38L, 36L, 32L, 34L, 6L, 14L, 
    23L, 20L, 10L, 3L, 2L, 12L, 15L, 42L, 9L, 9L, 23L, 7L, 9L, 
    9L, 24L, 4L, 22L, 23L, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, 32L, 37L, NA, NA, 30L, NA, 33L, 14L, 32L, 37L, 32L, 
    NA, NA, NA, NA, 11L, NA, 16L, NA, 29L, 26L, 31L, 8L, 5L, 
    1L, 43L, 18L, 11L, 6L, 21L, 9L, NA, NA, 27L), hof.mas = c(11L, 
    NA, 16L, 33L, 20L, 19L, 9L, 27L, NA, NA, 26L, NA, 34L, NA, 
    31L, 2L, 28L, 17L, 44L, 40L, 16L, 40L, 42L, 37L, 3L, 24L, 
    43L, 36L, 37L, 16L, 39L, 30L, 23L, 7L, 36L, 41L, 25L, 36L, 
    32L, 22L, 10L, 46L, 14L, 15L, 37L, 30L, 25L, 17L, 27L, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 25L, 38L, NA, NA, 
    21L, NA, 6L, 15L, 4L, 45L, 8L, NA, NA, NA, NA, 17L, NA, 15L, 
    NA, 31L, 1L, 12L, 15L, 5L, 18L, 35L, 13L, 31L, 32L, 38L, 
    29L, NA, NA, 21L), hof.uai = c(43L, NA, 37L, 17L, 14L, 36L, 
    3L, 27L, NA, NA, 14L, NA, 13L, NA, 4L, 18L, 42L, 37L, 35L, 
    30L, 39L, 20L, 28L, 9L, 6L, 7L, 16L, 41L, 25L, 38L, 35L, 
    37L, 31L, 37L, 33L, 31L, 10L, 12L, 15L, 32L, 24L, 40L, 36L, 
    8L, 8L, 11L, 28L, 21L, 27L, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, 28L, 9L, NA, NA, 44L, NA, 21L, 36L, 25L, 23L, 
    22L, NA, NA, NA, NA, 40L, NA, 33L, NA, 29L, 17L, 2L, 42L, 
    37L, 37L, 26L, 1L, 7L, 19L, 5L, 22L, NA, NA, 34L), hof.ltowvs = c(50L, 
    43L, 29L, 8L, 38L, 27L, 14L, 9L, 37L, 22L, 21L, 2L, 12L, 
    19L, 26L, 41L, 51L, 39L, 35L, 37L, 32L, 47L, 36L, 31L, 20L, 
    33L, 20L, 22L, 52L, 11L, 10L, 7L, 25L, 16L, 2L, 5L, 24L, 
    13L, 18L, 46L, 17L, 55L, 1L, 34L, 54L, 31L, 30L, 3L, 3L, 
    12L, 7L, 13L, 23L, 2L, 6L, NA, 19L, 10L, 15L, 4L, 40L, 10L, 
    14L, 37L, 28L, NA, 22L, 42L, 51L, 42L, 51L, 45L, 37L, 50L, 
    53L, 32L, 48L, 35L, 44L, 44L, 49L, NA, 7L, NA, NA, NA, 12L, 
    37L, 2L, NA, 28L, 5L, 21L, 22L), hof.ivr = c(10L, 25L, 29L, 
    50L, 24L, 33L, 20L, 21L, 11L, 19L, 47L, 37L, 47L, 43L, 34L, 
    47L, 40L, 32L, 18L, 17L, 10L, 45L, 43L, 48L, 49L, 53L, 38L, 
    16L, 26L, 31L, 58L, 42L, 41L, 47L, 55L, 2L, 40L, 27L, 52L, 
    31L, 30L, 27L, 16L, 22L, 12L, 14L, 1L, 26L, 13L, 19L, 28L, 
    8L, 51L, 56L, 23L, 31L, 24L, 35L, 27L, 15L, 39L, 44L, 46L, 
    5L, 45L, 49L, 40L, 6L, 6L, 3L, 6L, 9L, NA, 5L, 4L, 15L, 10L, 
    20L, 29L, 16L, 15L, NA, 57L, NA, NA, NA, 36L, 7L, 54L, NA, 
    10L, 28L, 35L, NA), gii.score = c(39.32, 28.91, 49.07, 55.22, 
    29.79, 37.81, 46.61, 40.06, 30.1, 33.83, 55.73, 30.6, 60.1, 
    37.45, 40.28, 61.58, 50.91, 53.59, 43, 46.4, 38.2, 68.3, 
    54.07, 62.42, 57.7, 62.4, 53.8, 40.16, 57.05, 34.87, 38.03, 
    34.3, 34.95, 41.2, 36.41, 22.77, 45.98, 31.05, 55.92, 59.36, 
    38.1, 53.97, 56.26, 38.35, 47.47, 31.74, 23.07, 28.37, 33.19, 
    24.38, 28.37, 28.68, 28.04, 23.72, 30.09, 24.17, 27, 27.65, 
    24.64, 22.52, 59.02, 59.13, 57.02, 30.74, 50.48, 43.51, 59.97, 
    42.16, 42.26, 45.51, 52.81, 40.53, 37.31, 38.23, 36.45, 36.47, 
    41.23, 41.7, 32.31, 51.32, 42.99, 28.84, 29.31, 38.59, 36.8, 
    26.87, 35.76, 57.23, 32.18, 29.95, 23.71, 33.78, 40.65, 53.54
    ), ctnt.dummy.asia = c(0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
    0, 0, 1, 1, 1, 1), ctnt.dummy.europe = c(1, 0, 1, 0, 0, 1, 
    1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
    1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 
    1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), ctnt.dummy.noram = c(0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0), ctnt.dummy.africa = c(0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
    1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), ctnt.dummy.oceania = c(0, 
    0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), ctnt.dummy.souam = c(0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0)), row.names = c(NA, 
-94L), class = "data.frame")

检查 sjPlot::plot_model 函数的代码表明使用了 sjPlot:::plot_diag_linear 方法并产生了错误。

# sjPlot:::plot_diag_linear(regrs_2, geom.colors="red", dot.size=1, line.size=1)
# # Error in data.frame(x = fitted_, y = res_) : 
# #   arguments imply differing number of rows: 61, 60

更深入地了解代码,我们会看到绘图列表,其中 sjPlot:::diag_qq 失败了。

sjPlot:::diag_vif(regrs_2)

# sjPlot:::diag_qq(regrs_2, dot.size=1, line.size=1)  ## FAILS!
# # Error in data.frame(x = fitted_, y = res_) : 
# #   arguments imply differing number of rows: 61, 60

sjPlot:::diag_norm(regrs_2, geom.colors="red")
# Warning message:
#   Removed 101 row(s) containing missing values (geom_path). 

sjPlot:::diag_ncv(regrs_2, dot.size=1, line.size=1)
# `geom_smooth()` using formula 'y ~ x'

也会抛出警告。该问题可能是由于统计原因造成的,因为 ?sjPlot::plot_model 上的示例运行良好。

只回答了一部分,我知道,希望能对你有所帮助。