Thực hiện hồi quy tuyến tính, nhưng buộc giải pháp phải đi qua một số điểm dữ liệu cụ thể


13

Tôi biết làm thế nào để thực hiện hồi quy tuyến tính trên một tập hợp các điểm. Đó là, tôi biết làm thế nào để phù hợp với một đa thức của sự lựa chọn của tôi, với một tập dữ liệu nhất định, (theo nghĩa LSE). Tuy nhiên, điều tôi không biết, là làm thế nào để buộc giải pháp của tôi đi qua một số điểm cụ thể mà tôi chọn. Tôi đã thấy điều này được thực hiện trước đây, nhưng tôi không thể nhớ thủ tục được gọi là gì, chứ đừng nói đến việc nó được thực hiện như thế nào.

Như một ví dụ rất đơn giản và cụ thể, chúng ta hãy nói rằng tôi có 100 điểm nằm rải rác trên mặt phẳng xy và tôi chọn điều chỉnh một đa thức bất kỳ thứ tự nào thông qua chúng. Tôi biết làm thế nào để thực hiện hồi quy tuyến tính này rất tốt. Tuy nhiên, chúng ta hãy nói rằng tôi muốn 'lực' giải pháp của tôi, phải đi qua, nói rằng, ba điểm dữ liệu của tôi tại x-tọa độ x=3 , x=19 , và , (và tương ứng với tọa độ y của họ tất nhiên).x=89

Thủ tục chung này được gọi là gì, nó được thực hiện như thế nào và có những cạm bẫy cụ thể nào tôi cần phải biết không?

Biên tập:

Tôi muốn nói thêm rằng tôi đang tìm kiếm một cách cụ thể để làm điều này. Tôi đã viết một chương trình thực sự thực hiện hồi quy tuyến tính theo một trong hai cách, đảo ngược trực tiếp ma trận hiệp phương sai hoặc thông qua việc giảm độ dốc. Những gì tôi đang hỏi là, làm thế nào, chính xác, từng bước một, tôi có sửa đổi những gì tôi đã làm không, để tôi buộc giải pháp đa thức phải đi qua các điểm cụ thể?

Cảm ơn!


Tại sao bạn gọi nó là "tuyến tính" nếu bạn đang sử dụng đa thức? Mỗi điểm bạn muốn nó đi qua là một ràng buộc sẽ làm giảm mức độ tự do của bạn. Sau đó, bạn có thể sử dụng một thuật toán tối ưu hóa bị ràng buộc.
tò mò_cat

3
Nó là tuyến tính bởi vì bạn đang tìm các đồng hiệu quả cho sự kết hợp tuyến tính . Ví dụ: nếu bạn muốn điều chỉnh dữ liệu của mình thành một khối, thì bạn đang tìm các hệ số ( c ) của y= =c0+c1x+c2x2+c3x3 .
Spacey

1
@Mohammad: Một cách khác để ước tính những gì bạn muốn là sử dụng giải pháp bình phương có trọng số nhỏ nhất và cho trọng số rất lớn đến các điểm mà bạn muốn đường hồi quy đi qua. Điều này sẽ buộc giải pháp vượt qua rất gần với các điểm mà bạn chọn.
Jason R

@JasonR Rất vui được gặp bạn ở đây. Có WLS thực sự là một ứng cử viên thú vị. Tôi đã đi với câu trả lời của whubers vì yếu tố đa thức thông minh, và bởi vì nó duy trì cấu trúc lỗi độc đáo.
Spacey

Câu trả lời:


18

Mô hình trong câu hỏi có thể được viết

y=p(x)+(xx1)(xxd)(β0+β1x++βpxp)+ε

Trong đó là đa thức bậc d - 1 đi qua các điểm đã định trước ( x 1 , y 1 ) , Câu , ( x d , y d )ε là ngẫu nhiên. (Sử dụng Lagrange nội suy đa thức .) Viết ( x - x 1 ) ( x - x d ) = rp(xi)=yid1(x1,y1),,(xd,yd)ε cho phép chúng tôi viết lại mô hình này như(xx1)(xxd)=r(x)

yp(x)=β0r(x)+β1r(x)x+β2r(x)x2++βpr(x)xp+ε,

mà là một OLS tiêu chuẩn vấn đề nhiều hồi quy với cấu trúc lỗi tương tự như bản gốc nơi các biến độc lập là lượng r ( x ) x i , i = 0 , 1 , ... , p . Đơn giản chỉ cần tính toán các biến này và chạy phần mềm hồi quy quen thuộc của bạn , đảm bảo ngăn chặn nó bao gồm một thuật ngữ không đổi. Những cảnh báo thông thường về hồi quy mà không áp dụng một thuật ngữ liên tục; đặc biệt, R 2 có thể cao một cách giả tạo; các giải thích thông thường không áp dụng.p+1r(x)xi, i=0,1,,pR2

