首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >散射图的非参数分位数回归曲线

散射图的非参数分位数回归曲线
EN

Stack Overflow用户
提问于 2013-02-22 01:51:48
回答 3查看 3.7K关注 0票数 14

我用IV=timeDV=concentration创建了一个分散图(多组GRP)。我想将分位数回归曲线(0.025,0.05,0.5,0.95,0.975)添加到我的绘图中。

顺便说一句,这就是我创造散点图时所做的:

代码语言:javascript
复制
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')

因为我在这里创建的数据是我更大数据的一个小子集,所以它看起来可以近似为矩形夸张。但我还不想把我的自变量和因变量称为数学关系。

我认为来自包nlrqquantreg可能是答案,但是当我不知道变量之间的关系时,我不知道如何使用这个函数。

我从一篇科学文章中找到了这幅图,我想要做的是完全相同的图表:

再次感谢你的帮助!

更新

Test.csv我被指出,我的样本数据是不可复制的。这是我的数据样本。

代码语言:javascript
复制
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,但是曲线看起来并不平坦。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-02-28 15:45:35

在过去,我经常与rqss做斗争,我的问题几乎总是与各点的排序有关。

在不同的时间点有多个测量值,这就是为什么你得到了不同的长度。这对我来说很管用:

代码语言:javascript
复制
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])

在拟合模型之前对数据帧进行排序是必要的。

票数 5
EN

Stack Overflow用户

发布于 2013-02-22 15:54:08

也许可以看看quantreg:rqss,用于平滑样条和分位数回归。对于不太好的示例数据,很抱歉:

代码语言:javascript
复制
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')

票数 8
EN

Stack Overflow用户

发布于 2015-10-06 16:30:53

如果你想要ggplot2图形..。

我以@EDi的例子为基础。我增加了xy,这样分位数线就不会那么摇摆了。由于这种增加,我需要在一些调用中使用unique(x)来代替x

以下是修改后的设置:

代码语言:javascript
复制
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)

以下是两个情节:

代码语言:javascript
复制
# @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')

代码语言:javascript
复制
# @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) 

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15015556

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档