Tôi muốn biết cách hạn chế các thông số nhất định trong lm()
để có hệ số dương. Có một vài gói hoặc chức năng (ví dụ: display
) có thể làm cho tất cả các hệ số và chặn tích cực.R - Buộc tham số nhất định có hệ số dương trong lm()
Ví dụ: trong ví dụ này, tôi muốn chỉ buộc x1
và x2
có hệ số dương.
x1=c(NA,rnorm(99)*10)
x2=c(NA,NA,rnorm(98)*10)
x3=rnorm(100)*10
y=sin(x1)+cos(x2)-x3+rnorm(100)
lm(y~x1+x2+x3)
Call:
lm(formula = y ~ x1 + x2 + x3)
Coefficients:
(Intercept) x1 x2 x3
-0.06278 0.02261 -0.02233 -0.99626
Tôi đã thử chức năng nnnpls()
trong gói 'nnls'
, nó có thể kiểm soát các dấu hiệu hệ số một cách dễ dàng. Thật không may tôi không thể sử dụng nó do các vấn đề với NA trong dữ liệu vì chức năng này không cho phép NA.
Tôi thấy chức năng glmc()
có thể được sử dụng để áp dụng các ràng buộc nhưng tôi không thể làm cho nó hoạt động.
Ai đó có thể cho tôi biết tôi nên làm gì?
Cảm ơn, bạn đã nói "Nếu bạn hạn chế các hệ số x1 và x2 là dương, chúng trở thành 0 (như mong đợi)", nhưng tại sao lại là? Ngoài ra, trong hàm bị phạt(), có vẻ như bạn phải xác định từng thông số là dương hoặc âm, bạn có thể làm cho chúng trở nên miễn phí (ví dụ: lambda3 có thể dương hoặc âm mà không cần chỉ định). –
Không, 'positive = FALSE' có nghĩa là" miễn phí ". Ngoài ra, nếu số tiền tối thiểu thực tế của tổng các ô vuông xảy ra cho các ước tính âm, thì có khả năng là mức tối thiểu trong không gian tham số bị ràng buộc xảy ra với số không. – Roland
Điều này sẽ thú vị hơn nếu không có gói nào được tham gia; nói rằng người ta sẽ muốn áp dụng nó trong một thiết lập không phải là OLS. –