[英]Change factor labels on effects plot in R
我使用R中的effects
包來生成漂亮的效果圖。 當我的模型中的預測變量之一是因子時,該圖將因子標簽用作軸刻度標簽。 在某些情況下,這是不理想的,因為可能會縮短因子名稱,以便於在Anova顯示器中鍵入和查看,但我希望該圖的標簽更具可讀性。
我嘗試使用transform.x
參數對plot
進行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")
產生這個情節:
我希望能夠將x軸刻度標簽“ This”和“ That”更改為所需的任何內容,而無需更改向量C中的實際因子級別名稱。
不幸的是,沒有直接的方法。 看一下繪圖函數: getAnywhere("plot.eff")
。
解決方法:
首先創建效果對象:
ef <- effect("B:C", model)
修改ef
中C
的水平:
ef$variables$C$levels <- c("foo", "bar")
levels(ef$x$C) <- c("foo", "bar")
情節:
plot(ef, x.var = "C")
這不是答案,而是一個解釋,為什么在不更改因子級別的情況下很難更改軸標簽。
您可以看到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參數...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.