突然,Probit 在 PySAL (1.14.4) 上不起作用

Posted

技术标签:

【中文标题】突然,Probit 在 PySAL (1.14.4) 上不起作用【英文标题】:Suddenly, Probit doesn't work on PySAL (1.14.4) 【发布时间】:2019-08-09 01:39:44 【问题描述】:

直到上周,我还有一段代码用于计算一系列事件发生某事的几率,但从本周开始,该代码不起作用。

代码如下:

import numpy as np
import pysal
import os

dbf = pysal.open('file.csv','r')

y = np.array([dbf.by_col('result')]).T

names_to_extract = ['dist', 'angle']
x = np.array([dbf.by_col(name) for name in names_to_extract]).T

id = np.array([dbf.by_col('incidenceId')]).T

model = pysal.spreg.probit.Probit(y, x, w=None, name_y='result', name_x=['dist','angle'], name_w=None, name_ds=None)

fin = np.column_stack((id, model.y, model.predy))

os.chdir("/destinyfolder")

np.savetxt('xg.csv', fin, delimiter=',', fmt='%d, %d, %f')

我得到这个错误:

/usr/local/lib/python3.7/site-packages/pysal/__init__.py:65: VisibleDeprecationWarning: PySAL's API will be changed on 2018-12-31. The last release made with this API is version 1.14.4. A preview of the next API version is provided in the `pysalnext` package. The API changes and a guide on how to change imports is provided at https://migrating.pysal.org
  ), VisibleDeprecationWarning)
Traceback (most recent call last):
  File "xg.py", line 14, in <module>
    model = pysal.spreg.probit.Probit(y, x, w=None, name_y='result', name_x=['dist','angle'], name_w=None, name_ds=None)
  File "/usr/local/lib/python3.7/site-packages/pysal/spreg/probit.py", line 807, in __init__
    n = USER.check_arrays(y, x)
  File "/usr/local/lib/python3.7/site-packages/pysal/spreg/user_output.py", line 359, in check_arrays
    if not spu.spisfinite(i):
  File "/usr/local/lib/python3.7/site-packages/pysal/spreg/sputils.py", line 267, in spisfinite
    return np.isfinite(a.sum())
  File "/usr/local/lib/python3.7/site-packages/numpy/core/_methods.py", line 36, in _sum
    return umr_sum(a, axis, dtype, out, keepdims, initial)
TypeError: cannot perform reduce with flexible type

通常,我只得到DeprecationWarning,但代码有效。从今天开始,代码不起作用。考虑到我目前正在使用pysal 1.14.4、numpy 1.16.2 和scipy 1.2.1。我没有将我的代码更新到pysal 2.0,因为我不知道如何将此代码移植到新版本(这就是我首先得到DeprecationWarning 的原因)。

这是文件:file.csv

你能帮我完成这项工作吗?

【问题讨论】:

能否请您发布足够多的“file.csv”来重现问题? 嗨!我刚刚用文件链接更新了原始帖子。 【参考方案1】:

x 中的条目是字符串,将它们转换为浮点数:

x = np.array(...).T.astype(np.float)

由于 file.csv 中的“NULL”值,这首先会失败,您需要将它们过滤掉或指定它们应转换为的浮点值。

在发布问题之前,请先尝试简单的谷歌搜索以立即获得答案。如果您将此错误与“pysal 1.14.4”一起搜索,您将立即找到此解决方案:

TypeError: cannot perform reduce with flexible type

【讨论】:

谢谢!我没有看到 NULL 值!这就是它不起作用的原因(之前的过程从来没有给我空值)。给它们一个特定的值是个好主意,以避免将来发生这种情况。再次感谢!

以上是关于突然,Probit 在 PySAL (1.14.4) 上不起作用的主要内容,如果未能解决你的问题,请参考以下文章

如何用SPSS软件进行probit模型分析

如何用Stata软件做一个多元probit回归,计量经济学

如何用Stata软件做一个多元probit回归,计量经济学

probit模型如何加入控制变量

为啥logit模型和probit模型结果相差很大

spss probit ic50