我生成了一些与log(x)呈线性关系的数据y。我将y和x放在一个数据框中,按x的值排序,拟合模型,然后尝试绘制数据点和拟合线。然而,我得到的是一条非常凌乱的装配线。我一定做错了。这可以在R中轻松完成,但是使用statsmodels ......我仍然无法弄清楚为什么。需要帮助。提前致谢。
import numpy as np
import pandas as pd
import statsmodels.formula.api as smf
import matplotlib.pyplot as plt
%matplotlib inline
B0 = 3
B1 = 0.5
X = np.random.rand(1000)
epsilon = np.random.normal(0,0.1, size=1000)
y=B0 + B1*np.log(X)+epsilon
df1 = pd.DataFrame({'Y':y, 'X':X})
df1.sort_values('X', inplace=True)
model1 = smf.ols ('Y~np.log(X)', data=df1).fit()
plt.scatter(df1.X, df1.Y)
plt.plot(df1.X, model1.predict(np.log(df1.X)), 'r-')
这就是我得到的: