【问题标题】:Change factor labels on effects plot in R更改 R 中效果图上的因子标签
【发布时间】:2013-12-11 21:25:54
【问题描述】:

我使用 R 中的 effects 包来生成漂亮的效果图。当我的模型中的一个预测变量是一个因子时,该图使用因子标签作为轴刻度标签。在某些情况下,这并不理想,因为可能会缩短因子名称以便于在 Anova 显示中键入和查看,但我想要一个更易读的绘图标签。

我尝试使用plottransform.x 参数,但文档说这仅适用于“数字预测变量”,实际上它似乎不起作用(对显示的标签没有影响)。

我特别不想更改因子级别名称本身(即更改数据),因为我有其他原因希望它们保持现状。我只想影响绘图显示,而不是模型本身。

我想要的是能够指定预测因子的因子水平和用作这些因子水平的轴刻度标签的字符串之间的映射。我怎样才能做到这一点?

这是一个简单的例子:

library(effects)
A = rnorm(100)
B = rnorm(100)
C = factor(rep(c("This", "That"), 50))
model = lm(A~B*C)
plot(effect("B:C", model), x.var="C")

这会产生这个情节:

effect plot http://snag.gy/5mTkJ.jpg

我希望能够将 x 轴刻度标签“This”和“That”更改为我想要的任何内容,而无需更改向量 C 中的实际因子级别名称。

【问题讨论】:

  • 也许reproducible example 会有所帮助...
  • @gung:好的,我加了。
  • @BrenBarn 我认为你不能在不改变因子水平的情况下改变轴标签。它是硬编码的。
  • @agstudy:真的吗?真恶心。好吧,我想这就是“答案”。

标签: r plot effects


【解决方案1】:

很遗憾,没有直接的方法。看一下绘图功能:getAnywhere("plot.eff").

这里有一个解决方法:

首先创建效果对象:

ef <- effect("B:C", model) 

修改efC的等级:

ef$variables$C$levels <- c("foo", "bar")
levels(ef$x$C) <- c("foo", "bar")

剧情:

plot(ef, x.var = "C")

【讨论】:

    【解决方案2】:

    这不是答案,而是解释为什么在不改变因子水平的情况下很难改变轴标签。

    您可以看到eff 对象(类eff)的S3 方法图。 获取eff类型对象的代码源绘图函数 您可以执行以下操作:

    getS3method('plot','eff')
    

    该图基本上是xyplot(格点散点图)。

    相关部分是:

    levs <- levels(x[, 1])
    plot <- xyplot(....,scales = list(x = list(at = 1:length(levs), 
                                                   labels = levs, rot = rotx),..)
    

    标签被硬编码为因子的水平。

    希望可以使用类似的方式轻松增强该功能(也许您可以联系包维护者)

     levs <- arg.levels      ## new levels arguments given as an argument
     if(is.null(levs))
        levs <- levels(x[, 1])
    

    问题是xyplot 的调用次数很多,所以你必须多次更改 scales 参数...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-17
      • 2020-09-11
      • 1970-01-01
      • 1970-01-01
      • 2018-03-15
      • 1970-01-01
      • 1970-01-01
      • 2019-01-01
      相关资源
      最近更新 更多