Python Statsmodels 回归分析及3D可视化 - Cobb-Douglas 函数
import statsmodels.api as sm
import statsmodels.formula.api as smf
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from mpl_toolkits import mplot3d
# 以上导入绘图matplotlib,数据处理numpy,pandas,拟合statsmodels各个模块
data = pd.read_csv('cobb_douglas.csv')# 下载数据
model = smf.ols('lny ~ lnk + lnl', data=data)# 以lny为响应变量,lnk与lnl为特征变量进行二元回归
results = model.fit()
print(results.params) # 输出回归结果
# 以下为绘图
xx = np.linspace(data.lnk.min(), data.lnk.max(), 100)
yy = np.linspace(data.lnl.min(), data.lnl.max(), 100)
XX, YY = np.meshgrid(xx, yy)
ZZ = results.params[0] + XX * results.params[1] + YY * results.params[2]
fig = plt.figure()
ax = plt.axes(projection='3d')
ax.plot_surface(XX, YY, ZZ, rstride=8, cstride=8, alpha=0.4, cmap='pink_r')
ax.scatter(data.lnk, data.lnl, data.lny, c='slateblue')
ax.set_xlabel('lnk')
ax.set_ylabel('lnl')
ax.set_zlabel('lny')
ax.set_title('图1.1 lny 对于 lnk 与 lnl 的回归', fontdict=None, loc='center', pad=None)
ax.legend(['lny = 0.233054*lnk + 0.807278*lnl - 0.177310'])
plt.show()
错误分析:
代码中出现AttributeError: 'tuple' object has no attribute 'size'错误,原因是ax.legend函数中传入的参数是一个列表,而不是一个字符串。
解决方法:
将以下代码:
ax.legend(['lny = 0.233054*lnk + 0.807278*lnl - 0.177310'])
改为:
ax.legend('lny = 0.233054*lnk + 0.807278*lnl - 0.177310')
即可解决该错误。
原文地址: https://www.cveoy.top/t/topic/pfLb 著作权归作者所有。请勿转载和采集!