Как вернуть несколько статистических данных в виде нескольких столбцов в контексте Polars grouby?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как вернуть несколько статистических данных в виде нескольких столбцов в контексте Polars grouby?

Сообщение Anonymous »

Стоящая задача — выполнить множественную линейную регрессию по нескольким столбцам в контексте группировки и вернуть соответствующие бета-коэффициенты и связанные с ними значения t в отдельных столбцах.
Ниже приведена иллюстрация попытка сделать это с помощью статистических моделей.

Код: Выделить всё

import numpy as np
import polars as pl
import statsmodels.api as sm

from functools import partial

def ols_stats(s, yvar, xvars):
df = s.struct.unnest()
yvar = df[yvar].to_numpy()
xvars = df[xvars].to_numpy()
reg = sm.OLS(yvar, sm.add_constant(xvars), missing="drop").fit()
return np.concatenate((reg.params, reg.tvalues))

df = pl.DataFrame(
{
"day": [1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3],
"y": [1, 6, 3, 2, 8, 4, 5, 2, 7, 3, 1],
"x1": [1, 8, 2, 3, 5, 2, 1, 2, 7, 3, 1],
"x2": [8, 5, 3, 6, 3, 7, 3, 2, 9, 1, 1],
}
)

df.group_by("day").agg(
pl.struct("y", "x1", "x2")
.map_elements(partial(ols_stats, yvar="y", xvars=["x1", "x2"]))
.alias("params")
)
Результат приведенного выше фрагмента кода равен

Код: Выделить всё

shape: (3, 2)
┌─────┬─────────────────────────────────┐
│ day ┆ params                          │
│ --- ┆ ---                             │
│ i64 ┆ object                          │
╞═════╪═════════════════════════════════╡
│ 2   ┆ [2.0462002  0.22397054 0.33679… │
│ 1   ┆ [ 4.86623165  0.64029364 -0.65… │
│ 3   ┆ [0.5 0.5 0.  0. ]               │
└─────┴─────────────────────────────────┘
Как мне разделить «параметры» на отдельные столбцы с одним скалярным значением в каждом столбце?
Кроме того, мой код, похоже, дает сбой в некоторых крайних случаях. Ниже один из них.

Код: Выделить всё

df = pl.DataFrame(
{
"day": [1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3],
"y": [1, 6, 3, 2, 8, 4, 5, 2, 7, 3, None],
"x1": [1, 8, 2, 3, 5, 2, 1, 2, 7, 3, 1],
"x2": [8, 5, 3, 6, 3, 7, 3, 2, 9, 1, 1],
}
)

df.group_by("day").agg(
pl.struct("y", "x1", "x2")
.map_elements(partial(ols_stats, yvar="y", xvars=["x1", "x2"]))
.alias("params")
)

# ComputeError: ValueError: exog is not 1d or 2d
Как сделать код устойчивым к таким случаям?
Спасибо за помощь. И не стесняйтесь предлагать собственное решение.

Подробнее здесь: https://stackoverflow.com/questions/755 ... by-context
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Python pandas не может использовать методmean() с grouby
    Anonymous » » в форуме Python
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • Как одновременно вычислить несколько сводных статистических данных по всем столбцам с использованием ленивого кадра Pola
    Anonymous » » в форуме Python
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • Polars: вернуть фрейм данных со всеми уникальными значениями N столбцов.
    Anonymous » » в форуме Python
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Polars: вернуть фрейм данных со всеми уникальными значениями N столбцов.
    Anonymous » » в форуме Python
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Текстовое резюме статистических табличных данных
    Anonymous » » в форуме Python
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»