Невозможно исправить «ValueError: Конструктор DataFrame неправильно вызван!» - PullRequest
1 голос
/ 21 сентября 2019

Меня попросили написать программу для линейной регрессии со следующими шагами.

  1. Загрузка набора данных R mtcars в качестве фрейма данных pandas.
  2. Построение другой модели линейной регрессии с учетом журнала независимой переменной wt и журнала зависимой переменной mpg.
  3. Подгоните модель к данным и отобразите значение R-квадрата

Я новичок в статистике с Python.

Я попытался получить значения журнала без преобразования вновый DataFrame, но с ошибкой: «TypeError: объект« OLS »не может быть подписан»

import statsmodels.api as sa
import statsmodels.formula.api as sfa
import pandas as pd
import numpy as np

cars = sa.datasets.get_rdataset("mtcars")
cars_data = cars.data
lin_mod1 = sfa.ols("wt~mpg",cars_data)
lin_mod2 = pd.DataFrame(lin_mod1)
lin_mod2['wt'] = np.log(lin_mod2['wt'])
lin_mod2['mpg'] = np.log(lin_mod2['mpg'])
lin_res1 = lin_mod2.fit()
print(lin_res1.summary())

Ожидаемый результат - таблица после линейной регрессии, но фактический вывод - ошибка

[ValueError: Конструктор DataFrame вызван неправильно!]

1 Ответ

1 голос
/ 21 сентября 2019

Я сломал твой код, и я запускал его построчно.Проблема здесь:

 lin_mod1 = sfa.ols("wt~mpg",cars_data)

Если вы попытаетесь распечатать его, вы получите:

 statsmodels.regression.linear_model.OLS object at 0x7f1c64273eb8

И это не может быть правильно интерпретировано для построения фрейма данных.

Решение состоит в том, чтобы получить результат первой линейной модели в таблицу и, наконец, поместить ее во фрейм данных:

results = lin_mod1.fit()
results_summary = results.summary()

Если вы напечатаете result_summary, вы увидите, что переменные: Interceptи миль на галлон.Я не знаю, является ли это ошибкой концепции или чего-то другого, поскольку это не пара «wt» - «mpg».

 # summary as a html table
 results_as_html = results_summary.tables[1].as_html()

 # dataframe from the html table
 lin_mod2 = pd.read_html(results_as_html, header=0, index_col=0)[0]

Печать lin_mod2:

  coef      std       err       t     P>|t|  [0.025  0.975]
  Intercept  6.0473    0.309  19.590    0.0   5.417   6.678
  mpg       -0.1409    0.015  -9.559    0.0  -0.171  -0.111
...