Python:多元线性回归:statsmodels.formula.api.ols()

Posted

技术标签:

【中文标题】Python:多元线性回归:statsmodels.formula.api.ols()【英文标题】:Python: Multivariate Linear Regression: statsmodels.formula.api.ols() 【发布时间】:2016-10-15 06:01:09 【问题描述】:

我试图从温度、湿度等各种因素中找出总功率的依赖性,并有以下代码:

from functools import reduce
dfs=[df1,df2,df4,df7]
df_final = reduce(lambda left,right:pd.merge(left,right,left_index=True,right_index=True), dfs)
df_final=df_final.drop(["0_x","0_y",0,4],1)
df_final.columns=["OT","HP","H","TP"]


# df_final.shape output is (8790, 4)
import statsmodels.formula.api as smf
lm = smf.ols(formula='TP ~ OT+HP+H',data=df_final).fit()
lm.summary()

输出:

ValueError                                Traceback (most recent call last)
<ipython-input-45-c09782ec7959> in <module>()
  3 lm = smf.ols(formula='TP ~ OT+HP+H',data=df_final).fit()
  4 
----> 5 lm.summary()

C:\Anaconda3\lib\site-packages\statsmodels\regression\linear_model.py in summary(self, yname, xname, title, alpha)
1948             top_left.append(('Covariance Type:', [self.cov_type]))
1949 
-> 1950         top_right = [('R-squared:', ["%#8.3f" % self.rsquared]),
1951                      ('Adj. R-squared:', ["%#8.3f" % self.rsquared_adj]),
1952                      ('F-statistic:', ["%#8.4g" % self.fvalue] ),

C:\Anaconda3\lib\site-packages\statsmodels\tools\decorators.py in __get__(self, obj, type)
 92         if _cachedval is None:
 93             # Call the "fget" function
---> 94             _cachedval = self.fget(obj)
 95             # Set the attribute in obj
 96 #            print("Setting %s in cache to %s" % (name, _cachedval))

C:\Anaconda3\lib\site-packages\statsmodels\regression\linear_model.py in rsquared(self)
1179     def rsquared(self):
1180         if self.k_constant:
-> 1181             return 1 - self.s-s-r/self.centered_tss
1182         else:
1183             return 1 - self.s-s-r/self.uncentered_tss

C:\Anaconda3\lib\site-packages\statsmodels\tools\decorators.py in __get__(self, obj, type)
 92         if _cachedval is None:
 93             # Call the "fget" function
 ---> 94             _cachedval = self.fget(obj)
 95             # Set the attribute in obj
 96 #            print("Setting %s in cache to %s" % (name, _cachedval))

C:\Anaconda3\lib\site-packages\statsmodels\regression\linear_model.py in s-s-r(self)
1151     def s-s-r(self):
1152         wresid = self.wresid
-> 1153         return np.dot(wresid, wresid)
1154 
1155     @cache_readonly

ValueError: shapes (8790,4294) and (8790,4294) not aligned: 4294 (dim 1) != 8790 (dim 0)

我不知道为什么会出现形状不匹配的问题。我什至用较小的数据集尝试过它,但仍然遇到类似的错误。感谢您通读。任何关于如何有效共享我的 ipython 笔记本的 cmets 也会有所帮助。

【问题讨论】:

【参考方案1】:

我的一个数据列是字符串而不是浮点数,因此引发了这个错误。

【讨论】:

以上是关于Python:多元线性回归:statsmodels.formula.api.ols()的主要内容,如果未能解决你的问题,请参考以下文章

Python使用sklearn和statsmodels构建多元线性回归模型(Multiple Linear Regression)并解读

如何使用 statsmodels 获得多元线性回归的标准化(Beta)系数

为 Statsmodels 线性回归格式化数据

超详细多元线性回归模型statsmodels_ols

超详细多元线性回归模型statsmodels_ols

使用 Scikit-learn 与 Statsmodels 进行线性回归