Hồi quy tuyến tính với ràng buộc độ dốc


18

Tôi muốn thực hiện một hồi quy tuyến tính rất đơn giản trong R. Công thức đơn giản như . Tuy nhiên, tôi muốn độ dốc ( ) nằm trong một khoảng, giả sử, giữa 1,4 và 1,6.y= =mộtx+bmột

Điều này có thể giải quyết như thế nào?

Câu trả lời:


24

Tôi muốn thực hiện ... hồi quy tuyến tính trong R. ... Tôi muốn độ dốc nằm trong một khoảng, giả sử, trong khoảng từ 1,4 đến 1,6. Điều này có thể giải quyết như thế nào?

(i) Cách đơn giản:

  • phù hợp với hồi quy. Nếu nó nằm trong giới hạn, bạn đã hoàn thành.

  • Nếu nó không nằm trong giới hạn, hãy đặt độ dốc về giới hạn gần nhất và

  • ước tính mức chặn là trung bình của trên tất cả các quan sát.(y-mộtx)

(ii) Cách phức tạp hơn: thực hiện các hình vuông nhỏ nhất với các ràng buộc hộp trên dốc; nhiều thói quen tối ưu thực hiện các ràng buộc hộp, ví dụ nlminb(đi kèm với R).

Chỉnh sửa: thực sự (như được đề cập trong ví dụ dưới đây), trong vanilla R, nlscó thể thực hiện các ràng buộc hộp; như trong ví dụ, điều đó thực sự rất dễ thực hiện.

Bạn có thể sử dụng hồi quy bị ràng buộc trực tiếp hơn; Tôi nghĩ rằng pclschức năng từ gói "mgcv" và nnlschức năng từ gói "nnls" đều làm.

-

Chỉnh sửa để trả lời câu hỏi tiếp theo -

Tôi sẽ chỉ cho bạn cách sử dụng nó với nlminbR, nhưng tôi nhận ra rằng nlsđã sử dụng cùng một thói quen (các thói quen PORT) để thực hiện các bình phương tối thiểu bị ràng buộc, vì vậy ví dụ của tôi dưới đây là trường hợp đó.

mộtb

Đầu tiên, thiết lập một số dữ liệu với độ dốc 'thật' trong phạm vi:

 set.seed(seed=439812L)
 x=runif(35,10,30)
 y = 5.8 + 1.53*x + rnorm(35,s=5)  # population slope is in range
 plot(x,y)
 lm(y~x)

Call:
lm(formula = y ~ x)

Coefficients:
(Intercept)            x  
     12.681        1.217  

... nhưng ước tính LS nằm ngoài nó, chỉ do biến đổi ngẫu nhiên. Vì vậy, hãy sử dụng hồi quy bị ràng buộc trong nls:

 nls(y~a+b*x,algorithm="port",
   start=c(a=0,b=1.5),lower=c(a=-Inf,b=1.4),upper=c(a=Inf,b=1.6))

Nonlinear regression model
  model: y ~ a + b * x
   data: parent.frame()
    a     b 
9.019 1.400 
 residual sum-of-squares: 706.2

Algorithm "port", convergence message: both X-convergence and relative convergence (5)

Như bạn thấy, bạn có một độ dốc ngay trên ranh giới. Nếu bạn chuyển mô hình được trang bị cho summarynó thậm chí sẽ tạo ra các lỗi và giá trị t tiêu chuẩn nhưng tôi không chắc chúng có ý nghĩa / diễn giải như thế nào.

y-bx

 b=1.4
 c(a=mean(y-x*b),b=b)
       a        b 
9.019376 1.400000

Đó là cùng một ước tính ...

Trong ô bên dưới, đường màu xanh là hình vuông nhỏ nhất và đường màu đỏ là hình vuông nhỏ nhất bị ràng buộc:

ràng buộc và dòng LS


Cảm ơn bạn vì câu trả lời này nhưng ... bạn có thể đưa ra một ví dụ bằng cách sử dụng bất kỳ chức năng nào trong số này không?
Iñigo Hernáez Corres

1
+1 Tìm khoảng tin cậy trên các ước tính tham số sẽ là một thách thức trong bất kỳ sự kiện nào.
whuber

