2017-02-18 3 views
0

У меня есть следующие пункты данных:Мимические минимизировать функцию из Python в R

xdata выглядит следующим образом.

1000.00 
300.00 
100.00 
30.00 
10.00 
3.00 
1.00 
0.30 
0.10 
0.03 
0.01 
0.00 

ydata выглядит следующим образом.

91.8 
95.3 
100 
123 
203 
620 
1210 
1520 
1510 
1520 
1590 
1620 

Я бегу следующие команды в Python:

results = minimize(fit.dataFit,cParams,args=(xdata,np.array(ydata))) 
curve = np.array(ydata)+results.residual 
Std = [list(i) for i in zip(xdata,ydata, curve)] 

Моя основная проблема заключается в невозможности отслеживать поток изменений данных. dataFit выполняет следующие операции:

y_model = (ymax*xdata/(ec50 + xdata)) + Ns* xdata + ymin return y_model - ydata

где

  1. ymax = 1624.75
  2. ymin = 91.85
  3. ec50 = 3
  4. Ns = 0.2045514

Наконец, минимизируют вызывается из следующей библиотеки:

from lmfit import minimize,Minimizer,Parameters,Parameter,report_errors,report_fit

Результаты, которые я получаю за Std в питона являются:

110 
49.1 
52.4 
121 
299 
688 
1110 
1420 
1550 
1590 
1610 
1620 

Я пытаюсь повторить те же результаты в R или в Excel. Достаточно одного. Проблема, которую я испытываю, заключается в том, что я не могу точно имитировать то же поведение, что и minimize (что минимизирует наименьшие квадраты) и residual. Я попытался найти соответствующие библиотеки в R с функциями minimize и residual; однако я не смог найти (и не использовать его правильно), что дало мне те же результаты, что и в Python.

Когда я нахожу график xdata, ydata, а результаты minimize (которые я изложил выше), я получаю следующий график в Python. В конечном счете, я хотел бы воспроизвести этот же график в R или Excel. enter image description here

Как продолжить? Я не эксперт в Python, поэтому я не могу правильно перенести код с Python на R или Excel.

+0

Заканчивать функцию 'НЛС' в R – gfgm

+0

Hi @ Gabriël-F-Гейслер-mesevage, я извиняюсь! Я исправляю и устраняю свое неправильное предположение. Как вы уже догадались, перечисленные элементы представляют собой начальные значения параметров для функции подгонки. – RanonKahn

ответ

1

Вы можете воспроизвести это в R, используя функцию nls(). Во-первых, я создал свои данные, чтобы его можно было прочитать в R.

## Replicate results from Python `minimize` with R `nls()` 
# First I load your data in 
df <- data.frame(xdata = c(1000.00,300.00,100.00,30.00,10.00,3.00,1.00,0.30, 
          0.10,0.03,0.01,0.00), 
       ydata = c(91.8,95.3,100,123,203,620,1210,1520,1510,1520,1590, 
          1620)) 

# Now we estimate the model via nonlinear least squares 
nls.fit <- nls(ydata ~ (ymax*xdata/(ec50 + xdata)) + Ns*xdata + ymin, data=df, 
    start=list(ymax=1624.75, ymin = 91.85, ec50 = 3, Ns = 0.2045514)) 

Я использую свои исходные значения параметров, хотя это не те ценности, что модель оседает на. Чтобы увидеть параметры типа nls.fit в консоли, и R отобразит информацию о установленной модели.

df$nls.pred <- fitted(nls.fit) # We extract the predicted values of the model 
head(df) # We can examine the values of `xdata`, `ydata` and our predictions 

    xdata ydata nls.pred 
1 1000 91.8 109.48985 
2 300 95.3 49.02029 
3 100 100.0 52.29715 
4 30 123.0 120.61060 
5 10 203.0 298.55367 
6  3 620.0 687.63743 

# We can see that the values we have obtained are very close to 
# what you obtained in the variable you named Std in python. 

# I now load the ggplot2 library to recreate your plot 
library(ggplot2) 
ggplot(df, aes(xdata, ydata))+geom_point(color='red')+ 
    geom_line(data=df, aes(xdata, nls.pred))+ 
    theme_classic()+ # This makes the background black and white as in your plot 
    scale_x_log10() # The axis in your post is logged 

+0

Уважаемый @Gabriel F Geisler Mesevage, я с благодарностью оцениваю ваш подробный ответ. Это помогло мне в создании интерактивной Std Curve для создания приложения R Shiny для моей исследовательской цели. , В качестве следующего шага к вышеупомянутому запросу я опубликовал связанный с глобальной кривой вопрос. http://stackoverflow.com/questions/42465934/dose-response-global-curve-fitting-using-r Можете ли вы посоветовать мне, как исправить проблему и продолжить график кривых? - Благодаря! – RanonKahn

Смежные вопросы