簡體   English   中英

R中效果圖上的更改因子標簽

[英]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")

產生這個情節:

效果圖http://snag.gy/5mTkJ.jpg

我希望能夠將x軸刻度標簽“ This”和“ That”更改為所需的任何內容,而無需更改向量C中的實際因子級別名稱。

不幸的是,沒有直接的方法。 看一下繪圖函數: 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")

在此處輸入圖片說明

這不是答案,而是一個解釋,為什么在不更改因子級別的情況下很難更改軸標簽。

您可以看到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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM