pandas - 以 x 值作为索引的 pandas Dataframe 的线性回归

标签 pandas dataframe data-fitting

我有一个数据框df:

[250 rows x 120 columns]
                    0         1         2         3         4         5   \
lag time [s]                                                               
0.041667      0.038638  0.193427  0.126253  0.058737  0.122129  0.117425   
0.083333      0.104397  0.323418  0.390540  0.194786  0.247005  0.242796   
0.125000      0.168620  0.577642  0.782489  0.389399  0.381930  0.325373   
0.166667      0.241057  0.912038  1.361542  0.560007  0.346316  0.343614   
0.208333      0.246506  0.636547  1.863711  0.767916  0.487872  0.203043   
...

我需要将y = a*xx=df.index.values匹配每列的滞后时间

某些列可能包含 NaN,并且希望在 a 中恢复不同的结果 pd.DataFrame({'column' : [],'slope' : [], 'stderr' : [] })

我可以单独提取 xy 数据并使用 numpy fitline() 拟合数据,但这在我看来很乏味。

有没有更好的方法使用 panda ols 来完成这项工作?

最佳答案

是否需要保留滞后时间作为索引?最简单的方法可能是将其作为数据框中的一列并使用 statsmodels 的公式界面:

import statsmodels.formula.api as sm

df2 = df.reset_index()

modres = {}
for colname in df2.drop('index', axis=1).columns:
    mod = sm.ols(formula=colname+' ~ index', data=df2)
    modres[colname] = mod.fit()

您要求提供列表的数据框,但我认为保留每个回归的整个结果对象比丢弃大部分信息更有意义。我的建议是保存回归结果的字典。要访问 y1 ~ x 回归的系数和标准误差,您可以编写 modres['y1'].paramsmodres['y1'].bse

如果您对对象进行内省(introspection),您会发现可以从每个结果对象中获取 AIC、t-stats 等。您还可以将它们传递给许多其他 statsmodels 函数以进行预测、回溯等。

关于pandas - 以 x 值作为索引的 pandas Dataframe 的线性回归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21457314/

相关文章:

python - 添加多索引列的任何直接方法?

string - Python Pandas : How to replace string contain "?"

r - 如何使用 R 中的值转换数据框和 dplyr 跨多个列更改值

python - 在 Pandas 中使用 groupby 和 resample 时如何显示日期时间对象?

python - 用 numpy 拟合数据

Python Pandas 按相同值分组并替换为平均值

python - Pandas 比 numpy 慢得多?

r - 当遵守条件时如何在两个数据框之间粘贴值

python - SciPy LeastSq 拟合优度估计器

java - 将 3D 线拟合到 Java 中的 3D 点数据?