无法修复“ValueError:DataFrame构造函数调用不正确!”

2024-06-25 23:03:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我被要求按照以下步骤编写一个线性回归程序。在

  1. 加载R数据集mtcars作为pandas数据帧。在
  2. 考虑自变量wt的对数和因变量mpg的对数,建立了另一个线性回归模型。在
  3. 用数据拟合模型,并显示R平方值

我是Python统计的初学者。在

我尝试在不转换为新数据帧的情况下获取日志值,但出现了一个错误:“TypeError:'OLS'object is not subscribable”

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 constructor not properly called!]


Tags: 数据模型importpandasdataasnp对数
2条回答

我破坏了你的代码,我已经逐行运行了。 问题在于:

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

如果尝试打印,则输出为:

^{pr2}$

它不能被正确地解释为建立一个数据帧。在

解决方案是将第一个线性模型的结果放入表格,最后放入数据框:

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

如果打印结果摘要,您将看到变量是:Intercept和mpg。 我不知道是概念上的错误还是什么,因为它不是对“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]

林琰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

这可能对你有用。在

import statsmodels.api as sm
import numpy as np
mtcars = sm.datasets.get_rdataset('mtcars')
mtcars_data = mtcars.data
liner_model = sm.formula.ols('np.log(wt) ~ np.log(mpg)',mtcars_data)
liner_result = liner_model.fit()
print(liner_result.rsquared)

相关问题 更多 >