Ale*_*son 5 excel-formula linear-regression dax powerbi
假设我有一组回报,我想计算其β值与不同的市场指数.让我们在一个名为Returns一个具体示例的表中使用以下数据集:
Date Equity Duration Credit Manager
-----------------------------------------------
01/31/2017 2.907% 0.226% 1.240% 1.78%
02/28/2017 2.513% 0.493% 1.120% 3.88%
03/31/2017 1.346% -0.046% -0.250% 0.13%
04/30/2017 1.612% 0.695% 0.620% 1.04%
05/31/2017 2.209% 0.653% 0.480% 1.40%
06/30/2017 0.796% -0.162% 0.350% 0.63%
07/31/2017 2.733% 0.167% 0.830% 2.06%
08/31/2017 0.401% 1.083% -0.670% 0.29%
09/30/2017 1.880% -0.857% 1.430% 2.04%
10/31/2017 2.151% -0.121% 0.510% 2.33%
11/30/2017 2.020% -0.137% -0.020% 3.06%
12/31/2017 1.454% 0.309% 0.230% 1.28%
Run Code Online (Sandbox Code Playgroud)
现在在Excel中,我可以使用该LINEST函数来获取beta值:
= LINEST(Returns[Manager], Returns[[Equity]:[Credit]], TRUE, TRUE)
Run Code Online (Sandbox Code Playgroud)
它会吐出一个如下所示的数组:
0.077250253 -0.184974002 0.961578127 -0.001063971
0.707796954 0.60202895 0.540811546 0.008257129
0.50202386 0.009166729 #N/A #N/A
2.688342242 8 #N/A #N/A
0.000677695 0.000672231 #N/A #N/A
Run Code Online (Sandbox Code Playgroud)
测试版位于顶行并使用它们给出了以下线性估计:
Manager = 0.962 * Equity - 0.185 * Duration + 0.077 * Credit - 0.001
Run Code Online (Sandbox Code Playgroud)
问题是如何使用DAX在Power BI中获取这些值(最好不必编写自定义R脚本)?
对于简单的线性回归对一列,我可以回去的数学定义和写类似于给出的最小二乘法实现这个职位.
但是,当涉及更多列时(我需要能够最多12列,但并不总是相同的数字),这很快就会变得混乱,我希望有更好的方法.
精华:
DAX 不是要走的路。使用Home > Edit Queries然后Transform > Run R Script。插入以下 R 片段以使用表中的所有可用变量运行回归分析:
model <- lm(Manager ~ . , dataset)
df<- data.frame(coef(model))
names(df)[names(df)=="coef.model."] <- "coefficients"
df['variables'] <- row.names(df)
Run Code Online (Sandbox Code Playgroud)
编辑Manager任何其他可用变量名称以更改因变量。
细节:
好问题!为什么微软没有推出更灵活的解决方案超出了我的理解。但目前,如果不使用 Power BI 中的 R,您将无法找到非常好的方法。
因此,我建议的方法将忽略您关于以下方面的要求:
问题是如何使用 DAX 在 Power BI 中获取这些值(最好无需编写自定义 R 脚本)?
但是,我的回答将满足您关于以下方面的要求:
一个好的答案应该推广到 3 列以上(可能是通过使用索引作为值而不是列标题的非透视数据表来处理)。
开始了:
我在一个使用逗号作为小数点分隔符的系统上,所以我将使用以下作为数据源(如果您将数字直接复制到 Power BI 中,将不会保留列分隔符。如果您先粘贴将其复制到 Excel 中,再次复制,然后将其粘贴到 Power BI 中,列就可以了):
Date Equity Duration Credit Manager
31.01.2017 2,907 0,226 1,24 1,78
28.02.2017 2,513 0,493 1,12 3,88
31.03.2017 1,346 -0,046 -0,25 0,13
30.04.2017 1,612 0,695 0,62 1,04
31.05.2017 2,209 0,653 0,48 1,4
30.06.2017 0,796 -0,162 0,35 0,63
31.07.2017 2,733 0,167 0,83 2,06
31.08.2017 0,401 1,083 -0,67 0,29
30.09.2017 1,88 -0,857 1,43 2,04
31.10.2017 2,151 -0,121 0,51 2,33
30.11.2017 2,02 -0,137 -0,02 3,06
31.12.2017 1,454 0,309 0,23 1,28
Run Code Online (Sandbox Code Playgroud)
在 Power BI 中从头开始(出于可重复性目的),我使用Enter Data以下方法插入数据:
现在,去Edit Queries > Edit Queries检查你是否有这个:
为了在分析中包含的列数方面保持灵活性,我发现最好删除日期列。这不会对您的回归结果产生影响。只需右键单击日期列并选择Remove:
请注意,这将在Query Settings > Applied Steps>下添加一个新步骤:
这是您将能够编辑我们将要使用的几行 R 代码的地方。现在,去Transform > Run R Script打开这个窗口:
注意行# 'dataset' holds the input data for this script。值得庆幸的是,您的问题仅与一个输入表有关,因此事情不会变得太复杂(对于多个输入表,请查看这篇文章)。该数据集的变量是R中的形式data.frame的一个变量,是一个很好的(只有..)的起点,用于进一步分析。
插入以下脚本:
model <- lm(Manager ~ . , dataset)
df<- data.frame(coef(model))
names(df)[names(df)=="coef.model."] <- "coefficients"
df['variables'] <- row.names(df)
Run Code Online (Sandbox Code Playgroud)
单击OK,如果一切顺利,您应该得到以下结果:
点击Table,你会得到这个:
在Applied Steps你会看到一个Run R Script步骤已被插入。单击右侧的星号(齿轮?)进行编辑,或单击df以格式化输出表。
就是这个!至少对于编辑查询部分。
单击Home > Close & Apply以返回 Power BI 报告部分并验证您在以下位置有一个新表Visualizations > Fields:
插入一个表格或矩阵并激活系数和变量来得到这个:
我希望这就是你要找的!
现在了解有关 R 脚本的一些详细信息:
只要可能,我会避免使用许多不同的 R 库。这样,您将降低出现依赖性问题的风险。
该函数lm()处理回归分析。在解释变量的数量方面获得所需灵活性的关键在于Manager ~ . , dataset零件。这只是说对Manager数据框中的变量运行回归分析dataset,并使用所有剩余的列 ~ . 作为解释变量。该coef(model)部件从估计模型中提取系数值。结果是一个数据框,其中变量名作为行名。最后一行只是将这些名称添加到数据帧本身。
| 归档时间: |
|
| 查看次数: |
5009 次 |
| 最近记录: |