Saltar al contenido

Regresión lineal múltiple en Power BI

Si hallas algún fallo con tu código o trabajo, recuerda probar siempre en un ambiente de testing antes aplicar el código al trabajo final.

Solución:

La esencia:

DAX no es el camino a seguir. Usar Home > Edit Queries y luego Transform > Run R Script. Inserte el siguiente fragmento de R para ejecutar un análisis de regresión utilizando todas las variables disponibles en una tabla:

model <- lm(Manager ~ . , dataset)
df<- data.frame(coef(model))
names(df)[names(df)=="coef.model."] <- "coefficients"
df['variables'] <- row.names(df)

Editar Manager a cualquiera de los otros nombres de variable disponibles para cambiar la variable dependiente.


Los detalles:

¡Buena pregunta! Por qué Microsoft no ha introducido soluciones más flexibles está más allá de mi comprensión. Pero por el momento, no podrá encontrar enfoques muy buenos sin usar R en Power BI.

Por lo tanto, mi enfoque sugerido ignorará su solicitud con respecto a:

La pregunta es ¿cómo puedo obtener estos valores en Power BI usando DAX (preferiblemente sin tener que escribir un script R personalizado)?

Sin embargo, mi respuesta cumplirá con sus requisitos con respecto a:

Una buena respuesta debería generalizarse a más de 3 columnas (probablemente trabajando en una tabla de datos no dividida con los índices como valores en lugar de encabezados de columna).

Aquí vamos:


Estoy en un sistema que usa una coma como separador decimal, por lo que usaré lo siguiente como fuente de datos (si copia los números directamente en Power BI, la separación de columnas no se mantendrá. Si primero pega en Excel, cópielo de nuevo y LUEGO péguelo en Power BI, las columnas estarán bien):

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

Comenzando desde cero en Power BI (con fines de reproducibilidad), estoy insertando los datos usando Enter Data:

ingrese la descripción de la imagen aquí

Ahora, ve a Edit Queries > Edit Queries y comprueba que tienes esto:

ingrese la descripción de la imagen aquí

Para mantener la flexibilidad con respecto al número de columnas para incluir en su análisis, creo que es mejor eliminar el Fecha Columna. Esto no afectará a los resultados de la regresión. Simplemente haga clic con el botón derecho en la columna Fecha y seleccione Remove:

ingrese la descripción de la imagen aquí

Tenga en cuenta que esto agregará un nuevo paso en Query Settings > Applied Steps>:

ingrese la descripción de la imagen aquí

Y aquí es donde podrá editar las pocas líneas de código R que vamos a usar. Ahora, ve a Transform > Run R Script para abrir esta ventana:

ingrese la descripción de la imagen aquí

Fíjate en la línea # 'dataset' holds the input data for this script. Afortunadamente, su pregunta es solo sobre UNA tabla de entrada, por lo que las cosas no se van a complicar demasiado (para varias tablas de entrada, consulte esta publicación). El conjunto de datos variable es una variable del formulario data.frame en R y es un buen (el único ...) punto de partida para un análisis posterior.

Inserte el siguiente script:

model <- lm(Manager ~ . , dataset)
df<- data.frame(coef(model))
names(df)[names(df)=="coef.model."] <- "coefficients"
df['variables'] <- row.names(df)

ingrese la descripción de la imagen aquí

Hacer clic OK, y si todo va bien deberías terminar con esto:

ingrese la descripción de la imagen aquí

Hacer clic Tabley obtendrás esto:

ingrese la descripción de la imagen aquí

Bajo Applied Steps verás que un Run R Script se ha insertado un paso. Haga clic en la estrella (¿engranaje?) A la derecha para editarla, o haga clic en df para formatear la tabla de salida.

¡Eso es todo! Para el Editar consultas parte al menos.

Hacer clic Home > Close & Apply para volver a la sección Informe de Power BI y verificar que tiene una nueva tabla debajo Visualizations > Fields:

ingrese la descripción de la imagen aquí

Inserte una tabla o matriz y active coeficientes y variables para obtener esto:

ingrese la descripción de la imagen aquí

¡Espero que esto sea lo que estabas buscando!


Ahora, para algunos detalles sobre el script R:

Siempre que sea posible, evitaría el uso de numerosas bibliotecas R. De esta manera, reducirá el riesgo de problemas de dependencia.

La función lm() maneja el análisis de regresión. El key Obtener la flexibilidad requerida en cuanto al número de variables explicativas radica en la Manager ~ . , dataset parte. Esto simplemente dice ejecutar un análisis de regresión en el Manager variable en el marco de datos datasety use todas las columnas restantes ~ . como variables explicativas. El coef(model) parte extrae los valores de los coeficientes del modelo estimado. El resultado es un marco de datos con los nombres de las variables como nombres de filas. La última línea simplemente agrega estos nombres al marco de datos en sí.

Como no existe un reemplazo equivalente o útil para LINEST función en Power BI (estoy seguro de que ha investigado lo suficiente antes de publicar la pregunta), cualquier intento significaría reescribir la función completa en Power Query / M, que ya no es tan "simple" para el caso de regresión lineal simple , por no hablar de múltiples variables.

En lugar de (re) inventar la rueda, es inevitablemente mucho más fácil (código de una sola línea ...) hacerlo con el script R en Power BI.

No es una mala opción dado que no tengo experiencia previa en R. Después de algunas búsquedas y prueba y error, puedo llegar a esto:

# 'dataset' holds the input data for this script
# install.packages("broom") # uncomment to install if package does not exist
library(broom)

model <- lm(Manager ~ Equity + Duration + Credit, dataset)
model <- tidy(model)

lm es la función de modelo lineal incorporada de R, y la tidy la función viene con el broom package, que ordena la salida y genera un marco de datos para Power BI.

resultado

Con las columnas term y estimate, esto debería ser suficiente para calcular la estimación que desea.

La consulta M para su referencia:

let
    Source = Csv.Document(File.Contents("returns.csv"),[Delimiter=",", Columns=5, Encoding=1252, QuoteStyle=QuoteStyle.None]),
    #"Promoted Headers" = Table.PromoteHeaders(Source, [PromoteAllScalars=true]),
    #"Changed Type" = Table.TransformColumnTypes(#"Promoted Headers","Date", type text, "Equity", Percentage.Type, "Duration", Percentage.Type, "Credit", Percentage.Type, "Manager", Percentage.Type),
    #"Run R Script" = R.Execute("# 'dataset' holds the input data for this script#(lf)# install.packages(""broom"")#(lf)library(broom)#(lf)#(lf)model <- lm(Manager ~ Equity + Duration + Credit, dataset)#(lf)model <- tidy(model)",[dataset=#"Changed Type"]),
    #"""model""" = #"Run R Script"[Name="model"][Value]
in
    #"""model"""

valoraciones y reseñas

Si conservas alguna vacilación y forma de mejorar nuestro noticia te sugerimos realizar una aclaración y con mucho gusto lo estudiaremos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *