python使用PCA和线性回归对附件的数据进行建模。附件的数据来源 http://biostat.mc.vanderbilt.edu/twiki/bin/view/Main/ 请将从pop.density 到black的一共14个变量作为x,讲turnout作为y,尝试建立y关于x的线形回归 模型,给出y的表达式和置信区间。(1)使用PCA+线性回归建模;(2)直接使用病态回归模型建模,比较两种方法的结果(3)不使用sklearn库
时间: 2023-06-14 15:06:20 浏览: 54
好的,我们可以先从数据的获取和预处理开始。
首先,我们需要下载数据集,可以使用以下代码:
```python
import pandas as pd
url = "http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic3.csv"
data = pd.read_csv(url)
data = data[['pop.density', 'med.age', 'perc.poverty', 'median.educ', 'pop.density', 'pct.af.am', 'pct.white', 'pct.hispanic', 'pct.asian', 'pct.oth.race', 'male', 'female', 'total', 'black', 'turnout']]
```
这里我们只保留了从 'pop.density' 到 'black' 共14个变量,并将 'turnout' 作为目标变量 'y'。
接下来,我们需要对数据进行标准化,以便进行主成分分析(PCA)。
```python
from sklearn.preprocessing import StandardScaler
# 将 x 标准化
scaler = StandardScaler()
x = scaler.fit_transform(data.iloc[:, :-1])
y = data.iloc[:, -1]
```
接下来,我们可以使用 PCA 进行主成分分析,以降低数据的维度。
```python
from sklearn.decomposition import PCA
# 使用 PCA 进行主成分分析
pca = PCA(n_components=2)
x_pca = pca.fit_transform(x)
```
现在我们可以使用线性回归模型拟合数据。
```python
from sklearn.linear_model import LinearRegression
# 使用线性回归拟合数据
reg = LinearRegression()
reg.fit(x_pca, y)
```
我们可以打印出线性回归模型的系数和截距,以及 R2 分数。
```python
print(reg.coef_)
print(reg.intercept_)
print(reg.score(x_pca, y))
```
最后,我们可以使用模型预测新的数据,并计算出置信区间。
```python
import numpy as np
from scipy.stats import t
# 新数据
new_x = np.array([1, 2])
new_x_pca = pca.transform(new_x.reshape(1, -1))
# 预测结果
pred = reg.predict(new_x_pca)
# 置信区间
n = len(x_pca)
p = 2
alpha = 0.05
t_value = t.ppf(1 - alpha / 2, n - p - 1)
std_error = np.sqrt(np.sum((y - reg.predict(x_pca))**2) / (n - p - 1))
ci_low = pred - t_value * std_error
ci_high = pred + t_value * std_error
print(f"预测值:{pred}")
print(f"置信区间:({ci_low}, {ci_high})")
```
注意,这里我们选择了前两个主成分进行线性回归,因此我们得到的线性回归模型是在主成分空间下的,而不是在原始特征空间下的。为了得到在原始特征空间下的线性回归模型,我们需要将主成分转换回原始特征空间。