【问题标题】:R error: Incorrect number of dimensionsR错误:维数不正确
【发布时间】:2016-12-28 04:13:14
【问题描述】:

我有一些分类数据显示植物家族、果实类型、果实颜色和种子传播,其中响应变量(分散)要么是 0 表示否,要么是 1 表示是。

 test1.3
             FAMILY FRUIT_TYPE COLOUR_RF Dispersal
3   Erythroxylaceae          D         R         1
4         Lamiaceae          D         G         1
8        Clusiaceae          D         Y         1
12       Clusiaceae          D         Y         1
16        Myrtaceae          D         R         1
19        Rubiaceae          D         R         0
22    Anacardiaceae          D        Br         1
25  Melastomataceae          D         R         1
29         Moraceae          F         Y         1
32         Moraceae          F        Br         1
35         Fabaceae          C        Br         1
37        Lauraceae          D        PG         1
39      Sapindaceae          D        Br         1
41        Myrtaceae          D         R         1
43         Moraceae          D         G         1
45       Clusiaceae          D         Y         1
51         Moraceae          F         Y         1
52        Lauraceae          D         R         0
54        Rubiaceae          D         Y         0
57    Euphorbiaceae          D        PY         0
75  Dichapetalaceae          D         Y         1
83         Moraceae          F         R         1
86        Myrtaceae          D         Y         1
91       Solanaceae          D         Y         1
94      Myrsinaceae          D         Y         1
98      Connaraceae          D         O         1
101       Ochnaceae          C         R         1
104      Proteaceae          D        Br         0
107      Clusiaceae          D         R         1
114      Clusiaceae          D         P         1
116      Clusiaceae          D         P         1
119     Smilacaceae          D         R         1
124     Apocynaceae          D         Y         1
129     Apocynaceae          D        Br         1
138     Icacinaceae          D         Y         0
141        Moraceae          D         Y         1
144     Myrsinaceae          D         R         0
147  Pittosporaceae          D         O         1
150     Sapindaceae          C         O         1
154        Fabaceae          C         Y         1
158     Aphloiaceae          C         W         1
169    Celastraceae          D         O         1
176        Oleaceae          D         P         0
179       Rubiaceae          D         Y         0
182       Meliaceae          D         R         0
186     Apocynaceae          C        PY         1
188      Salicaceae          D         R         1
192     Burseraceae          D        Br         0
195         Araceae          D         Y         0
198       Rubiaceae          D         P         1
202        Rutaceae          D         O         1
206 Torrecilliaceae          D        PY         0
214       Arecaceae          D        PY         1
220        Rutaceae          D        PY         0
223       Rubiaceae          D        DR         0
230       Rubiaceae          D         B         0
237      Clusiaceae          D         Y         1
244     Myrsinaceae          D         R         1
247 Melastomataceae          D         R         0
250    Aquifoliacea          D         R         1
260       Marsaceae          D         W         1
263        Vitaceae          D        DR         0
266       Lamiaceae          D         B         0
278    Hypericaceae          D         O         1
281     Cannelaceae          D         Y         0
283       Rubiaceae          D         R         1
289      Sapotaceae          D        Br         1
293       Lauraceae          D         R         0
343     Sapindaceae          D         O         0
344       Lauraceae          D         P         0
362      Clusiaceae          D        Gr         1
366   Anacardiaceae          D        Br         1
370       Lauraceae          D         P         1
374       Lauraceae          D         R         0
399       Lauraceae          D         R         0
405       Lauraceae          D         R         0

我正在执行二项式 GLM,并且正在使用 MuMIn 包来“疏通”全局模型。

Global<-glm(Dispersal~FAMILY+COLOUR_RF+FRUIT_TYPE+COLOUR_RF*FRUIT_TYPE+COLOUR_RF*FAMILY, family=binomial(link="logit"), na.action="na.fail", data=test1.3)

当我尝试根据 AICc 权重绘制最重要的模型时(正如我之前在其他迭代中多次做过的那样),我收到警告错误:

library(MuMIn)
    x<-dredge(Global)

Fixed term is "(Intercept)"
Warning messages:
1: glm.fit: fitted probabilities numerically 0 or 1 occurred 
2: glm.fit: fitted probabilities numerically 0 or 1 occurred 
3: glm.fit: fitted probabilities numerically 0 or 1 occurred 
4: glm.fit: fitted probabilities numerically 0 or 1 occurred 
5: glm.fit: algorithm did not converge 
6: glm.fit: fitted probabilities numerically 0 or 1 occurred 
7: glm.fit: fitted probabilities numerically 0 or 1 occurred 
8: glm.fit: fitted probabilities numerically 0 or 1 occurred 
9: glm.fit: fitted probabilities numerically 0 or 1 occurred 

par(mfrow=c(1,1))
par(mar = c(5,5,14,5))
plot(subset(x, delta <2), labAsExpr = T, xlab=c("Predictor Variables for 'P. edwardsi' Dispersal"), ylab=c(expression(paste("Model Number by Cumulative Akaike Weight ", (omega) ))))

"Error in pal[, 1L + ((i - 1L)%%npal)] : incorrect number of dimensions"

有人知道为什么会这样吗?我在许多其他迭代中使用了相同的代码(即更改响应变量)并且以前没有问题。

