python - 如何进行线性回归并获得标准偏差(Python)
问题描述
我有这个非常简单的问题,但不知何故我还没有找到解决方案:
我有两条曲线,A1 = [1,2,3] A2 = [4,5,6]
我想用线性回归将这些曲线拟合到另一条曲线 B1 = [4,5,3] 所以 B1 = a A1 + b A2
这可以通过 sklearn LinearRegression 轻松完成 - 但 sklearn 不会为您提供拟合参数的标准偏差。
我尝试使用 statsmodels ......但不知何故我无法获得正确的格式
import numpy as np
import statsmodels.api as sm
a = np.array([[1, 2, 3], [4, 5, 6]])
b = np.array([4, 5, 3])
ols = sm.OLS(a, b)
错误:ValueError:endog 和 exog 矩阵的大小不同
解决方案
如果你的公式是B1 = aA1 + bA2
,那么数组 b 是你的内生的,而数组 a 是你的外生的。你需要转置你的外生:
ols = sm.OLS(b, a.T)
res = ols.fit()
res.summary()
OLS Regression Results
==============================================================================
Dep. Variable: y R-squared: 0.250
Model: OLS Adj. R-squared: -0.500
Method: Least Squares F-statistic: 0.3333
Date: Sat, 14 Aug 2021 Prob (F-statistic): 0.667
Time: 05:48:08 Log-Likelihood: -3.2171
No. Observations: 3 AIC: 10.43
Df Residuals: 1 BIC: 8.631
Df Model: 1
Covariance Type: nonrobust
==============================================================================
coef std err t P>|t| [0.025 0.975]
------------------------------------------------------------------------------
x1 -2.1667 1.462 -1.481 0.378 -20.749 16.416
x2 1.6667 0.624 2.673 0.228 -6.257 9.590
==============================================================================
Omnibus: nan Durbin-Watson: 3.000
Prob(Omnibus): nan Jarque-Bera (JB): 0.531
Skew: 0.707 Prob(JB): 0.767
Kurtosis: 1.500 Cond. No. 12.3
==============================================================================
来自 sklearn:
from sklearn.linear_model import LinearRegression
reg = LinearRegression(fit_intercept=False).fit(a.T,b)
reg.coef_
array([-2.16666667, 1.66666667])
推荐阅读
- bash - 使用 Guetzli 监视文件夹和压缩 jpeg 的 Automator 脚本
- sql - 在 where 子句中使用 IF 条件
- php - 如何过滤 JOIN 中的记录以处理重复记录?
- perl - 如何将不同行的值推入散列并将其与 foreach 循环进行比较
- excel - 在两个不同的工作簿中添加列和查找值
- java - Spring Boot 2异常堆栈跟踪不完整
- sql - varbinary(16) 上的 ANSI_PADDING 不起作用
- linux - 我尝试通过crontab在linux上调度任务,但出现错误
- python - 无法读取文件?
- sql - 使用 R 分析 SQL 中的数据