2010-09-29 52 views
67

Tôi đã đọc câu trả lời cho question này và họ là khá hữu ích, nhưng tôi cần sự giúp đỡ đặc biệt là ở R.Lắp mô hình đa thức vào dữ liệu trong R

Tôi có một ví dụ tập dữ liệu vào R như sau:

x <- c(32,64,96,118,126,144,152.5,158) 
y <- c(99.5,104.8,108.5,100,86,64,35.3,15) 

Tôi muốn mô hình phù hợp với những dữ liệu này sao cho y = f(x). Tôi muốn nó là một mô hình đa thức bậc 3.

Tôi có thể làm điều đó như thế nào trong R?

Ngoài ra, R có thể giúp tôi tìm mô hình phù hợp nhất không?

Trả lời

71

Để có được một đa thức bậc ba trong x (x^3), bạn có thể làm

lm(y ~ x + I(x^2) + I(x^3)) 

hoặc

lm(y ~ poly(x, 3, raw=TRUE)) 

Bạn có thể phù hợp với một trật tự thứ 10 đa thức và nhận được một sự phù hợp gần như hoàn hảo , nhưng phải không?

EDIT: nhiều (x, 3) có lẽ là lựa chọn tốt hơn (xem @hadley bên dưới).

+6

là tại chỗ trên trong hỏi "nên bạn". Dữ liệu mẫu chỉ có 8 điểm. Mức độ tự do khá thấp ở đây. Dữ liệu thực tế về cuộc sống có thể có nhiều hơn, tất nhiên. –

+1

Cảm ơn câu trả lời của bạn. Điều gì về việc nhận được R để tìm mô hình phù hợp nhất? Có chức năng nào cho việc này không? –

+4

Nó phụ thuộc vào định nghĩa của bạn về "mô hình tốt nhất". Mô hình cung cấp cho bạn R^2 lớn nhất (mà đa thức bậc 10) sẽ không nhất thiết là mô hình "tốt nhất". Các điều khoản trong mô hình của bạn cần phải được lựa chọn hợp lý. Bạn có thể nhận được một sự phù hợp gần như hoàn hảo với rất nhiều tham số nhưng mô hình sẽ không có sức mạnh dự báo và sẽ vô dụng đối với bất cứ điều gì khác ngoài việc vẽ một đường phù hợp nhất thông qua các điểm. – Greg

12

Về câu hỏi 'có thể giúp tôi tìm mô hình phù hợp nhất', có thể có chức năng để làm điều này, giả sử bạn có thể nêu tập hợp các mô hình để kiểm tra, nhưng đây sẽ là cách tiếp cận đầu tiên tốt cho bộ này của n-1 đa thức bậc:

polyfit <- function(i) x <- AIC(lm(y~poly(x,i))) 
as.integer(optimize(polyfit,interval = c(1,length(x)-1))$minimum) 

Ghi chú

  • Hiệu lực của phương pháp này sẽ phụ thuộc vào mục tiêu của bạn, các giả định của optimize()AIC() và nếu AIC là tiêu chí mà bạn muốn sử dụng ,

  • polyfit() có thể không có giá trị tối thiểu. kiểm tra điều này với một cái gì đó như:

    for (i in 2:length(x)-1) print(polyfit(i)) 
    
  • tôi đã sử dụng as.integer() chức năng vì nó không phải là rõ ràng với tôi thế nào tôi sẽ giải thích một đa thức không nguyên.

  • để thử nghiệm một thiết lập tùy ý của các phương trình toán học, xem xét các chương trình 'Eureqa' xem xét bởi Andrew Gelman here

Cập nhật

Cũng thấy stepAIC chức năng (trong gói MASS) để tự động hóa lựa chọn mô hình.

+0

Làm thế nào tôi có thể giao diện Eurequa với R? –

+0

@ adam.888 câu hỏi hay - Tôi không biết câu trả lời nhưng bạn có thể đăng câu trả lời riêng. Điểm cuối cùng đó là một chút tiêu hóa. –

+0

Lưu ý: AIC là tiêu chí thông tin _Akaike, phần thưởng phù hợp chặt chẽ và phạt số lượng lớn hơn các tham số của một mô hình, theo cách được chứng minh là tối ưu trong các giác quan khác nhau. http://en.wikipedia.org/wiki/Akaike_information_criterion –

37

Mô hình nào là "mô hình phù hợp nhất" phụ thuộc vào ý bạn là "tốt nhất". R có các công cụ để giúp, nhưng bạn cần phải cung cấp định nghĩa cho "tốt nhất" để lựa chọn giữa chúng. Hãy xem xét dữ liệu và mã ví dụ sau:

x <- 1:10 
y <- x + c(-0.5,0.5) 

plot(x,y, xlim=c(0,11), ylim=c(-1,12)) 

fit1 <- lm(y~offset(x) -1) 
fit2 <- lm(y~x) 
fit3 <- lm(y~poly(x,3)) 
fit4 <- lm(y~poly(x,9)) 
library(splines) 
fit5 <- lm(y~ns(x, 3)) 
fit6 <- lm(y~ns(x, 9)) 

fit7 <- lm(y ~ x + cos(x*pi)) 

xx <- seq(0,11, length.out=250) 
lines(xx, predict(fit1, data.frame(x=xx)), col='blue') 
lines(xx, predict(fit2, data.frame(x=xx)), col='green') 
lines(xx, predict(fit3, data.frame(x=xx)), col='red') 
lines(xx, predict(fit4, data.frame(x=xx)), col='purple') 
lines(xx, predict(fit5, data.frame(x=xx)), col='orange') 
lines(xx, predict(fit6, data.frame(x=xx)), col='grey') 
lines(xx, predict(fit7, data.frame(x=xx)), col='black') 

Mô hình nào trong số những mô hình đó là tốt nhất?đối số có thể được thực hiện cho bất kỳ người trong số họ (nhưng tôi cho một sẽ không muốn sử dụng một màu tím cho nội suy).

5

Cách dễ nhất để tìm thấy phù hợp nhất trong R là mã mô hình như:

lm.1 <- lm(y ~ x + I(x^2) + I(x^3) + I(x^4) + ...) 

Sau khi sử dụng bước xuống AIC hồi quy

lm.s <- step(lm.1) 
+2

Sử dụng 'I (x^2)', v.v. không cung cấp các đa thức trực giao thích hợp cho phù hợp. –