2012-10-14 65 views
6

Trong Excel, nó khá dễ dàng để phù hợp với đường xu hướng logarit của một tập hợp đường xu hướng nhất định. Chỉ cần nhấp vào thêm đường xu hướng và sau đó chọn "Lôgarít". Chuyển sang R để có thêm sức mạnh, tôi bị mất một chút khi sử dụng chức năng nào để tạo chức năng này.thêm một đường hồi quy lôgarit vào một ô tán xạ (so sánh với Excel)

Để tạo biểu đồ, tôi đã sử dụng ggplot2 với mã sau.

ggplot(data, aes(horizon, success)) + geom_line() + geom_area(alpha=0.3)+ 
    stat_smooth(method='loess') 

Nhưng mã thực hiện điều chỉnh hồi quy đa thức cục bộ dựa trên trung bình nhiều hồi quy tuyến tính nhỏ. Câu hỏi của tôi là liệu có một đường xu hướng log tương tự trong R được sử dụng trong Excel hay không.

Chỉnh sửa: Phương án thay thế mà tôi đang tìm là lấy phương trình log dưới dạng y = (c * ln (x)) + b; có một hàm coef() để nhận 'c' và 'b' không?

Chỉnh sửa2: Vì tôi có danh tiếng hơn, giờ đây tôi có thể đăng thêm một chút về những gì tôi đang cố gắng làm. Hãy để dữ liệu của tôi là:

0.599885189,0.588404133,0.577784156,0.567164179,0.556257176,0.545350172,0.535112897, 
0.52449292,0.51540375,0.507271336,0.499904325,0.498851894,0.498851894,0.87, 
0.4964600,0.495885955,0.494068121,0.492154612,0.490145427,0.486892461,0.482395714, 
0.477229238,0.471010333 

Số liệu trên là y-điểm trong khi x-điểm chỉ đơn giản là số nguyên từ 1: Chiều dài (y) trong increment của 1. Trong Excel: Tôi chỉ có thể vẽ này và thêm một logarit đường xu hướng và kết quả sẽ trông:

enter image description here

với màu đen là nhật ký. Trong R, làm thế nào để làm điều này với các số liệu trên?

+1

Bạn có thể ghi nhật ký dữ liệu bằng cách sử dụng hàm 'log()' và phù hợp với trình làm mịn bằng hàm 'loess()'. Tạo một lô dữ liệu bằng cách sử dụng 'plot()' và thêm các dòng (được làm mịn) vào nó bằng cách sử dụng 'lines()'. –

+0

là nó có thể chỉ nhận được phương trình để thay thế? phương trình trong excel là y = (c * ln (x)) + b – user1234440

Trả lời

7

Bạn có thể dễ dàng xác định các phương pháp làm mịn thay thế (như lm(), tuyến tính bình phương nhỏ nhất phù hợp) và một sự thay thế công thức

library(ggplot2) 
g0 <- ggplot(dat, aes(horizon, success)) + geom_line() + geom_area(alpha=0.3) 
g0 + stat_smooth(method="lm",formula=y~log(x),fill="red") 

Các dải tin cậy được tự động bao gồm: Tôi đã thay đổi màu để hiển thị chúng vì chúng rất hẹp. Bạn có thể sử dụng se=FALSE trong stat_smooth để tắt chúng.

enter image description here

Câu trả lời khác cho bạn thấy làm thế nào để có được các hệ số:

coef(lm(success~log(horizon),data=dat)) 

tôi có thể tưởng tượng bạn có thể tiếp theo muốn thêm phương trình để đồ thị: xem Adding Regression Line Equation and R2 on graph

+0

Có lý do nào bạn sử dụng 'geom_area' ngoài' geom_line'? Tôi không chắc chắn rằng nó làm cho cốt truyện dễ hiểu – mnel

+0

Tôi sao chép nó từ ví dụ của OP: Tôi cho rằng họ đã có nó trong đó bởi vì họ muốn nó, nhưng tôi đoán có thể là họ chỉ sao chép nó từ một ví dụ mình .. . –

1

Tôi khá chắc chắn một đơn giản + scale_y_log10() sẽ giúp bạn có được những gì bạn muốn. Số liệu thống kê GGPlot được tính toán sau khi chuyển đổi, vì vậy, dấu ngoặc kép() sau đó sẽ được tính toán trên dữ liệu nhật ký được chuyển đổi.

10

Tôi thích sử dụng đồ họa cơ sở thay vì ggplot2:

#some data with a linear model 
x <- 1:20 
set.seed(1) 
y <- 3*log(x)+5+rnorm(20) 

#plot data 
plot(y~x) 

#fit log model 
fit <- lm(y~log(x)) 
#look at result and statistics 
summary(fit) 
#extract coefficients only 
coef(fit) 

#plot fit with confidence band 
matlines(x=seq(from=1,to=20,length.out=1000), 
     y=predict(fit,newdata=list(x=seq(from=1,to=20,length.out=1000)), 
        interval="confidence")) 

enter image description here

#some data with a non-linear model 
set.seed(1) 
y <- log(0.1*x)+rnorm(20,sd=0.1) 

#plot data 
plot(y~x) 

#fit log model 
fit <- nls(y~log(a*x),start=list(a=0.2)) 
#look at result and statistics 
summary(fit) 

#plot fit 
lines(seq(from=1,to=20,length.out=1000), 
     predict(fit,newdata=list(x=seq(from=1,to=20,length.out=1000)))) 
1

tôi chỉ viết một số blog post here mô tả cách khớp đường cong loga của Excel phù hợp chính xác.Nub của cách tiếp cận xoay quanh chức năng lm():

# Set x and data.to.fit to the independent and dependent variables 
data.to.fit <- c(0.5998,0.5884,0.5777,0.5671,0.5562,0.5453,0.5351,0.524,0.515,0.5072,0.4999,0.4988,0.4988,0.4973,0.49,0.4958,0.4940,0.4921,0.4901,0.4868,0.4823,0.4772,0.4710) 
x <- c(seq(1, length(data.to.fit))) 
data.set <- data.frame(x, data.to.fit) 

# Perform a logarithmic fit to the data set 
log.fit <- lm(data.to.fit~log(x), data=data.set) 

# Print out the intercept, log(x) parameters, R-squared values, etc. 
summary(log.fit) 

# Plot the original data set 
plot(data.set) 

# Add the log.fit line with confidence intervals 
matlines(predict(log.fit, data.frame(x=x), interval="confidence")) 

Hy vọng điều đó sẽ hữu ích.

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