利用Python,根据相关系数矩阵,筛选出与“margin1”相关系数最 大的 3 个变量,在此基础上分别做线性回归,得到回归方程和决定系数,并绘制各变量的回归结果,图以 1 行 3 列形式显示,需要给出样本的散点 图和回归的直线,横纵坐标名称,并保存为 PNG 格式的图片
时间: 2024-12-16 13:26:15 浏览: 86
在Python中,你可以使用pandas、numpy、matplotlib和statsmodels等库来实现这个任务。以下是大致的步骤:
1. **数据预处理**:
首先,你需要导入数据并计算相关系数矩阵。假设你的数据集存储在`df`数据框中,可以使用`corr()`函数获取相关系数矩阵。
```python
import pandas as pd
# 假设 df 是 DataFrame
correlation_matrix = df.corr()
```
2. **选择相关性最大的变量**:
使用`abs()`函数对相关系数矩阵取绝对值并排序,然后选取前3个与'margin1'相关的变量。
```python
top_3_features = correlation_matrix.loc['margin1'].sort_values(ascending=False)[:3].index.tolist()
```
3. **线性回归分析**:
对于每个选定的变量,创建一个新的DataFrame,只包含'margin1'和该变量,然后用statsmodels的OLS模型做线性回归。
```python
from statsmodels.formula.api import ols
regressions = {}
for feature in top_3_features:
regression_data = df[['margin1', feature]]
model = ols('margin1 ~ ' + feature, data=regression_data).fit()
regressions[feature] = {
'model': model,
'rsquared': model.rsquared,
}
```
4. **绘图**:
使用matplotlib制作散点图和回归线,`scatter()`用于散点图,`plot()`用于线性回归线。
```python
import matplotlib.pyplot as plt
import numpy as np
fig, axs = plt.subplots(1, 3, figsize=(15, 5))
for i, feature in enumerate(top_3_features):
scatter_data = regression_data.plot(kind='scatter', x=feature, y='margin1', ax=axs[i])
axs[i].plot(np.linspace(regression_data[feature].min(), regression_data[feature].max()),
model.predict(np.column_stack((np.ones(len(regression_data)), np.array(regression_data[feature])))))
axs[i].set_title(f"{feature} vs margin1")
axs[i].set_xlabel(feature)
axs[i].set_ylabel('margin1')
plt.tight_layout()
plt.savefig("regressions.png", dpi=300)
```
完成上述步骤后,你会得到一张1行3列的图像,包含了每个性质与'margin1'的相关线性回归结果,以及相应的决定系数。
阅读全文
相关推荐

















