在R中的效果图上更改因子标签

时间:2013-12-11 21:25:54

标签: r plot effects

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

我尝试将transform.x参数用于plot,但文档说这只适用于“数字预测器”,实际上它似乎不起作用(对显示没有影响)标签)。

我特别不想更改因子级别名称本身(即更改数据),因为我还有其他理由希望它们成为现实。我只想影响情节显示,而不是模型本身。

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

这是一个简单的例子:

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中的实际因子级别名称。

2 个答案:

答案 0 :(得分:3)

不幸的是,没有直接的方法。看看绘图功能:getAnywhere("plot.eff")

这是一种解决方法:

首先创建效果对象:

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

修改Cef的级别:

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

简介:

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

enter image description here

答案 1 :(得分:1)

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

您可以看到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有很多次调用,所以你必须多次更改scale参数......