gpt4 book ai didi

python - scipy linregress : computing only scaling/slope parameter with intercept fixed at 0

转载 作者:太空宇宙 更新时间:2023-11-03 13:17:12 25 4
gpt4 key购买 nike

我正在尝试使用 scipy.stats.linregress在最小二乘意义上计算两组数据之间的比例因子。然而,尽管输入的 xi 变量是一个向量而不是 n X 2 矩阵,但它给了我一个截距。

所以,一个简单的代码如下:

from scipy import stats
from numpy import arrange,array

y = [0, 11, 19, 28, 41, 49, 62, 75, 81]
xi = arange(0,9)

scale, intercept, r_value, p_value, std_err = stats.linregress(xi,y)

运行它,我得到的比例为 10.383,但我也得到了 -0.86 的截距。我怎样才能告诉它只适合缩放参数并且截距应保持为零。

最佳答案

如果你想拟合一个模型,y~xi 没有截距,你可能需要考虑使用更多面向统计的包,例如 statsmodels:

In [17]:

import statsmodels.api as sm
import numpy as np
y = [0, 11, 19, 28, 41, 49, 62, 75, 81]
xi = np.arange(0,9)
model = sm.OLS(y, xi)
results = model.fit()
In [18]:

print results.params
[ 10.23039216]

您可以使用 R 独立验证结果。只是现在您必须明确指定截距为 0:

x <- c(0, 1, 2, 3, 4, 5, 6, 7, 8)
y <- c(0, 11, 19, 28, 41, 49, 62, 75, 81)
model1 <- lm(y~x+0)
summary(model1)

Call:
lm(formula = y ~ x + 0)

Residuals:
Min 1Q Median 3Q Max
-2.6912 -1.4608 0.0000 0.6176 3.3873

Coefficients:
Estimate Std. Error t value Pr(>|t|)
x 10.230 0.129 79.29 7.14e-13 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.843 on 8 degrees of freedom
Multiple R-squared: 0.9987, Adjusted R-squared: 0.9986
F-statistic: 6286 on 1 and 8 DF, p-value: 7.14e-13

引擎盖下的计算很简单:

In [29]:

import scipy.optimize as so
so.fmin(lambda b, x, y: ((b*x-y)**2).sum(), x0=0.1, args=(xi, y))
Optimization terminated successfully.
Current function value: 27.171569
Iterations: 27
Function evaluations: 54
Out[29]:
array([ 10.23039063])

关于python - scipy linregress : computing only scaling/slope parameter with intercept fixed at 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25289122/

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