python - 有人知道如何使这段代码工作吗?
问题描述
我正在尝试使用最大似然方法来估计多重线性概率模型(killer_apps 是有限因变量)。因此,在这段代码中,我试图估计回归量和各自的标准误差。谁能告诉我为什么我会收到这个错误,一般来说,我做错了什么?我试图从用于简单线性概率模型的示例中扩展代码
def probitlik(beta,y,x1,x2,x3):
beta1 = beta[0]
beta2 = beta[1]
beta3 = beta[2]
beta4 = beta[3]
prob = stats.norm.cdf(beta1 + beta2*x1 + beta3*x2 + beta4*x3)
vlog=y*np.log(prob)+(1-y)*np.log(1-prob)
loglik=-1*sum(vlog)
return(loglik)
probitmodel = minimize(probitlik, x0 = np.asarray([0.5,0.55,0.6,1]),args = (killer_app,size,price,score),method='BFGS')
def hessian(x0,*args):
epsilon=1.e-3
f1 = approx_fprime(x0,probitlik,*args)
n = x0.shape[0]
hessian = np.zeros ([n,n])
xx = x0
for j in range(0,n):
xx0 = xx[j]
xx[j] = xx0 + epsilon
f2 = approx_fprime(x0,probitlik,*args)
hessian[:,j] = (f2 - f1)/epsilon
xx[j] = xx0
return hessian
eps = 1e-07
hess = hessian(probitmodel.x,[eps, np.sqrt(200) * eps],[killer_app,size, price, score])
inv_hess = np.linalg.inv(hess)
std_beta = np.sqrt(np.diag(inv_hess))
print(std_beta)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-23-b78abca11ff5> in <module>()
26
27 eps = 1e-07
---> 28 hess = hessian(probitmodel.x,[eps, np.sqrt(200) * eps],[killer_app,size, price, score])
29 inv_hess = np.linalg.inv(hess)
30 std_beta = np.sqrt(np.diag(inv_hess))
2 frames
/usr/local/lib/python3.6/dist-packages/scipy/optimize/optimize.py in _approx_fprime_helper(xk, f, epsilon, args, f0)
689 """
690 if f0 is None:
--> 691 f0 = f(*((xk,) + args))
692 grad = numpy.zeros((len(xk),), float)
693 ei = numpy.zeros((len(xk),), float)
TypeError: probitlik() missing 3 required positional arguments: 'x1', 'x2', and 'x3'
解决方案
很难,因为错误在第 691 行。此外,根本没有评论,而且参数的传递似乎非常复杂。开始调试,当它在第 691 行失败时,检查*((xk,) + args)
. 显然,只有两个值被传递,probitlik()
而五个是必需的——这在您在问题中发布的最后一行中进行了解释。
推荐阅读
- angular - ng update @angular/core@10 @angular/cli@10 不起作用
- google-sheets - 如何对来自 2 个表的 2 个值数组的唯一值进行数组公式化
- javascript - 如何通过键将对象转换为对象数组?
- python - 从 streamlit file_uploader 获取错误
- java - 如何使用键盘快捷键在 Eclipse IDE 中运行代码
- quartz-scheduler - 石英调度程序根据重复触发完成作业的事件
- wordpress - 从 AWS Bitnami Wordpress 中的子目录提供静态 html 文件
- python - 如何使用 Python 将 6GB JSON 文件转换为 CSV?
- java - QuickFIX/J - 性能基准
- angular - Angular - 错误 TS2554:预期 1 个参数,但得到 0