gpt4 book ai didi

r - 获取非负最小二乘 (nnls) 拟合系数的 p 值或置信区间

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

关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。












想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。

2年前关闭。




Improve this question




我正在寻找一种在正约束下进行线性回归的方法,因此遇到了 nnls 方法。但是我想知道如何从 nnls 获得与 lm 对象提供的相同的统计数据。更具体地说,R 平方、akaike 信息标准、p 值和置信区间。

library(arm)
library(nnls)


data = runif(100*4, min = -1, max = 1)
data = matrix(data, ncol = 4)
colnames(data) = c("y", "x1", "x2", "x3")
data = as.data.frame(data)
data$x1 = -data$y

A = as.matrix(data[,c("x1", "x2", "x3")])
b = data$y

test = nnls(A,b)
print(test)

有没有办法在 lm 框架中重新估计,使用偏移量和固定系数不起作用......有没有办法获得这些统计数据?或者另一种方法来创建一个对系数有正约束的 lm 对象?

谢谢
罗曼。

最佳答案

你提议做的是一个非常糟糕的主意,以至于我不愿意向你展示如何去做。原因是对于 OLS,假设残差是具有恒定方差的正态分布,那么参数估计遵循多元 t 分布,我们可以用通常的方式计算置信限和 p 值。

但是,如果我们对相同的数据进行 NNLS,残差将不会正常分布,计算 p 值等的标准技术会产生垃圾。有一些方法可以估计 NNLS 拟合参数的置信限(例如,参见 this reference),但它们是近似的,并且通常依赖于对数据集的相当严格的假设。

另一方面,如果 lm 的一些更基本的功能会很好。对象,例如 predict(...) , coeff(...) , residuals(...)等也适用于 NNLS 拟合的结果。所以实现这一目标的一种方法是使用 nls(...) :仅仅因为模型在参数中是线性的并不意味着您不能使用非线性最小二乘法来查找参数。 nls(...)如果您使用 port,则提供设置参数下限(和上限)的选项。算法。

set.seed(1)   # for reproducible example
data <- as.data.frame(matrix(runif(1e4, min = -1, max = 1),nc=4))
colnames(data) <-c("y", "x1", "x2", "x3")
data$y <- with(data,-10*x1+x2 + rnorm(2500))

A <- as.matrix(data[,c("x1", "x2", "x3")])
b <- data$y
test <- nnls(A,b)
test
# Nonnegative least squares model
# x estimates: 0 1.142601 0
# residual sum-of-squares: 88391
# reason terminated: The solution has been computed sucessfully.

fit <- nls(y~b.1*x1+b.2*x2+b.3*x3,data,algorithm="port",lower=c(0,0,0))
fit
# Nonlinear regression model
# model: y ~ b.1 * x1 + b.2 * x2 + b.3 * x3
# data: data
# b.1 b.2 b.3
# 0.000 1.143 0.000
# residual sum-of-squares: 88391

如您所见,使用 nnls(...) 的结果以及使用 nls(...) 的结果与 lower-c(0,0,0)是相同的。但是 nls(...)产生一个 nls对象,它支持(大部分)与 lm 相同的方法目的。所以你可以写 precict(fit) , coef(fit) , residuals(fit) , AIC(fit)等你也可以写 summary(fit)confint(fit)但要注意:你得到的值没有意义!!!

为了说明关于残差的观点,我们将 OLS 拟合的残差与该数据的残差与 NNLS 拟合的残差进行比较。
par(mfrow=c(1,2),mar=c(3,4,1,1))
qqnorm(residuals(lm(y~.,data)),main="OLS"); qqline(residuals(lm(y~.,data)))
qqnorm(residuals(fit),main="NNLS"); qqline(residuals(fit))



在此数据集中, y 中变异性的随机部分设计为 N(0,1),因此来自 OLS 拟合的残差(左侧的 Q-Q 图)是正常的。但是使用 NNLS 拟合的同一数据集的残差并不正常。这是因为 y的真正依赖在 x1-10 ,但 NNLS 拟合迫使其为 0。因此,非常大的残差(正和负)的比例远高于正态分布的预期。

关于r - 获取非负最小二乘 (nnls) 拟合系数的 p 值或置信区间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27178607/

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