Как получить параметры модели линейной регрессии с шагом преобразования R в Power Query - PullRequest
3 голосов
/ 04 февраля 2020

Скажем, у нас есть две переменные Y и X, и мы хотим создать простую модель регрессии с Transform > Run R script в Power Query. Вот примеры данных:

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)

enter image description here

Но я получаю пустую таблицу:

enter image description here

Как изменить сценарий R для получения сводки модели?

1 Ответ

5 голосов
/ 04 февраля 2020

Насколько мне известно, чтобы получить любой вывод из вашего R-скрипта, он должен быть в форме data.frame. Однако, если вы попытаетесь запустить что-то вроде df<-data.frame(output), вы получите ошибку

Ошибка в as.data.frame.default (x [[i]], необязательно = TRUE, stringsAsFactors =>> stringsAsFactors): невозможно привести класс 'summary.lm' к 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:

enter image description here

Далее просто нажмите Table, чтобы получить:

Выход 2:

enter image description here

Поскольку у меня нет ваших данных, я просто использовал Enter Data и этот простой пример данных:

enter image description here

Редактировать: Другие оценки модели

Если вы хотите извлечь оценочные ряды из модели, такие как невязки или подогнанные значения, просто добавьте следующее строки приведенного выше фрагмента:

df_estimates <- data.frame(fitted(model), residuals(model))
colnames(df_estimates) <- c('fitted', 'residuals')

Предварительный вывод теперь будет:

enter image description here

И это довольно интересная функция в Power BI. Просто нажмите table рядом с фреймом данных, с которым вы хотите продолжить работу. В последнем случае вы получите:

enter image description here

Редактировать 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...