用jupyter模拟样本量等于100的数据,模拟200次
时间: 2024-03-16 19:43:14 浏览: 160
Intro-to-Data-Science:在Jupyter Notebook中使用Python进行数据科学入门课程
以下是使用Python在Jupyter Notebook中模拟样本量等于100的数据,并进行200次模拟的代码:
```python
import pandas as pd
import numpy as np
import statsmodels.api as sm
# 设置随机数种子,确保结果可重复
np.random.seed(123)
# 初始化结果列表
results = []
# 进行200次模拟
for i in range(200):
# 模拟自变量
X = pd.DataFrame(np.random.normal(size=(100, 8)), columns=['x1', 'x2', 'x3', 'x4', 'x5', 'x6', 'x7', 'x8'])
# 计算协方差矩阵
cov = np.zeros((8, 8))
for i in range(8):
for j in range(i, 8):
cov[i, j] = cov[j, i] = 0.5 ** abs(i - j)
# 模拟误差项
epsilon = np.random.normal(size=100, scale=0.5)
# 模拟因变量
y = 1 + X.iloc[:, 0] - X.iloc[:, 2] + X.iloc[:, 4] - X.iloc[:, 6] + epsilon
# 添加常数列
X = sm.add_constant(X)
# 初始化逐步回归模型
model = sm.OLS(y, X).fit()
# 逐步回归
while True:
# 计算当前模型的R-squared
rsq = model.rsquared_adj
# 记录当前模型的变量个数
num_vars = len(model.params) - 1
# 找到当前R-squared下的最佳变量
best_var = None
best_pval = np.inf
for var in X.columns[1:]:
# 如果该变量已经在模型中,则跳过
if var in model.params.index:
continue
# 将该变量加入模型并计算P值
temp_model = sm.OLS(y, X[list(model.params.index) + [var]]).fit()
pval = temp_model.pvalues[var]
# 如果P值更小,则更新最佳变量
if pval < best_pval:
best_var = var
best_pval = pval
# 如果没有更好的变量,则结束逐步回归
if best_var is None:
break
# 将最佳变量加入模型
model = sm.OLS(y, X[list(model.params.index) + [best_var]]).fit()
# 如果新模型的R-squared比原模型更低,则结束逐步回归
if model.rsquared_adj < rsq:
break
# 将模拟结果加入结果列表
results.append({'rsq': model.rsquared_adj, 'num_vars': len(model.params) - 1})
# 输出结果的平均值和标准差
print('R-squared mean:', np.mean([r['rsq'] for r in results]))
print('R-squared std:', np.std([r['rsq'] for r in results]))
print('Variable number mean:', np.mean([r['num_vars'] for r in results]))
print('Variable number std:', np.std([r['num_vars'] for r in results]))
```
以上代码中,我们首先使用numpy库模拟自变量和误差项,然后根据题目给出的模型计算因变量。接着使用statsmodels库中的OLS类进行线性回归,使用add_constant函数添加常数列,使用rsquared_adj属性计算R-squared。在每一轮逐步回归中,我们使用循环遍历每个未加入模型的变量,依次将其加入模型并计算P值,然后选择P值最小的变量作为最佳变量。最后,将最佳变量加入模型,并根据新模型的R-squared值来决定是否继续添加变量。最后,将模拟结果加入结果列表,并计算平均值和标准差。通过多次模拟,我们可以得到更加准确的结果。
阅读全文