转载:https://blog.csdn.net/m0_37324740/article/details/79529963
数据形式:
目的:
对每一行进行线性拟合,计算斜率和评估斜率的不确定性。
方法:调用python的sklearn包中的线性回归模型计算
关键步骤:将dataframe数据类型转换成矩阵。
一、如果只是单纯计算trend,即斜率
import os
import pandas as pd
import numpy as np
from sklearn.linear_model import LinearRegression
from pandas import DataFrame,Series
from sklearn import linear_model
df = pd.read_excel(r'./1.xlsx')
X = np.array([[2010,2011,2012,2013,2014,2015,2016,2017,2018,2019,2020]]).T
regr = linear_model.LinearRegression()
trend = []
for i in range(0,376):
y = df.iloc[i,:]
model = regr.fit(X,y)
trend.append(model.coef_)
trend1 = []
for i in trend:
for j in i:
trend1.append(j)
trend2 = Series(trend1)
wl_trend = pd.concat([df,trend2],axis=1)
# print(wl_trend)
wl_trend.to_excel('./2.xlsx', index=False)
print('done!')
参考资料:https://blog.csdn.net/m0_37324740/article/details/79529963
二、需要计算评估模型的参数,如斜率标准差、p值、t值等
需要调用import statsmodels.api as sm
trend = []
bse = []
pvalues = []
tvalues = []
for i in range(0,376):
y = df.iloc[i,:]
# model = regr.fit(X,y)
model = sm.OLS(y, X).fit()
trend.append(model.params)#coef_
bse.append(model.bse)
pvalues.append(model.pvalues)
tvalues.append(model.tvalues)
trend1 = []
for i in trend:
for j in i:
trend1.append(j)
trend2 = Series(trend1)
bse1 = []
for i in bse:
for j in i:
bse1.append(j)
bse2 = Series(bse1)
pvalues1 = []
for i in pvalues:
for j in i:
pvalues1.append(j)
pvalues2 = Series(pvalues1)
tvalues1 = []
for i in tvalues:
for j in i:
tvalues1.append(j)
tvalues2 = Series(tvalues1)
wl_trend = pd.concat([df,trend2,bse2,pvalues2,tvalues2],axis=1)
# print(wl_trend)
wl_trend.to_excel('./3.xlsx', index=False)
print('done!')
model = sm.OLS(y, X).fit()
print(model.summary())