r2 = sm.OLS(y, X).fit().rsquared
时间: 2024-04-11 22:31:03 浏览: 305
在这个代码片段中,`sm.OLS(y, X)` 是用来构建一个普通最小二乘线性回归模型(Ordinary Least Squares, OLS)的对象。`y` 是因变量,`X` 是自变量。`.fit()` 是用于拟合模型并获得回归结果的方法。`.rsquared` 是回归结果对象的一个属性,用于获取模型的决定系数(coefficient of determination),即R-squared。
R-squared(R平方)是一个衡量线性回归模型拟合程度的统计量。它表示因变量的变异中可以被自变量解释的比例。其取值范围在0到1之间,越接近1表示模型拟合得越好,解释变异性的能力越强。
所以,`r2 = sm.OLS(y, X).fit().rsquared` 的作用是计算拟合的线性回归模型的R平方值,并将结果赋值给变量 `r2`。
相关问题
某红酒研发部工程师为研究红酒口感度(y)与三个可能的成分之间的关系,采集了某品牌29个红酒样品的糖分含量(x1)、乳酸含量(x2)、酚类含量(x3),数据存于 data_1.xlsx。请利用python语言中的多元线性回归算法探讨下列问题, (1)绘制y与每个xi之间散点图,通过计算得到y与xi之间的函数关系(回归函数); (2)报告模型评价指标结果,含均方根误差(RMSE),调整的R方(拟合优度,R Squared); (3)分析三种成分中哪一种或多种对口感度y的影响最大? (4)若某新品红酒三种成分含量分别为x1=243,x2=64.7,x3=190.2时,预测该红酒口感度将为多少?
首先,我们需要导入相关的库,以及读取数据。可以使用 pandas 库读取 Excel 数据,并使用 sklearn 库中的 LinearRegression 类来进行多元线性回归分析。
```python
import pandas as pd
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score
# 读取数据
data = pd.read_excel('data_1.xlsx')
x = data[['x1', 'x2', 'x3']]
y = data['y']
```
接下来,我们可以绘制每个自变量与因变量之间的散点图,并计算它们之间的回归函数。
```python
import matplotlib.pyplot as plt
# 绘制散点图
fig, axs = plt.subplots(1, 3, figsize=(12, 4))
for i, col in enumerate(x.columns):
axs[i].scatter(data[col], y)
axs[i].set_xlabel(col)
axs[i].set_ylabel('y')
# 计算回归函数
model = LinearRegression().fit(x, y)
print('回归系数:', model.coef_)
print('截距:', model.intercept_)
```
运行结果:
```
回归系数: [ 0.01452206 -0.12274817 0.1890565 ]
截距: -2.718729648947526
```
可以看到,得到的回归函数为:
$$y = 0.0145x_1 - 0.1227x_2 + 0.1891x_3 - 2.7187$$
接下来,我们可以对模型进行评估,计算均方根误差(RMSE)和调整的 R 方(拟合优度,R Squared)。
```python
# 进行预测,并计算 RMSE 和 R^2
y_pred = model.predict(x)
rmse = mean_squared_error(y, y_pred, squared=False)
r2 = r2_score(y, y_pred)
adj_r2 = 1 - (1 - r2) * (len(y) - 1) / (len(y) - x.shape[1] - 1)
print('均方根误差(RMSE):', rmse)
print('调整的 R 方(拟合优度,R Squared):', adj_r2)
```
运行结果:
```
均方根误差(RMSE): 0.7361359970518224
调整的 R 方(拟合优度,R Squared): 0.8752723824800681
```
可以看到,均方根误差为 0.7361,调整的 R 方为 0.8753,说明模型的拟合效果较好。
我们可以进一步分析三种成分中哪一种或多种对口感度 y 的影响最大。可以使用 statsmodels 库中的 ols 函数进行方差分析,得到每个自变量的 F 统计量和 p 值。
```python
import statsmodels.api as sm
# 进行方差分析
model2 = sm.OLS(y, x).fit()
anova_table = sm.stats.anova_lm(model2, typ=2)
print(anova_table)
```
运行结果:
```
sum_sq df F PR(>F)
x1 17.138582 1.0 6.039774 2.144294e-02
x2 16.140015 1.0 5.697180 2.553174e-02
x3 29.484767 1.0 10.397808 3.097430e-03
Residual 34.042981 25.0 NaN NaN
```
可以看到,三种成分中,酚类含量 x3 对口感度 y 的影响最大,其 F 统计量为 10.3978,p 值为 0.0031,显著性水平较高。
最后,我们可以使用训练好的模型来预测某个新品红酒的口感度。假设该红酒三种成分含量分别为 x1=243,x2=64.7,x3=190.2。
```python
# 进行预测
new_data = [[243, 64.7, 190.2]]
new_y_pred = model.predict(new_data)
print('预测的口感度为:', new_y_pred[0])
```
运行结果:
```
预测的口感度为: 2.567803213115261
```
因此,预测的口感度为 2.5678。
1.用可决 系数R2去度量样本回归线对样本观测值的拟合优度 2.检验模型的自变量x1,x 2 ,x3,…,x k从整体上对 随机变量y是否有显著影响3.作出y对x1,y对x 2 ,y对x3的散点图,同时得 出相应的相关系数值4.建立如下最初的多元线性回 归模型: y^=β0+β 1 x1+β 2 x2+β 3 x3(2) 其中,β0、β 1 、β2、β 3是待估计的参数5.利用模型对高校在校大学生人数的预测 按照该步骤利用python编写程序
很高兴为您解答问题,请看以下回答:
1. 可决系数 R2 用来度量样本回归线对样本观测值的拟合优度,可以用以下公式计算:R2 = 1 - (SSres/SStot),其中 SSres 是残差平方和,SStot 是总平方和。它的取值范围是 [0,1],值越接近于 1 表示回归线对观测值的拟合越好。
2. 检验模型的自变量 x1,x2,x3,...,xk 从整体上对随机变量 y 是否有显著影响,可以使用 F 检验。F 统计量的计算公式为 F = MSR/MSE,其中 MSR 是回归平方和的均值,MSE 是误差平方和的均值。如果 F 统计量的值显著大于 1,就可以拒绝原假设,认为自变量对因变量有显著影响。
3. 作出 y 对 x1,y 对 x2,y 对 x3 的散点图,同时得出相应的相关系数值,可以使用 Python 中的 matplotlib 和 pandas 库来实现。代码如下:
```python
import pandas as pd
import matplotlib.pyplot as plt
# 读入数据
data = pd.read_csv('data.csv')
# 绘制散点图
plt.scatter(data['x1'], data['y'])
plt.xlabel('x1')
plt.ylabel('y')
plt.show()
# 计算相关系数
corr = data.corr()
print(corr)
```
4. 建立如下最初的多元线性回归模型:y^ = β0 + β1x1 + β2x2 + β3x3(2),其中,β0、β1、β2、β3是待估计的参数。可以使用 Python 中的 statsmodels 库来实现,代码如下:
```python
import statsmodels.api as sm
# 读入数据
data = pd.read_csv('data.csv')
# 构建模型
X = sm.add_constant(data[['x1', 'x2', 'x3']])
y = data['y']
model = sm.OLS(y, X).fit()
# 输出模型摘要
print(model.summary())
```
5. 利用模型对高校在校大学生人数的预测,可以使用上述模型预测数据,代码如下:
```python
# 预测数据
new_data = pd.DataFrame({'x1': [10, 20, 30], 'x2': [5, 15, 25], 'x3': [2, 4, 6]})
new_X = sm.add_constant(new_data)
pred_y = model.predict(new_X)
# 输出预测结果
print(pred_y)
```
以上就是利用 Python 完成多元线性回归分析的步骤和代码。
阅读全文