2012-12-12 7 views
7

Więc Im przy NLS w ggplot2 wykreślić Kod krzywej mocy jest poniżej:

mass <- c(4120,4740,5550,5610,6520,6870,7080,8500,8960,10350,10480,10550,11450,11930,12180,13690,13760,13800,14050,14700,15340,15790,15990,17300,18460,18630,18650,20050,23270,24530,25030,27540,28370,33460,33930,34450,34500) 

solv_acc <- c(2760,2990,2990,3180,3900,4010,4140,4680,4750,5330,4980,5860,5930,5570,5910,6790,6690,7020,6240,6620,6600,6860,7940,7600,8250,8530,7410,9160,9140,10300,10440,10390,11020,12640,11920,12110,12650) 

df <- data.frame(Mass=log(mass),Solv=log(solv_acc)) 

plotter <- (ggplot(df, aes(x=Mass, y=Solv)) + geom_point(shape=1) + stat_smooth(method = "nls", formula = y~i*x^z, start=list(i=1,z=0.2))) 
plotter <- plotter + labs(x = "Mass kDa" ,y = "Solvent Accessibility") 
print(plotter) 

Running powyższy kod pojawia się następujący błąd:

Error in pred$fit : $ operator is invalid for atomic vectors 

Zakładam, że błąd występuje, gdy próbuje użyć predict()?

Kiedy wykonać nls bez użycia ggplot2 na tej samej ramce danych nie pojawia się błąd

> nls1=nls(Solv~i*Mass^z,start=list(i=1,z=0.2),data=df) 
> predict(nls1) 
[1] 7.893393 7.997985 8.115253 8.123230 8.234519 8.273135 8.295350 8.429871 8.468550 8.574147 8.583270 8.588134 8.647895 8.677831 8.692939 8.777944 8.781648 8.783757 8.796793 8.829609 
[21] 8.860502 8.881445 8.890558 8.947512 8.994380 9.000995 9.001769 9.053953 9.161073 9.198919 9.213390 9.281841 9.303083 9.420894 9.430834 9.441670 9.442703 

Czy ktoś może wskazać, dlaczego otrzymuję błąd?

Odpowiedz

8

Na to pytanie można znaleźć odpowiedź na ten temat na question na liście dyskusyjnej ggplot2. Krótko,

According to the documentation for predict.nls, it is unable to create standard errors for the predictions, so that has to be turned off in the stat_smooth call. .

Więc musimy wyłączyć standardowe błędy:

ggplot(df, aes(x=Mass, y=Solv)) + 
    stat_smooth(method="nls", formula=y~i*x^z, se=FALSE, 
       start=list(i=1,z=0.2)) + 
    geom_point(shape=1) 
+0

+1 Dziękuję za znalezienie takiego rozwiązania. To mnie zaskoczyło. – Andrie

Powiązane problemy