我正在为一组标准OLS回归运行汇总统计信息。该代码是由我的教授编写的,我试图弄清楚代码的一部分具体发生了什么。
summary_col(
[reg0,reg1,reg2,reg3],
stars=True,
float_format='%0.2f',
info_dict = {
'N':lambda x: "{0:d}".format(int(x.nobs)),
'R2':lambda x: "{:.2f}".format(x.rsquared)
})
我查找了lambda函数。我对它们的工作方式有相当不错的了解。我确实了解的代码方面:
info_dict
是值的字典,如果您希望将其包括在摘要统计中,则可以调用它们
lambda函数通过调用匿名函数“ lambda x”来工作,然后放置:
并列出要执行的操作(即x + 5),然后如果您已经知道什么参数您希望它运行,可以在第二个“ :
”之后放入列表。
{0:d}
将四舍五入为整数,这对于观察非常有意义。尽管我不知道为什么您不能只说{%.f}
。也许是因为前者返回一个显式int,而后者返回一个看起来像int的float。
{:.2f}
将返回一个带小数点后两位的浮点数
我不完全了解somestring.format()
的作用。我以某种方式将x
定义为回归的结果,而x.nobs
是变量“观察次数”。与x.rsquared
类似。
有人可以为我补充一下公式中发生的事情吗? lambda函数的确切作用是使它能够为每个回归获取数据?
答案 0 :(得分:1)
让我们对此稍作说明,以使事情变得显而易见:
summary_col(
[reg0,reg1,reg2,reg3],
stars=True,
float_format='%0.2f',
info_dict={
'N':lambda x: "{0:d}".format(int(x.nobs)),
'R2':lambda x: "{:.2f}".format(x.rsquared)
}
)
summary_col
对象正在接受一些输入,第一个参数是回归对象[reg0,reg1,reg2,reg3]
的列表。然后有三个命名参数stars
,float_format
和info_dict
。当我们将回归对象列表作为第一个参数传递时,我相信lambda函数知道将匿名函数应用于每个对象。因此,info_dict
所做的就是创建一个包含两个键的字典,N
和R2
映射到字符串。当在lambda函数中引用成员x.nobs
和x.rsquared
时,由于使用它们的上下文,它们将应用于回归对象。
如果您尝试在代码行中使用lambda来处理回归对象中不存在的内容,则几乎肯定会出现错误。关键在于应用lambda的上下文。
关于lambda函数上下文的一个很好的示例是遍历字典并按键和值进行排序。
# sort the dict by value first, and key second...
# x is inferred from the context (my_dict.items())
for key, value in sorted(my_dict.items(), key=lambda x: (x[1], x[0]):
print(key, value)