(Trong thực tế, hồi quy qua gốc là một trường hợp đặc biệt của xây dựng này, nơi , ( x 1 , y 1 ) = ( 0 , 0 ) , và p ( x ) = 0 , do đó mô hình này là y = β 0 x + + β p x p + 1 + ε . )d=1(x1,y1)=(0,0)p(x)=0y=β0x++βpxp+1+ε.


Dưới đây là một ví dụ hoạt động (trong R)

# Generate some data that *do* pass through three points (up to random error).
x <- 1:24
f <- function(x) ( (x-2)*(x-12) + (x-2)*(x-23) + (x-12)*(x-23) )  / 100
y0 <-(x-2) * (x-12) * (x-23) * (1 + x - (x/24)^2) / 10^4  + f(x)
set.seed(17)
eps <- rnorm(length(y0), mean=0, 1/2)
y <- y0 + eps
data <- data.frame(x,y)

# Plot the data and the three special points.
plot(data)
points(cbind(c(2,12,23), f(c(2,12,23))), pch=19, col="Red", cex=1.5)

# For comparison, conduct unconstrained polynomial regression
data$x2 <- x^2
data$x3 <- x^3
data$x4 <- x^4

fit0 <- lm(y ~ x + x2 + x3 + x4, data=data)
lines(predict(fit0), lty=2, lwd=2)

# Conduct the constrained regressions
data$y1 <- y - f(x)
data$r <- (x-2)*(x-12)*(x-23)
data$z0 <- data$r
data$z1 <- data$r * x
data$z2 <- data$r * x^2

fit <- lm(y1 ~ z0 + z1 + z2 - 1, data=data)
lines(predict(fit) + f(x), col="Red", lwd=2)

Âm mưu

Ba điểm cố định được hiển thị bằng màu đỏ đặc - chúng không phải là một phần của dữ liệu. Phù hợp với bình phương tối thiểu bậc bốn không giới hạn bậc bốn được hiển thị với một đường chấm màu đen (nó có năm tham số); sự phù hợp bị ràng buộc (theo thứ tự năm, nhưng chỉ có ba tham số miễn phí) được hiển thị với dòng màu đỏ.

Kiểm tra đầu ra bình phương nhỏ nhất ( summary(fit0)summary(fit)) có thể mang tính hướng dẫn - Tôi để việc này cho người đọc quan tâm.


whuber, điều này thật thú vị ... Tôi sẽ nói dối nếu tôi nói tôi hoàn toàn hiểu nó, nhưng tôi đang tiêu hóa nó khi chúng ta nói chuyện. Nếu tôi hiểu đúng, ở đây tôi về cơ bản giải quyết cho s như thường lệ, nhưng họ đang được nhân với r ( x ) x i , thay vì chỉ x i s như trước đây, đúng không? Nếu đó là chính xác, thì làm thế nào bạn tính toán r ( x ) chính xác? Cảm ơn bạn. βr(x)xixir(x)
Spacey

Tôi đã thêm một ví dụ hoạt động, Mohammad.
whuber

Ôi tuyệt vời. Tôi sẽ nghiên cứu nó. Sử dụng ví dụ của bạn, vẫn có thể buộc poly đi qua các điểm một phần của dữ liệu, phải không?
Spacey

Hoàn toàn có thể được thực hiện: nhưng hãy thận trọng gấp đôi về việc diễn giải các giá trị p hoặc bất kỳ số liệu thống kê nào khác, bởi vì bây giờ các ràng buộc của bạn dựa trên chính dữ liệu.
whuber

Bài viết của bạn đã cho tôi đêm qua. Tôi đã tự dạy mình LIP. (LIP rất thú vị. Nó giống như phân tách Fourier nhưng với polys).
Spacey

9

(xi,yi)xixyiy

Nếu bạn muốn buộc một đường thẳng đi qua hai điểm trong mặt phẳng XY, điều đó cũng khá dễ thực hiện. Bất kỳ hai điểm có thể phù hợp với một dòng. Bạn có thể sử dụng công thức độ dốc điểm để tính độ dốc của mình, sau đó sử dụng một trong các điểm, độ dốc và phương trình của đường thẳng để tìm đường chặn.

XX2


Tôi cảm thấy bắt buộc phải đề cập đến vào thời điểm này, tuy nhiên, điều này có thể không phải là một điều tuyệt vời để làm (trừ khi lý thuyết của bạn cung cấp lý do rất chắc chắn để làm như vậy). Bạn cũng có thể muốn xem xét hồi quy Bayes , nơi bạn có thể cho phép mô hình của mình tìm thấy sự kết hợp tốt nhất của thông tin trong dữ liệu của bạn và một số thông tin trước đó (ví dụ, bạn có thể sử dụng để thiên vị mạnh mẽ cho việc chặn của bạn về 0 buộc nó).


