2013-02-22 71 views
14

Tôi đã tạo một phân tán (nhiều nhóm GRP) với IV=time, DV=concentration. Tôi muốn thêm các đường cong hồi quy định lượng (0.025,0.05,0.5,0.95,0.975) vào cốt truyện của tôi.Đường cong hồi quy lượng tử không đối xứng để phân tán

Và bằng cách này, đây là những gì tôi đã làm để tạo ra các phân tán âm mưu:

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') 

Bởi vì dữ liệu mà tôi tạo ra ở đây là một nhóm nhỏ của dữ liệu lớn hơn của tôi, nó có thể trông giống như nó có thể được xấp xỉ như một hình chữ nhật cường điệu. Nhưng tôi không muốn gọi một mối quan hệ toán học giữa các biến độc lập và phụ thuộc của tôi.

Tôi nghĩ rằng nlrq từ gói quantreg có thể là câu trả lời, nhưng tôi không hiểu cách sử dụng hàm khi tôi không biết mối quan hệ giữa các biến của mình.

tôi thấy biểu đồ này từ một bài báo khoa học, và tôi muốn làm chính xác cùng một loại biểu đồ: Goal

Một lần nữa, nhờ sự giúp đỡ của bạn!

Cập nhật

Test.csv tôi đã chỉ ra rằng dữ liệu mẫu của tôi là không tái sản xuất. Đây là một mẫu dữ liệu của tôi.

library(evd) 
qcbvnonpar(p=c(0.025,0.05,0.5,0.95,0.975),cbind(TAD,DV),epmar=T,plot=F,add=T) 

Tôi cũng đã thử qcbvnonpar :: evd, nhưng đường cong không có vẻ rất mượt mà.

+8

Nếu bạn không thể cung cấp dữ liệu của riêng bạn, hãy thử tạo tập dữ liệu các số ngẫu nhiên và trình bày sự cố của bạn. Hiển thị cho chúng tôi những gì bạn đã thử. Nó cho chúng ta một cái gì đó để làm việc cũng như là một dấu hiệu của đức tin tốt. –

+0

Ồ. Tôi xin lỗi - tôi sẽ làm một số con số. Nó có thể khá lớn. – shirleywu

+0

Điều này có thể giúp bạn tạo dữ liệu. http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example –

Trả lời

5

Tôi đã trong quá khứ thường xuyên phải vật lộn với rqss và các vấn đề của tôi đã hầu như luôn luôn được liên quan đến trật tự của các điểm.

Bạn có nhiều phép đo tại các thời điểm khác nhau, đó là lý do tại sao bạn nhận được các độ dài khác nhau. Này làm việc cho tôi:

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]) 

enter image description here

Phân loại khung dữ liệu trước khi lắp mô hình xuất hiện cần thiết.

+0

Công trình này! Cảm ơn bạn rất nhiều. Tôi không biết rằng việc đặt hàng có thể là một vấn đề. – shirleywu

8

Có thể có một cái nhìn tại quantreg ::: rqss để làm mịn splines và hồi quy số lượng. Xin lỗi vì ví dụ dữ liệu không quá đẹp:

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') 

enter image description here

+0

+1 cho 'rqss()' - nếu tham số không là những gì được yêu cầu và hình ảnh ví dụ cho thấy đó là một phù hợp dựa trên spline 'rqss()' chắc chắn là nơi đầu tiên tôi nhìn. –

+1

Nó hoạt động rất đẹp với ví dụ của bạn, nhưng tôi không chắc chắn tại sao, tôi vẫn nhận được thông báo 'Lỗi trong xy.coords (x, y): 'x' và 'y' độ dài khác nhau cho tập dữ liệu của mình mặc dù tôi kiểm tra x và y của tôi có cùng n. Vẫn đang khắc phục lỗi: P – shirleywu

+1

Bạn có thể sử dụng thêm một chút dữ liệu của mình không? Dữ liệu ví dụ của bạn từ trên cao rõ ràng là không phù hợp. – EDi

2

Trong trường hợp bạn muốn ggplot2 đồ họa ...

tôi dựa ví dụ này trên của @EDi. Tôi đã tăng xy để các đường định lượng sẽ ít rung lắc hơn. Vì sự gia tăng này, tôi cần sử dụng unique(x) thay cho số x trong một số cuộc gọi.

Đây là sửa đổi thiết lập:

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) 

Dưới đây là hai lô:

# @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') 

enter image description here

# @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) 

enter image description here

Các vấn đề liên quan