@ IñigoHernáezCorres xem bản cập nhật cho câu trả lời của tôi, nơi tôi minh họa bằng cách sử dụng nlsđể làm điều đó.
Glen_b -Reinstate Monica

+1 câu trả lời tuyệt vời với các kết nối trên hai cách thực hiện!
Haitao Du

15

Phương pháp thứ hai của Glen_b, sử dụng bình phương tối thiểu với ràng buộc hộp có thể được thực hiện dễ dàng hơn thông qua hồi quy sườn. Giải pháp cho hồi quy sườn có thể được xem là Lagrangian cho hồi quy với giới hạn về độ lớn của chỉ tiêu của vectơ trọng lượng (và do đó độ dốc của nó). Vì vậy, theo gợi ý của người bán hàng dưới đây, cách tiếp cận sẽ là trừ đi một xu hướng (1.6 + 1.4) / 2 = 1.5 và sau đó áp dụng hồi quy sườn và tăng dần tham số sườn cho đến khi độ lớn của độ dốc nhỏ hơn hoặc bằng 0,1.

Lợi ích của phương pháp này là không yêu cầu các công cụ tối ưu hóa ưa thích, chỉ cần regresson, đã có sẵn trong R (và nhiều gói khác).

Tuy nhiên, giải pháp đơn giản của Glen_b (i) có vẻ hợp lý với tôi (+1)


5
Điều này là thông minh, nhưng bạn có chắc chắn nó sẽ hoạt động như mô tả? Đối với tôi, cách tiếp cận phù hợp sẽ là loại bỏ xu hướng (1.6 + 1.4) / 2 = 1.5 và sau đó kiểm soát tham số sườn cho đến khi giá trị tuyệt đối của độ dốc nhỏ hơn hoặc bằng 0,1.
whuber

1
vâng, đó thực sự là một gợi ý tốt hơn. Phương pháp hồi quy sườn núi thực sự phù hợp hơn nếu hạn chế về độ lớn của độ dốc, nghe có vẻ như là một vấn đề khá kỳ lạ! Câu trả lời của tôi ban đầu được lấy cảm hứng từ nhận xét của Glen_b về các ràng buộc hộp, hồi quy sườn về cơ bản chỉ là một cách dễ dàng hơn để thực hiện các ràng buộc hộp.
Dikran Marsupial

Mặc dù tôi đánh giá cao sự thừa nhận của bạn về những bình luận của tôi, nhưng imho nó làm sao lãng nội dung câu trả lời của bạn. Tất cả chúng ta đều cùng nhau cải thiện công việc của mình ở bất cứ nơi nào chúng ta có thể, vì vậy, đủ để thừa nhận rằng bạn đã hành động theo đề xuất của tôi. Cho rằng bạn xứng đáng với sự gia tăng danh tiếng. Nếu bạn được di chuyển để thực hiện các chỉnh sửa bổ sung, vui lòng xem xét hợp lý hóa văn bản bằng cách xóa tài liệu thừa đó.
whuber

Tài liệu thừa được chỉnh sửa, tuy nhiên tôi thích hợp tác và luôn tìm cách cung cấp cho cộng tác viên tín dụng mà họ xứng đáng và vẫn nghĩ rằng về mặt đạo đức bạn xứng đáng với một nửa số phiếu bầu. ; o)
Dikran Marsupial

10

một

một

Kết quả này sẽ vẫn đưa ra các khoảng đáng tin cậy của các tham số quan tâm (tất nhiên ý nghĩa của các khoảng này sẽ dựa trên tính hợp lý của thông tin trước đó của bạn về độ dốc).


+1, đây là suy nghĩ đầu tiên của tôi. Tôi thích những gợi ý khác, nhưng điều này có vẻ tốt nhất với tôi.
gung - Phục hồi Monica

0

Một cách tiếp cận khác có thể là cải tổ hồi quy của bạn thành một vấn đề tối ưu hóa và sử dụng trình tối ưu hóa. Tôi không chắc liệu nó có thể được điều chỉnh theo cách này không, nhưng tôi đã nghĩ đến câu hỏi này khi tôi đọc blog này đăng trên R tối ưu hóa:

http://zoonek.free.fr/blosxom/R/2012-06-01_Optimization.html

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.