如何获得statsmodel中的(FTest)solve_幂方法来计算线性回归模型的幂?

2024-09-30 14:29:07 发布

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

我最近开始使用Python库statsmodel(从R转换而来)。我希望使用一个简单的线性回归模型,并估计其统计能力,类似于R中的函数pwr.f2.test(使用Cohen的f2作为效应大小)

我能够在不使用任何内置函数(如solve_power(在statsmodel.stats.power)的情况下获得该功率,如下面的代码所示。然而,当使用statsmodels.stats.power.FTestPower()(使用solve_power)时,与模拟方法或R中的函数相比,我得到了非常不同的结果

我想知道在使用这些函数时是否遗漏了什么

def multipleRegressionPowerAnalysis (weight, N, num_variables, alpha=0.05, sims=2):
  signif = np.zeros(sims)
  for s in range(sims):
    x, y = sim(weight, N, num_variables)
    results = sm.OLS(y,x).fit()
    signif[s] = (results.f_pvalue<=alpha)
  empirical_power = np.mean(signif)
  R2 = sum(weight**2)
  solver = statsmodels.stats.power.FTestPower()
  f2_power = solver.solve_power(effect_size=(R2/(1-R2)), df_num=num_variables, 
    df_denom=(N-num_variables), nobs=N, alpha=alpha, 
    power=None, ncc=1) # Similar to the pwr.f2.test function in R
  f2_power = solver.solve_power(effect_size=np.sqrt(R2/(1-R2)), df_num=(N-num_variables), df_denom=(num_variables), nobs=N, alpha=alpha, power=None, ncc=1) # Updated function
  return empirical_power, f2_power

empirical_power, f2_power = multipleRegressionPowerAnalysis(np.array([0.12, 0.4, 0.05, 0.02, 0.1]), 
20, 5, sims=1000)
print(empirical_power, f2_power)

empirical_power, f2_power = multipleRegressionPowerAnalysis(np.array([0.15]), 343, 1, sims=1000)
print(empirical_power, f2_power)

例1:

  • 经验幂:0.321
  • FTestPower功能:0.05776419010044176
  • pwr.f2.试验(从R开始):0.2535
  • 更新的FTestPower功能:0.2535272287866944

例2:

  • 经验幂率:0.825
  • FTestPower功能:0.05001334984233974
  • pwr.f2.试验(从R开始):0.806
  • 更新的FTestPower功能:0.8012392781285327

注意:更新后的通话如上所示,并在下面的评论中进行了描述


Tags: 函数功能alphadfnpvariablesnumf2