【问题标题】:Sum of residuals of scipy regression modelscipy回归模型的残差之和
【发布时间】:2018-12-07 17:49:06
【问题描述】:

我正在使用 python 浏览一个统计工作簿,有一个练习动手的问题,我被困在这个问题上。它与泊松回归有关,这里是问题陈述:-

执行以下任务:

  1. 从 MASS 包中加载 R 数据集 Insurance,并将数据捕获为 pandas 数据框
  2. 建立一个泊松回归模型,其对数为 自变量、持有人和因变量索赔。
  3. 用数据拟合模型。
  4. 求残差之和

我坚持上面的第 4 点。有人可以帮忙完成这一步吗?

这是我到目前为止所做的:-

import statsmodels.api as sm
import statsmodels.formula.api as smf
import numpy as np
df = sm.datasets.get_rdataset('Insurance', package='MASS', cache=False).data
poisson_model = smf.poisson('np.log(Holders) ~ -1 + Claims', df)
poisson_result = poisson_model.fit()
print(poisson_result.summary())

现在如何得到残差之和?

【问题讨论】:

  • 随便做吧:np.sum(poisson_result.resid)
  • 虽然我得到了 180 的输出,但它仍然说答案是错误的。试图弄清楚如何

标签: python-3.x scipy statistics poisson


【解决方案1】:

np.sum(poisson_result.resid)

工作正常

正如 Karthikeyan 所指出的,您在构建泊松模型时使用了错误的变量。 改用这个,

poisson_model = smf.poisson('Claims ~ np.log(Holders)',df)

【讨论】:

  • FP 练习没有排除以下答案-------->>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>> 优化成功终止。当前函数值:3.468160 Iterations 7 6.679101716144942e-13
【解决方案2】:

试试下面的 Fresco play 代码

import statsmodels.api as sm
import statsmodels.formula.api as smf
import pandas as pd
import numpy as np
df_insurance=sm.datasets.get_rdataset("Insurance","MASS")
df_data=df_insurance.data
insurance_model=smf.poisson('Claims ~ np.log(Holders)', df_data).fit()
print(np.cumsum(insurance_model.resid))

【讨论】:

  • 你能解释一下为什么需要 cumsum 而不是 sum 吗?
【解决方案3】:

1.a) 从 MASS 包中加载 R 数据集 Insurance

1.b) 并将数据捕获为 pandas 数据框

2) 使用自变量、Holders 和因变量 Claims 的对数构建泊松回归模型。

3) 用数据拟合模型。

4) 求残差之和。

import statsmodels.api as sm
import statsmodels.formula.api as smf
import pandas as pd
import numpy as np

#load the R data set insurrance from MASS package
ins = sm.datasets.get_rdataset('Insurance','MASS').data
# capture the data as pandas data frame
ins_pd = pd.DataFrame(ins)
# build a poisson regressions model with
# a log of an independent variable "Holders" 
# and dependent variable "Claims"
# fit the model with data
result = smf.poisson('Claims ~ np.log(Holders)',data=ins).fit()
# you can also use
# model = smf.poisson('Claims ~ np.log(Holders)',data=ins)
# result = model.fit()

# Find tue sum of residuals
print('Sum ot the residuals:',np.sum(result.resid))

我是新手,所以我不知道将数据捕获为熊猫数据框是否可以,但现在让我来

问候

【讨论】:

    【解决方案4】:

    墨西哥壁画

    import statsmodels.api as sm
    import statsmodels.formula.api as smf
    import pandas as pd
    import numpy as np
    
    df_data=sm.datasets.get_rdataset("Insurance","MASS").data
    df_dataf= pd.DataFrame(df_data)
    insurance_model=smf.poisson('Claims ~ np.log(Holders)',df_data)
    insurance_model_result=insurance_model.fit()
    print(np.sum(insurance_model_result.resid))
    

    【讨论】:

    • 我得到如下输出优化成功终止。当前函数值:3.468160 Iterations 7 6.679101716144942e-13
    【解决方案5】:

    在 poisson_model = smf.poisson('np.log(Holders) ~ -1 + Claims', df) 语句中,因变量“Claims”应位于右侧

    poisson_model = smf.poisson('Claims ~ np.log(Holders)-1', df)

    【讨论】:

    • 欢迎来到 Stack Overflow!使用格式化工具使您的帖子更具可读性。代码块应类似于 code block。如果需要,请使用 粗体 斜体
    【解决方案6】:

    如果有人正在寻找解决方案,这符合“Fresco”的要求

    df_insurance=sm.datasets.get_rdataset("Insurance","MASS")
    df_data=df_insurance.data
    insurance_model=smf.poisson('Claims ~ np.log(Holders)',df_data)
    insurance_model_result=insurance_model.fit()
    res=(insurance_model_result.resid)
    print(np.sum(res))
    

    【讨论】:

      【解决方案7】:

      我不知道它是否有效。但我参考了这个文档

      https://vincentarelbundock.github.io/Rdatasets/doc/MASS/Insurance.html https://vincentarelbundock.github.io/Rdatasets/datasets.html

      所以我希望这也能奏效。

      import statsmodels.api as sm
      import  statsmodels.formula.api as smf 
      import numpy as np
      import pandas as pd 
      
      data=pd.DataFrame(sm.datasets.get_rdataset("Insurance","MASS",cache=True).data)
      model=smf.poisson('Claims ~ District + Group + Age + np.log(Holders)',data).fit()
      print(np.sum(model.resid))
      

      【讨论】:

        【解决方案8】:

        试试np.cumsum(model.resid)这个问题。

        理想情况下,np.sum(model.resid) 应该是问题的正确答案...但如果系统不接受它,请尝试cumsum

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-10-09
          • 2017-10-03
          • 2018-04-30
          • 2020-01-23
          • 2012-03-03
          • 2018-02-23
          相关资源
          最近更新 更多