2012-12-12 27 views
7

因此,進出口使用GGPLOT2 NLS繪製功率曲線代碼如下:

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) 

運行上面的代碼中,我得到以下錯誤:

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

我假設當它試圖使用predict()時發生錯誤?

當我不相同的數據幀上使用GGPLOT2的執行nls我沒有得到一個錯誤

> 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 

任何人都可以指出爲什麼我收到錯誤?

回答

8

您的問題在ggplot2郵件列表上的question回答。簡單地說,

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

所以,我們需要關閉的標準誤差:

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謝謝你找到這個解決方案。它讓我感到困惑。 – Andrie