我使用IV=time
,DV=concentration
创建了一个散点图(多个组GRP)。我想在我的情节中添加分位数回归曲线(0.025,0.05,0.5,0.95,0.975)
。
顺便说一下,这就是我创建散点图的方法:
attach(E) ## E is the name I gave to my data
## Change Group to factor so that may work with levels in the legend
Group<-as.character(Group)
Group<-as.factor(Group)
## Make the colored scatter-plot
mycolors = c('red','orange','green','cornflowerblue')
plot(Time,Concentration,main="Template",xlab="Time",ylab="Concentration",pch=18,col=mycolors[Group])
## This also works identically
## with(E,plot(Time,Concentration,col=mycolors[Group],main="Template",xlab="Time",ylab="Concentration",pch=18))
## Use identify to identify each point by group number (to check)
## identify(Time,Concentration,col=mycolors[Group],labels=Group)
## Press Esc or press Stop to stop identify function
## Create legend
## Use locator(n=1,type="o") to find the point to align top left of legend box
legend('topright',legend=levels(Group),col=mycolors,pch=18,title='Group')
因为我在这里创建的数据是我的较大数据的一小部分,所以它看起来可能近似为矩形夸张。但我不想在我的独立变量和因变量之间调用数学关系。
我认为nlrq
包中的quantreg
可能就是答案,但是当我不知道我的变量之间的关系时,我不明白如何使用该函数。
我从一篇科学文章中找到了这个图,我想要做的就是同一种图:
再次感谢您的帮助!
更新
Test.csv 有人指出我的样本数据不可复制。以下是我的数据示例。
library(evd)
qcbvnonpar(p=c(0.025,0.05,0.5,0.95,0.975),cbind(TAD,DV),epmar=T,plot=F,add=T)
我也尝试过qcbvnonpar :: evd,但曲线似乎不太平滑。
答案 0 :(得分:8)
也许看看quantreg ::: rqss来平滑样条曲线和分位数回归。 对不起那些不太好的示例数据抱歉:
set.seed(1234)
period <- 100
x <- 1:100
y <- sin(2*pi*x/period) + runif(length(x),-1,1)
require(quantreg)
mod <- rqss(y ~ qss(x))
mod2 <- rqss(y ~ qss(x), tau=0.75)
mod3 <- rqss(y ~ qss(x), tau=0.25)
plot(x, y)
lines(x[-1], mod$coef[1] + mod$coef[-1], col = 'red')
lines(x[-1], mod2$coef[1] + mod2$coef[-1], col = 'green')
lines(x[-1], mod3$coef[1] + mod3$coef[-1], col = 'green')
答案 1 :(得分:5)
我过去经常与rqss
斗争,我的问题几乎总是与点的排序有关。
您可以在不同的时间点进行多次测量,这就是为什么您的长度不同。这对我有用:
dat <- read.csv("~/Downloads/Test.csv")
library(quantreg)
dat <- plyr::arrange(dat,Time)
fit<-rqss(Concentration~qss(Time,constraint="N"),tau=0.5,data = dat)
with(dat,plot(Time,Concentration))
lines(unique(dat$Time)[-1],fit$coef[1] + fit$coef[-1])
在拟合模型之前对数据框进行排序似乎是必要的。
答案 2 :(得分:2)
如果您需要ggplot2
图片...
我将这个例子建立在@EDi的基础上。我增加了x
和y
,以便分位数线不那么晃动。由于这种增加,我需要在某些调用中使用unique(x)
代替x
。
以下是修改后的设置:
set.seed(1234)
period <- 100
x <- rep(1:100,each=100)
y <- 1*sin(2*pi*x/period) + runif(length(x),-1,1)
require(quantreg)
mod <- rqss(y ~ qss(x))
mod2 <- rqss(y ~ qss(x), tau=0.75)
mod3 <- rqss(y ~ qss(x), tau=0.25)
以下是两个图:
# @EDi's base graphics example
plot(x, y)
lines(unique(x)[-1], mod$coef[1] + mod$coef[-1], col = 'red')
lines(unique(x)[-1], mod2$coef[1] + mod2$coef[-1], col = 'green')
lines(unique(x)[-1], mod3$coef[1] + mod3$coef[-1], col = 'green')
# @swihart's ggplot2 example:
## get into dataset so that ggplot2 can have some fun:
qrdf <- data.table(x = unique(x)[-1],
median = mod$coef[1] + mod$coef[-1],
qupp = mod2$coef[1] + mod2$coef[-1],
qlow = mod3$coef[1] + mod3$coef[-1]
)
line_size = 2
ggplot() +
geom_point(aes(x=x, y=y),
color="black", alpha=0.5) +
## quantiles:
geom_line(data=qrdf,aes(x=x, y=median),
color="red", alpha=0.7, size=line_size) +
geom_line(data=qrdf,aes(x=x, y=qupp),
color="blue", alpha=0.7, size=line_size, lty=1) +
geom_line(data=qrdf,aes(x=x, y=qlow),
color="blue", alpha=0.7, size=line_size, lty=1)