我本可以选择一个简短的问题,只关注于这里的核心问题,即列表排列。但是,我之所以把statsmodels和pandas带到这个问题中,是因为可能存在用于逐步回归的特定工具,同时具有存储所需回归输出的灵活性,就像下面我将向您展示的那样,但这样做的效率要高得多。至少我希望如此。在
给定如下数据帧:
代码段1:
# Imports
import pandas as pd
import numpy as np
import itertools
import statsmodels.api as sm
# A datafrane with random numbers
np.random.seed(123)
rows = 12
listVars= ['y','x1', 'x2', 'x3']
rng = pd.date_range('1/1/2017', periods=rows, freq='D')
df_1 = pd.DataFrame(np.random.randint(100,150,size=(rows, len(listVars))), columns=listVars)
df_1 = df_1.set_index(rng)
print(df_1)
截图1:
我想用自变量x1,x2和x3的多种组合对因变量y进行几次回归分析。换言之,这是一个逐步回归分析,其中y是针对x1进行测试的,然后是x2和x3。然后用x1和x2对y进行测试,依此类推:
我的低效方法:
在下面的两个第一个片段中,我能够通过使用列表列表硬编码执行序列来做到这一点。在
以下是ListVar的子集:
代码段2:
^{pr2}$截图2:
使用listExec,我可以建立一个回归分析的过程,并存储一堆结果(rsquared或整个模型输出模式汇总())在这样的列表中:
代码段3:
allResults = []
for l in listExec:
x = listVars[1]
x = sm.add_constant(df_1[l[1]])
model = sm.OLS(df_1[l[0]], x).fit()
result = model.rsquared
allResults.append(result)
打印(所有结果)
截图3:
这是相当可怕的,但是对于较长的变量列表来说效率非常低。在
我的列表组合尝试:
遵循How to generate all permutations of a list in Python和Convert a list of tuples to a list of lists的建议 我可以设置所有变量的组合,如下所示:
代码段4:
allTuples = list(itertools.permutations(listVars))
allCombos = [list(elem) for elem in allTuples]
截图4:
这很有趣,但并没有给我一个循序渐进的方法。不管怎样,我希望你们中的一些人觉得这很有趣。在
谢谢你的建议!在
基于我得到的帮助here,我已经能够组合一个函数,该函数接受pandas数据帧中的所有列,定义一个因变量,并返回其余变量的所有唯一组合。结果与上面定义的期望结果有点不同,但我认为对于实际应用来说更有意义。我仍然希望其他人能够发布更好的解决方案。在
这里是:
如果您将其与上面的snippet 3结合使用,您可以轻松地将多元回归分析的结果存储在pandas数据框中的指定因变量上。在
相关问题 更多 >
编程相关推荐