OLS回归结果

时间:2020-06-08 15:47:35

标签: python numpy regression statsmodels

我正在尝试对一个大学项目进行“ OLS回归结果”,而我的代码是这样的:

import statsmodels.api as sm
from statsmodels.formula.api import ols
import numpy as np

data=np.loadtxt('file.txt',skiprows=1)
season=data[:nb,0]
tod=data[:nb,1]
obs=data[:nb,2]
pr=data[:nb,3]

data_lm = ols('pr ~ tod + season',data=data).fit()
table = sm.stats.anova_lm(data_lm, typ=2) 
data_lm.summary()
print(table)

它给我这个错误“ PatsyError:错误评估因子:IndexError:仅整数,切片(:),省略号(...),numpy.newaxis(None)和整数或布尔数组是有效索引 pr〜tod)+季节“

我认为错误在于我的数据格式。文本文件包含4个不同的列(季节,tod,obs和pr)。

season:[3., 3., 1., 3., 3., 3., 3., 3., 1., 3., 3., 1., 3., 2., 3., 3., 3.,
       1., 1., 1., 1., 3., 1., 2., 1., 3., 1., 1., 2., 1., 3., 3., 1., 1.,
       1., 2., 3.]

tod:[2., 4., 1., 2., 2., 2., 4., 1., 3., 3., 1., 3., 3., 2., 2., 4., 3.,
       3., 4., 3., 3., 2., 4., 1., 3., 4., 1., 1., 1., 3., 3., 4., 3., 3.,
       4., 4., 4.]

obs:[ 1.,  1.,  1.,  3.,  3.,  3.,  3.,  3.,  4.,  4.,  4.,  5.,  5.,
        5.,  5.,  5.,  6.,  9.,  9., 12., 12., 12., 12., 12., 13., 13.,
       16., 16., 17., 19., 19., 19., 20., 20., 20., 20., 24.]

pr:[0. , 0. , 0. , 0.1, 0.2, 0.2, 0.4, 0.4, 0.5, 0.5, 0.7, 0.7, 0.7,
       0.8, 0.8, 0.8, 0.8, 0.9, 0.9, 1. , 1. , 1.1, 1.1, 1.2, 1.3, 1.4,
       1.4, 1.5, 1.6, 1.7, 1.7, 1.8, 1.8, 1.9, 2. , 2. , 2. ]

有人可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

data是基本的NumPy ndarray对象。当您使用[]对其进行索引时,它们会接受整数,切片或其他“类似于数组”的对象。但是,ols函数在the documentation中明确指出:

数据必须使用公式中的键定义__getitem__

这意味着data必须是熊猫DataFrame,字典或NumPy structured array,并且必须使用__getitem__方法接受str对象作为索引

相关问题