从R转换为Python,尝试理解一行

时间:2019-03-09 20:16:44

标签: python r

我有一个很简单的问题。我一直在将一些统计分析代码从R转换为Python。到现在为止,我的表现还不错,但是我被困在这条线上:

nlsfit <- nls(N~pnorm(m, mean=mean, sd=sd),data=data4fit,start=list(mean=mu, sd=sig), control=list(maxiter=100,warnOnly = TRUE))

基本上,该程序正在计算适合一组数据的非线性最小二乘法,即“ nls”命令。在原始文本中,“波浪号”看起来像“ enye”,我不确定这是否有意义。

据我了解,Python中的pnorm等效于scipy.stats中的norm.cdf。我想知道的是,在调用pnorm函数之前,“波浪号/ enye”会做什么。 “ m”是预定义变量,而“ mean”和“ sd”则不是。

我还找到了一些代码,基本上是用Python复制nls:nls Python code,但是,由于发布日期(2013年),我想知道是否还有更新的等效代码,最好用Pyton 3编写

任何建议,谢谢!

1 个答案:

答案 0 :(得分:1)

这最小化了

sum((N - pnorm(m, mean=mean, sd=sd))^2)

使用mean中指定的sdstart的起始值。它将最多执行100次迭代,并且在收敛之前终止的情况下将返回而不是发信号通知错误。

nls的第一个参数是R formula,它指定了代数,其中代字号(N)的左手边是因变量,而右边是函数参数(meansd)和用于预测它的数据(m)。

请注意,formula对象在R中没有固定的含义,而是每个函数都可以按其喜欢的任何方式解释它们。例如,formula使用的nls对象的解释与formula使用的lm对象的解释不同。在nls中,公式y ~ a + b * x用于指定线性回归,但在lm中,相同的回归将表示为y ~ x

请参见?pnorm?nls?nls.control?formula