![](/img/trans.png)
[英]Predicting out future values using OLS regression (Python, StatsModels, Pandas)
[英]Predicting the future with pandas and statsmodels
我需要做的是用这些“要求”绘制未来温度:“假设温度大致是二氧化碳排放的线性函数,从最近的数据点估计线性函数的系数(使用过去的2很好,就像使用如果你想要更彻底的话,过去10个左右。)此外,假设二氧化碳排放量的增长率将与现在相同(即2016年的二氧化碳排放量比2015年多X吨,2017年的二氧化碳排放量将比2016年增加X吨)“。
我有2个数据集,一个是每年每个月的温度,另一个是每年的碳水平。
(发布合并并缩短了一个,因为它不是那么大,但如果它更有帮助看到它们未经修改然后我也可以发布它,你可以看到它如何完成下面我发布我的代码)
Year Carbon June
2000 6727 20.386
2001 6886 20.445
2002 6946 20.662
2003 7367 20.343
2004 7735 20.242
2005 8025 20.720
2006 8307 20.994
2007 8488 20.661
2008 8738 20.657
2009 8641 20.548
2010 9137 21.027
2011 9508 20.915
2012 9671 21.172
到目前为止我所做的是将两个数据集合并在一起,然后尝试预测未来几年的温度,我将其限制在2000年至2012年,只是为了简化它并确保两个表具有相同的长度因为一张桌子比另一张桌子长。 我对python和整体编码很新,我不知道如何做到这一点,下面你可以看到我试过的东西:
data1 = pd.read_csv("co2.csv", sep=',')
data2 = pd.read_csv("temperature.csv", sep=',')
data1 = data1.set_index('Year')
data2 = data2.set_index('Year')
data3 = data1.loc["2000":"2012"]
data4 = data2.loc["2000":"2012"]
data4 = data4.loc[:, "June":"June"]
data5 = pd.merge(data3,data4, how= 'left', left_index =True , right_index=True)
x = data5["Carbon"]
y = data5["June"]
model = sm.OLS(y,x).fit()
prediction = model.predict(x)
prediction.plot()
plt.show()
方法OLS.predict
不将x
作为参数而是模型参数(最终是外生数据)。 此外,您必须向X添加常量,否则它会强制线性回归通过原点。 这是一个例子:
import pandas as pd
import statsmodels.api as sm
import matplotlib.pyplot as plt
from StringIO import StringIO
data = StringIO("""
Year Carbon June
2000 6727 20.386
2001 6886 20.445
2002 6946 20.662
2003 7367 20.343
2004 7735 20.242
2005 8025 20.720
2006 8307 20.994
2007 8488 20.661
2008 8738 20.657
2009 8641 20.548
2010 9137 21.027
2011 9508 20.915
2012 9671 21.172
""")
# Model training
df = pd.read_table(data, index_col=0, sep='\s+')
Y_train = df['June']
X_train = df['Carbon']
X_train = sm.add_constant(X_train) # add this to your code
model = sm.OLS(Y_train, X_train)
results = model.fit()
# Prediction of future values
future_carbon = range(9700, 10000, 50)
X_pred = pd.DataFrame(data=future_carbon, columns=['Carbon'])
X_pred = sm.add_constant(X_pred)
prediction = model.predict(results.params, X_pred)
# Plot
plt.figure()
plt.plot(X_train['Carbon'], model.predict(results.params), '-r', label='Linear model')
plt.plot(X_pred['Carbon'], prediction, '--r', label='Linear prediction')
plt.scatter(df['Carbon'], df['June'], label='data')
plt.xlabel('Carbon')
plt.ylabel('June temperature')
plt.legend()
plt.show()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.