如何在 Power Query 中使用 R 转换步骤获取线性回归模型参数
How to get linear regression model parameters with R transformation step in Power Query
假设我们有两个变量 Y 和 X,我们想在 Power Query 中使用 Transform > Run R script
建立一个简单的回归模型。这里有示例数据:
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMlTSAeJYnWglYyDLCMwyBbKMwSwLIMtEKTYWAA==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [Y = _t, X = _t]),
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Y", Int64.Type}, {"X", Int64.Type}})
in
#"Changed Type"
然后我使用以下代码将 Run R script
步骤添加到 Power Query:
output <- lm(Y ~ X, data=dataset)
但我得到一个空 table:
如何修改R脚本获取模型摘要?
据我所知,为了从您的 R 脚本中检索任何输出,它必须采用 data.frame
的形式。但是,如果您尝试 运行 类似 df<-data.frame(output)
的内容,您将得到错误
Error in as.data.frame.default(x[[i]], optional = TRUE, stringsAsFactors = > > stringsAsFactors) : cannot coerce class ‘"summary.lm"’ to a data.frame
但是您可以 检索相同摘要的部分内容并将其组织到数据框中。在您的代码片段的基础上,以下是您如何为模型系数执行此操作。我冒昧地将你的 output
重命名为 model
。
代码:
model <- lm(Y ~ X, dataset)
df<- data.frame(coef(model))
names(df)[names(df)=="coef.model."] <- "coefficients"
df['variables'] <- row.names(df)
输出 1:
接下来直接点击Table
得到:
输出 2:
因为我没有你的数据,所以我只使用了 Enter Data
和这个简单的数据样本:
编辑:其他模型估计
如果您想从模型中检索估计序列,例如残差或拟合值,只需将以下行添加到上面的代码片段中:
df_estimates <- data.frame(fitted(model), residuals(model))
colnames(df_estimates) <- c('fitted', 'residuals')
初步输出现在为:
这是 Power BI 中一个非常实用的功能。只需单击要继续使用的数据框旁边的 table
。在后一种情况下,你会得到这个:
编辑 2 - 在输出中包含原始数据集:
#Y <- c(1,2,3,4,4)
#X <- c(1,2,3,4,5)
#dataset <- data.frame(X, Y)
model <- lm(Y ~ X, dataset)
df<- data.frame(coef(model))
names(df)[names(df)=="coef.model."] <- "coefficients"
df['variables'] <- row.names(df)
df_estimates <- data.frame(dataset$X, dataset$Y, fitted(model), residuals(model))
colnames(df_estimates) <- c('X', 'Y', 'fitted', 'residuals')
df_estimates
假设我们有两个变量 Y 和 X,我们想在 Power Query 中使用 Transform > Run R script
建立一个简单的回归模型。这里有示例数据:
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMlTSAeJYnWglYyDLCMwyBbKMwSwLIMtEKTYWAA==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [Y = _t, X = _t]),
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Y", Int64.Type}, {"X", Int64.Type}})
in
#"Changed Type"
然后我使用以下代码将 Run R script
步骤添加到 Power Query:
output <- lm(Y ~ X, data=dataset)
但我得到一个空 table:
如何修改R脚本获取模型摘要?
据我所知,为了从您的 R 脚本中检索任何输出,它必须采用 data.frame
的形式。但是,如果您尝试 运行 类似 df<-data.frame(output)
的内容,您将得到错误
Error in as.data.frame.default(x[[i]], optional = TRUE, stringsAsFactors = > > stringsAsFactors) : cannot coerce class ‘"summary.lm"’ to a data.frame
但是您可以 检索相同摘要的部分内容并将其组织到数据框中。在您的代码片段的基础上,以下是您如何为模型系数执行此操作。我冒昧地将你的 output
重命名为 model
。
代码:
model <- lm(Y ~ X, dataset)
df<- data.frame(coef(model))
names(df)[names(df)=="coef.model."] <- "coefficients"
df['variables'] <- row.names(df)
输出 1:
接下来直接点击Table
得到:
输出 2:
因为我没有你的数据,所以我只使用了 Enter Data
和这个简单的数据样本:
编辑:其他模型估计
如果您想从模型中检索估计序列,例如残差或拟合值,只需将以下行添加到上面的代码片段中:
df_estimates <- data.frame(fitted(model), residuals(model))
colnames(df_estimates) <- c('fitted', 'residuals')
初步输出现在为:
这是 Power BI 中一个非常实用的功能。只需单击要继续使用的数据框旁边的 table
。在后一种情况下,你会得到这个:
编辑 2 - 在输出中包含原始数据集:
#Y <- c(1,2,3,4,4)
#X <- c(1,2,3,4,5)
#dataset <- data.frame(X, Y)
model <- lm(Y ~ X, dataset)
df<- data.frame(coef(model))
names(df)[names(df)=="coef.model."] <- "coefficients"
df['variables'] <- row.names(df)
df_estimates <- data.frame(dataset$X, dataset$Y, fitted(model), residuals(model))
colnames(df_estimates) <- c('X', 'Y', 'fitted', 'residuals')
df_estimates