我正在尝试为 R 中的删失数据创建 Weibull 概率图。为此,我需要 y 轴的对数刻度和 x 轴的对数刻度。
y 轴是概率(范围 0 到 1),x 轴是“天数”。
我知道我可以在 plot() 函数中使用 log="xy" 创建对数轴。但我需要 y 轴的对数刻度。
有没有办法做到这一点?
先感谢您!
数据示例: data$
X cens survCount medianRank
136.5424 1 10 0.09090909
181.9756 1 9 0.18181818
192.4309 1 8 0.27272727
216.6145 1 7 0.36363636
224.3097 0 6 NA
254.4997 0 5 NA
285.1438 1 4 0.49090909
289.3991 1 3 0.61818182
295.9161 0 2 NA
309.9522 0 1 NA
X:直到失败的时间
cens
:二进制,如果被审查
则为0
解释:
所以 X 是我想要的 log x 轴,medianRanks 是我想要的 log-log y 轴。
问题是你不能从 <1 的数字计算两倍的对数,因为第一个对数会给出一个负数,而你不能从负数计算对数。这就是为什么我要转换轴而不是值的原因。
到目前为止我所做的:到目前为止
,我的解决方法是将我的 y 值乘以一个数字(例如 1000),这样我就没有任何小于 1 的值,然后计算这些值的对数对数。然后我绘制它们,隐藏轴并使用 axis() 函数添加新轴。
data$medianRank <- data$medianRank*1000
loglogY <- log(log(data$medianRank))
logX <- log(data$X)
plot(logX, loglogY, yaxt="n", xaxt="n")
ylabels <- c(0.1, 0.2, 0.5, 0.7, 0.99)
yAt <- log(log(ylabels*1000))
axis(2, at=yAt, labels=ylabels)
xlabels <- c(100, 200, 300, 400)
xAt <- log(xlabels)
axis(1, at=xAt, labels=xlabels)
@mike1886 建议使用ggplot2包。我看了看,发现很有希望。当一个人创建一个 ggplot 时,可以添加coord_trans()来转换轴。有一些可用的转换,但我找不到对数日志的转换。幸运的是,还可以使用scales包中的trans_new()函数编写自定义转换。
到目前为止,我的新转换代码:
require(ggplot2)
require(scales)
loglog_trans <- function(){
trans <- function(x){ log(log(x)) }
inv <- function(x){ exp(exp(x)) }
trans_new("loglog", trans, inv)
}
wpp <- ggplot(data2, aes(ftime, medianRank)) + geom_point()
wpp
wpp + coord_trans("log10", "loglog")
但它不起作用。
if (zero_range(range)) { 中的错误:需要 TRUE/FALSE 的缺失值另外:警告消息:在 log(log(x)) 中:产生了 NaN