[英]log-log scale for y axis in R
我正在尝试为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
survCount:失败/检查之前存在的事物数
平均排名:失败的累积概率
说明:
所以X是我在对数x轴上想要的,而位数Ranks是我想要在对数对数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
我怀疑您期望绘制“互补对数-log”,这可能意味着您被要求绘制负对数的对数。 我承认,这并不总是这样的情节通常出现。 在关于生存分析的课文中,我通常会看到一种上升的趋势,应该看到在满足危险性假设时,log(-log(survival))随时间绘制的大致平行线(具有正斜率)。
dat <- read.table(text=" X cens survCoun
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", header=TRUE)
with( dat, plot( log(X), log( - log(medianRank) ) ) )
因此,请考虑以下情况:我将survCount / 10用作时间= X时幸存的比例:
png(); with( dat, plot( log(X),
log( - log(survCount/max(survCount) ) )
) )
dev.off()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.