#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
.