gpt4 book ai didi

r - 强制某些参数在 lm() 中具有正系数

转载 作者:行者123 更新时间:2023-12-04 08:24:51 24 4
gpt4 key购买 nike

我想知道如何约束lm()中的某些参数具有正系数。有一些包或函数(例如 display )可以使所有系数和截距为正。

例如,在这个例子中,我只想强制 x1x2具有正系数。

    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

我试过函数 nnnpls()包装内 nnls ,它可以轻松控制系数符号。不幸的是,由于 NA 的问题,我无法使用它s 在数据中,因为此功能不允许 NA .

我看到了函数 glmc()可用于应用约束,但我无法让它工作。

有人可以让我知道我该怎么办吗?

最佳答案

You can use package penalized :

set.seed(1)

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)
DF <- data.frame(x1,x2,x3,y)

lm(y~x1+x2+x3, data=DF)
#Call:
#lm(formula = y ~ x1 + x2 + x3, data = DF)
#
#Coefficients:
#(Intercept) x1 x2 x3
# -0.02438 -0.01735 -0.02030 -0.98203

这给出了相同的:
library(penalized)

mod1 <- penalized(y, ~ x1 + x2 + x3, ~1,
lambda1=0, lambda2=0, positive = FALSE, data=na.omit(DF))
coef(mod1)
#(Intercept) x1 x2 x3
#-0.02438357 -0.01734856 -0.02030120 -0.98202831

如果约束 x1 的系数和 x2为正,它们变为零(如预期):
mod2 <- penalized(y, ~ x1 + x2 + x3, ~1, 
lambda1=0, lambda2=0, positive = c(T, T, F), data=na.omit(DF))
coef(mod2)
#(Intercept) x3
#-0.03922266 -0.98011223

关于r - 强制某些参数在 lm() 中具有正系数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27244898/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com