1
xTôiyTôiđến từng điểm trước và sau một khối, nhưng tôi không hiểu làm thế nào để thực hiện chính xác khối đó. Đối với trường hợp 2 điểm, tôi e rằng tôi không hiểu gì về việc phải làm gì ở đó. Cảm ơn.
Spacey

2
Mặc dù ném thêm ba điểm và đánh giá chúng ( câu trả lời của a la Glen_b) có thể tạo ra sự phù hợp như vậy, nhưng việc diễn giải bất kỳ đầu ra thống kê nào cũng có vấn đề: sẽ cần một số điều chỉnh.
whuber

6

Để thêm một chút thông tin vào phạm vi bảo hiểm tuyệt vời của trường hợp tuyến tính, trong trường hợp đa thức bậc cao, có một số cách bạn có thể thực hiện chính xác hoặc xấp xỉ (nhưng chính xác như bạn cần).

Đầu tiên, lưu ý rằng mức độ tự do cho đa thức (hoặc thực sự của bất kỳ hàm được trang bị nào) phải lớn nhất bằng số điểm "đã biết". Nếu mức độ tự do là bằng nhau, bạn hoàn toàn không cần dữ liệu, vì đường cong hoàn toàn được xác định. Nếu có nhiều điểm 'đã biết' hơn, bạn không thể giải quyết nó (trừ khi tất cả chúng đều nằm trên chính xác cùng một đa thức của mức độ được chỉ định trong trường hợp bất kỳ tập hợp con có kích thước phù hợp nào cũng đủ). Từ đây trở đi, tôi sẽ chỉ nói về khi đa thức có nhiều df hơn các điểm đã biết (chẳng hạn như một khối - với 4df - và ba điểm đã biết, để khối không bị quá hạn bởi các điểm đã biết và cũng không hoàn toàn được xác định bởi chúng) .

1) "đường cong phải đi qua điểm này" là một ràng buộc tuyến tính trên các tham số, dẫn đến ước lượng bị ràng buộc hoặc bình phương tối thiểu bị ràng buộc (mặc dù cả hai thuật ngữ có thể bao gồm những thứ khác ngoài ràng buộc tuyến tính, chẳng hạn như ràng buộc tích cực). Bạn có thể kết hợp các ràng buộc tuyến tính bằng một trong hai

  (a) truy xuất tham số hóa để bao gồm ngầm định từng ràng buộc dẫn đến một mô hình bậc thấp hơn.

  (b) sử dụng các công cụ tiêu chuẩn có thể kết hợp các ràng buộc tuyến tính trên các tham số của một hình vuông nhỏ nhất phù hợp. (thường thông qua một cái gì đó giống như công thức được đưa ra ở liên kết trên)

2) Một cách khác là thông qua hồi quy có trọng số. Nếu bạn cho các điểm đã biết đủ trọng lượng lớn, về cơ bản bạn có thể có được sự phù hợp tương tự như trong (1). Điều này thường được thực hiện dễ dàng, có thể nhanh hơn đáng kể so với việc xác định lại thông số và có thể được thực hiện trong các gói không cung cấp sự phù hợp hạn chế.

Áp dụng tất cả các cảnh báo của @ gung


Glen_b, tôi đã không xem xét hồi quy có trọng số. Nó có thể là cách để đi về nó. Tôi đã đặt nó trong danh sách để làm. Tôi tin rằng tôi có thể dạy bản thân mình mà không có sự cố. Về (1), bạn có thể vui lòng mở rộng về khía cạnh tái thông số hóa này không? Ngoài ra, bạn 'gọi' điều này mà tôi đang cố gắng làm gì, nơi tôi buộc đa thức phải đi qua một số điểm nhất định? Một phần của vấn đề là tôi không biết google để làm gì. Nếu tôi biết cái này được gọi là gì, tôi có thể tăng thêm những gì bạn đang nói với tài liệu trực tuyến. Cảm ơn.
Spacey

Xem các chỉnh sửa của tôi ở trên, bao gồm một số thuật ngữ tìm kiếm và liên kết với một vài chi tiết.
Glen_b -Reinstate Monica

2
Hồi quy có trọng số +1 là một ý tưởng hay. Một số điều chỉnh của số liệu thống kê đầu ra, chẳng hạn như ước tính lỗi RMS, có thể cần thiết.
whuber

@whuber +1 thực sự, nếu số liệu thống kê (như S2, F, R2... lỗi std, v.v.) chỉ nhằm mục đích liên quan đến các điểm không được biết đến (có thể là những gì người ta muốn), ngoài các ước tính tham số và các giá trị được trang bị, các số liệu thống kê thô sắp ra sẽ gần như sai . Ban đầu tôi đã gõ một câu liên quan đến điều đó nhưng dường như tôi đã xóa nó trước khi đăng; điều quan trọng là phải đề cập đến nó.
Glen_b -Reinstate Monica

Cảm ơn câu trả lời của bạn Glen_b, mặc dù tôi đã chấp nhận @whuber, tôi vẫn học được rất nhiều từ bạn.
Spacey
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.