使用PCA和线性回归对附件的数据进行建模。附件的数据来源 http://biostat.mc.vanderbilt.edu/twiki/bin/view/Main/ 请将从pop.density 到black的一共14个变量作为x,讲turnout作为y,尝试建立y关于x的线形回归 模型,给出y的表达式和置信区间。直接 使用病态回归模型建模
时间: 2023-06-14 15:07:34 浏览: 149
建模比赛参赛源码.zip
首先,我们需要下载并导入数据。可以通过以下代码实现:
```python
import pandas as pd
from sklearn.decomposition import PCA
from sklearn.linear_model import LinearRegression
url = 'http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic3.csv'
data = pd.read_csv(url)
x_cols = ['pop.density', 'medianage', 'pctmarried', 'pctwhite', 'pctblack', 'pctasian', 'pcthisp', 'pctothr', 'lowbirthweight', 'smoker', 'infantmortality', 'medianrent', 'pctnotHSgrad', 'pctcollege']
y_col = 'turnout'
X = data[x_cols].values
y = data[y_col].values.reshape(-1, 1)
```
接下来,我们可以使用PCA对X进行降维,以减少变量之间的相关性。可以通过以下代码实现:
```python
pca = PCA(n_components=10)
X_pca = pca.fit_transform(X)
```
现在,我们可以使用线性回归对y关于X_pca进行建模,并计算置信区间。可以通过以下代码实现:
```python
model = LinearRegression()
model.fit(X_pca, y)
y_pred = model.predict(X_pca)
n = len(y)
p = X_pca.shape[1]
alpha = 0.05
t_val = 2.064
sse = ((y - y_pred)**2).sum()
mse = sse / (n - p - 1)
se = mse * np.sqrt(np.diag(np.linalg.inv(X_pca.T @ X_pca)))
t_crit = t_val * se
ci_lower = y_pred - t_crit.reshape(-1, 1)
ci_upper = y_pred + t_crit.reshape(-1, 1)
```
最终,我们得到了y关于X_pca的线性回归模型和置信区间。可以通过以下代码输出:
```python
print('y = {:.4f} + {:.4f}x1 + {:.4f}x2 + ... + {:.4f}x10'.format(model.intercept_[0], *model.coef_.flatten()))
for i in range(n):
print('y_{}: [{:.4f}, {:.4f}]'.format(i, ci_lower[i][0], ci_upper[i][0]))
```
需要注意的是,由于数据集的特殊性,即存在多个缺失值和异常值,使用线性回归建模可能会出现病态回归模型的情况。这时,我们可以考虑使用其他的建模方法,比如岭回归、lasso回归或弹性网络回归等,以减少过拟合的情况。
阅读全文