Преобразование из R в Python, попытка понять строку

#python #r

#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», я не уверен, имеет ли это значение.

Насколько я понимаю, эквивалентом pnorm в Python является norm.cdf из scipy.stats. Что я хочу знать, так это то, что делает «tilde / enye» перед вызовом функции pnorm. «m» — это предопределенная переменная, в то время как «mean» и «sd» — нет.

Я также нашел некоторый код, по существу воспроизводящий nls на Python: nls Python code, однако из-за даты публикации (2013) мне было интересно, есть ли какие-либо более поздние эквиваленты, предпочтительно написанные на Pyton 3.

Любой совет приветствуется, спасибо!

Ответ №1:

Как вы можете видеть из ?nls : первый аргумент в nsl является formula :

формула: формула нелинейной модели, включающая переменные и параметры. При необходимости будет приведено к формуле

Теперь, если вы это сделаете ?formula , мы можем прочитать это:

Модели соответствуют, например, функции lm и glm указаны в компактной символьной форме. Оператор ~ является базовым при формировании таких моделей. Выражение вида y ~ model интерпретируется как спецификация того, что ответ y моделируется линейным предиктором, символически заданным моделью

Следовательно, ~ в вашем случае nls соедините переменную response / dependent / regressand слева с регрессорами / объясняющими переменными в правой части вашего нелинейного метода наименьших квадратов.

Лучший!

Ответ №2:

Это сводит к минимуму

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

используя начальные значения для mean и sd , указанные в start . Он выполнит максимум 100 итераций и вернет вместо сигнализации ошибку в случае завершения до конвергенции.

Первым аргументом nls является R formula , который определяет регрессию, где левая сторона тильды ( N ) является зависимой переменной, а правая сторона — функцией параметров ( mean , sd ) и данных ( m ), используемых для ее прогнозирования.

Обратите внимание, что formula объекты не имеют фиксированного значения в R, а скорее каждая функция может интерпретировать их любым удобным ей способом. Например, formula объекты, используемые nls , интерпретируются иначе, чем formula объекты, используемые lm . В nls формула y ~ a b * x будет использоваться для указания линейной регрессии, но в lm та же самая регрессия будет выражена как y ~ x .

Смотрите ?pnorm , ?nls ?nls.control и ?formula .