1

我需要将我的数据拟合到 Beta 分布中并检索 alpha 参数。我正在尝试从 python (rpy2) 使用 R,我的代码如下所示:

from rpy2 import *
from rpy2.robjects.packages import importr
MASS = importr('MASS') #myVector is a Numpy array with values between 0 and 1
MASS.fitdistr(myVector,"beta")

但我得到这个错误:

Error in function (x, densfun, start, ...)  : 
  'start' must be a named list
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/dist-packages/rpy2/robjects/functions.py", line 82, in __call__
    return super(SignatureTranslatedFunction, self).__call__(*args, **kwargs)
  File "/usr/lib/python2.7/dist-packages/rpy2/robjects/functions.py", line 34, in __call__
    res = super(Function, self).__call__(*new_args, **new_kwargs)
rpy2.rinterface.RRuntimeError: Error in function (x, densfun, start, ...)  : 
  'start' must be a named list

我似乎找不到任何带有详细示例的 R 文档,所以我只找到了这个

start 一个命名列表,给出要使用初始值优化的参数。对于某些命名的分布,这可以省略(请参阅详细信息)。... 附加参数,用于 densfun 或 optim。特别是,它可用于通过下限或上限或两者指定边界。如果包含 densfun 的参数(或对应于字符串规范的密度函数),它们将保持固定。

我真的不知道:

  • 将什么作为起始参数以及这将如何影响我的估计
  • 在 Python 中使用什么语法,因为start=list(shape1=0.5, shape2=0.5)不会成功

有什么提示吗?

4

1 回答 1

2

好的,经过一点点挖掘,我找到了解决方案:

from rpy2.robjects import DataFrame
starter= DataFrame({'shape1':0.5,'shape2':0.5})
x = MASS.fitdistr(myValues, "beta", start=starter))
于 2012-07-19T10:48:33.657 回答