- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
关闭。这个问题不满足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)
最佳答案
你提议做的是一个非常糟糕的主意,以至于我不愿意向你展示如何去做。原因是对于 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)
但要注意:你得到的值没有意义!!!
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/
gnuplot 中拟合函数的正确方法是什么 f(x)有下一个表格吗? f(x) = A*exp(x - B*f(x)) 我尝试使用以下方法将其拟合为任何其他函数: fit f(x) "data.txt
(1)首先要建立数据集 ? 1
测量显示一个信号,其形式类似于具有偏移量和因子的平方根函数。如何找到系数并在一个图中绘制原始数据和拟合曲线? require(ggplot2) require(nlmrt) # may be thi
我想将以下函数拟合到我的数据中: f(x) = Offset+Amplitudesin(FrequencyT+Phase), 或根据 Wikipedia : f(x) = C+alphasin(ome
我正在尝试使用与此工具相同的方法在 C# 中拟合 Akima 样条曲线:https://www.mycurvefit.com/share/4ab90a5f-af5e-435e-9ce4-652c95c
问题:开放层适合 map ,只有在添加特征之后(视觉),我该如何避免这种情况? 我在做这个 第 1 步 - 创建特征 var feature = new ol.Feature({...}); 第 2
我有一个数据变量,其中包含以下内容: [Object { score="2.8", word="Blue"}, Object { score="2.8", word="Red"}, Objec
我正在尝试用中等大小的 numpy float 组来填充森林 In [3]: data.shape Out[3]: (401125, 5) [...] forest = forest.fit(data
我想用洛伦兹函数拟合一些数据,但我发现当我使用不同数量级的参数时拟合会出现问题。 这是我的洛伦兹函数: function [ value ] = lorentz( x,x0,gamma,amp )
我有一些数据,我希望对其进行建模,以便能够在与数据相同的范围内获得相对准确的值。 为此,我使用 polyfit 来拟合 6 阶多项式,由于我的 x 轴值,它建议我将其居中并缩放以获得更准确的拟合。 但
我一直在寻找一种方法来使数据符合 beta 二项分布并估计 alpha 和 beta,类似于 VGAM 库中的 vglm 包的方式。我一直无法找到如何在 python 中执行此操作。有一个 scipy
我将 scipy.optimize.minimize ( https://docs.scipy.org/doc/scipy/reference/tutorial/optimize.html ) 函数与
在过去的几天里,我一直在尝试使用 python 绘制圆形数据,方法是构建一个范围从 0 到 2pi 的圆形直方图并拟合 Von Mises 分布。我真正想要实现的是: 具有拟合 Von-Mises 分
我有一个简单的循环,它在每次迭代中都会创建一个 LSTM(具有相同的参数)并将其拟合到相同的数据。问题是迭代过程中需要越来越多的时间。 batch_size = 10 optimizer = opti
我有一个 Python 系列,我想为其直方图拟合密度。问题:是否有一种巧妙的方法可以使用 np.histogram() 中的值来实现此结果? (请参阅下面的更新) 我目前的问题是,我执行的 kde 拟
我有一个简单的 keras 模型(正常套索线性模型),其中输入被移动到单个“神经元”Dense(1, kernel_regularizer=l1(fdr))(input_layer) 但是权重从这个模
我正在尝试解决 Boston Dataset 上的回归问题在random forest regressor的帮助下.我用的是GridSearchCV用于选择最佳超参数。 问题一 我是否应该将 Grid
使用以下函数,可以在输入点 P 上拟合三次样条: def plotCurve(P): pts = np.vstack([P, P[0]]) x, y = pts.T i = np.aran
我有 python 代码可以生成数字 x、y 和 z 的三元组列表。我想使用 scipy curve_fit 来拟合 z= f(x,y)。这是一些无效的代码 A = [(19,20,24), (10,
我正在尝试从 this answer 中复制代码,但是我在这样做时遇到了问题。我正在使用包 VGAM 中的gumbel 发行版和 fitdistrplus . 做的时候出现问题: fit = fi
我是一名优秀的程序员,十分优秀!