1

这是我第一次来这里,我是编程新手。

我用 stats.linregress 将我的 df 的一列与另一列回归,我试图用卡方统计检验评估拟合优度,我尝试了 2 种方法,scipy.stats.chi2_contingency() 和 scipy.stats.chisquare (),问题是我无法从这些方法可读的列中获取频率(这就是我的想法)。

代码是:

    import os
    import pandas as pd
    import numpy as np
    import scipy
    from scipy import stats

    df3 = pd.read_csv('MODELLO RAVASI-MARK UP shock1+control-table.csv', thousands=',')
    df_cntrl_reg = df3.loc [(df3['time'] > 34) & (df3['wageShock'] == 1) &     
    (df3['wageSchockTime']==30)]
    

    x = df_cntrl_reg.time
    y = df_cntrl_reg.profits
    slope, intercept, r_value, p_value, std_err = stats.linregress(x,y)
    stats.linregress(x,y)

输出:LinregressResult(斜率=57.735721968728164,截距=-1788.6653717798467,右值=0.014085574855596942,pvalue=0.47927072225571066,stderr=81.59589542103119)

    df_cntrl_reg['predicted'] = 57.735721968728164*df_cntrl_reg.time -1788.6653717798467
    obs = df_cntrl_reg['profits'].value_counts()
    exp = df_cntrl_reg['predicted'].value_counts()
    scipy.stats.chisquare(f_obs = obs, f_exp = exp, ddof = 1)

但是我得到了 ValueError: 操作数不能与形状一起广播 (2525,) (25,

我尝试像这样应用 .ravel() 方法:

    obs = df_cntrl_reg['profits'].value_counts().ravel()
    exp = df_cntrl_reg['predicted'].value_counts().ravel()

但这并没有改变什么。

我尝试使用 scipy.stats.chi2_contingency():

    table = [df_cntrl_reg['predetti'], df_cntrl_reg.profits]
    scipy.stats.chi2_contingency(table)

但我得到ValueError:所有值都observed必须是非负的。

我也试过这个来获取表格:

   to_test = df_cntrl_reg[['profits', 'predetti']]
   table = to_test.apply(pd.Series.value_counts(bins=10))

但我得到 TypeError: value_counts() missing 1 required positional argument: 'self'

你能帮我用一种简单的方法来获得统计数据吗?我不需要使用methof本身,只是为了获取统计信息,我可以从表中获取p值。我在 jupiter notebook 上使用 python 3,我的操作系统是 win 10(我知道我知道,但直到最近我才需要编程任何东西)。提前致谢

4

0 回答 0