【问题讨论】:

  • 通过编辑代码以包含library 调用来指定dredge 的位置。
  • 如果包含从 glm 调用和 dredge 调用中出现的(大量)警告消息会更加礼貌。
  • 我在我的描述中包含了疏通功能位于“MuMIn”包中(假设库(MuMIn))
  • 是的,但是因为它是非衬线字体,所以拼写不明确。
  • 我已经编辑了我的帖子以包含库调用和警告消息。

标签: r glm bernoulli-probability


【解决方案1】:

这是您要发送到plot() 的对象的 str() 调用顶部的输出:

> xsub <- subset(x, delta <2)
> str(xsub)
Classes ‘model.selection’ and 'data.frame': 1 obs. of  11 variables:
 $ (Intercept)         : num 17.6
 $ COLOUR_RF           : Factor w/ 1 level "+": NA
 $ FAMILY              : Factor w/ 1 level "+": NA
 $ FRUIT_TYPE          : Factor w/ 1 level "+": 1
 $ COLOUR_RF:FAMILY    : Factor w/ 1 level "+": NA
 $ COLOUR_RF:FRUIT_TYPE: Factor w/ 1 level "+": NA
 $ df                  : int 3
 $ logLik              : num -44.3
 $ AICc                : num 94.8
 $ delta               : num 0
 $ weight              : num 1

我怀疑您只是进行了一个限制性调用,它没有提供绘图函数执行任何有用工作所需的尽可能多的信息。使用subset(x, delta &lt;5) 成功。

【讨论】:

  • 是的,设置 delta
【解决方案2】:

这个问题是因为subset(x, delta &lt; 2) 只选择了一种情况(见x$delta)。显然,函数plot.model.selection 无法处理这个问题。您可以通过增加子集范围或在绘图函数中插入一些代码来修复此错误来解决此问题。这是我通过添加行 pal &lt;- as.matrix(pal):

plot0 = function (x, ylab = NULL, xlab = NULL, labels = attr(x, "terms"), 
               labAsExpr = FALSE, col = c("SlateGray", "SlateGray2"), col2 = "white", 
               border = par("col"), par.lab = NULL, par.vlab = NULL, axes = TRUE, 
               ann = TRUE, ...) 
{
  if (is.null(xlab)) 
    xlab <- NA
  if (is.null(ylab)) 
    ylab <- expression("Cumulative Akaike weight" ~ ~(omega))
  op <- par(..., no.readonly = TRUE)
  on.exit(par(op))
  cumweight <- cumsum(weight <- Weights(x))
  stdweight <- weight/max(weight)
  n <- nrow(x)
  m <- length(attr(x, "terms"))
  plot.new()
  plot.window(xlim = c(0, m), ylim = c(1, 0), xaxs = "i", 
              yaxs = "i")
  pal <- if (is.na(col2)) 
    rbind(col)
  else vapply(col, function(x) grDevices::rgb((grDevices::colorRamp(c(col2, 
                                                                      x)))(stdweight), maxColorValue = 255), character(n))
  pal <- as.matrix(pal) # the only new line
  npal <- ncol(pal)

  for (i in 1L:m) rect(i - 1, c(0, cumweight), i, 
                       c(cumweight, 1), 
                       col = ifelse(is.na(x[, i]), NA, pal[, 1L + ((i - 1L)%%npal)]), 
                       border = border)
  if (ann) {
    labCommonArg <- list(col = par("col.axis"), font = par("font.axis"), 
                         cex = par("cex.axis"))
    if (labAsExpr) {
      labels <- gsub(":", "%*%", labels, perl = TRUE)
      labels <- gsub("\\B_?(\\d+)(?![\\w\\._])", "[\\1]", 
                     labels, perl = TRUE)
      labels <- parse(text = labels)
    }
    arg <- c(list(side = 3L, padj = 0.5, line = 1, las = 2), 
             labCommonArg)
    for (i in names(par.lab)) arg[i] <- par.lab[i]
    if (is.expression(labels)) {
      if (length(labels) != m) 
        stop("length of 'labels' is not equal to number of terms")
      for (i in 1L:m) do.call("mtext", c(list(text = as.expression(labels[[i]]), 
                                              at = i - 0.5), arg))
    }
    else if (!is.null(labels) && !is.na(labels)) {
      if (length(labels) != m) 
        stop("length of 'labels' is not equal to number of terms")
      do.call("mtext", c(list(text = labels, at = 1L:m - 
                                0.5), arg))
    }
    arg <- c(list(side = 4, las = 2, line = 1, adj = 1), 
             labCommonArg)
    for (i in names(par.vlab)) arg[i] <- par.vlab[i]
    ss <- weight > -(1.2 * strheight("I", cex = arg$cex))
    arg[["at"]] <- (c(0, cumweight[-n]) + cumweight)[ss]/2
    arg[["text"]] <- rownames(x)[ss]
    arg$line <- arg$line + max(strwidth(arg[["text"]], cex = arg$cex, 
                                        units = "in"))/par("mai")[4L] * par("mar")[4L]
    do.call(mtext, arg)
    title(ylab = ylab, xlab = xlab)
  }
  if (axes) {
    axis(2L, col = border, col.ticks = border)
    box(col = border)
  }
  invisible(x)
}

您还需要通过Weights = MuMIn:::WeightsWeights 函数带出隐藏环境。然后这对我有用:

plot0(subset(x, delta < 2), labAsExpr = T, 
      xlab=c("Predictor Variables for 'P. edwardsi' Dispersal"), 
      ylab=c(expression(paste("Model Number by Cumulative Akaike Weight ", (omega) ))))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-10
    • 1970-01-01
    • 2021-12-05
    • 2017-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多