Подгонка кривой в R - Нелинейная подгонка: кривая температурного отклика
Как вы можете видеть, я пытаюсь подогнать кривую к данным, но, похоже, она не корректно "изгибается" на обоих концах оси x.
Я использую функцию nlrq() в R. В идеале я хотел бы найти оптимальную температуру, подгоняя кривую температурного отклика.
Мой вопрос:
- Как мне подогнать кривую, чтобы лучше следить за точками данных? (Для этого графика я хотел бы найти большую кривизну в самой кривой.)
- Требуется ли для этого использование другой функции R?
Было бы замечательно, если бы у кого-нибудь были какие-либо идеи по этому поводу, я открыт (и пытался) использовать различные функции R. Спасибо!
Авторсценария:
adata<-subset(data, Treatment=="aCO2")
edata<-subset(data, Treatment== "eCO2")
graph<- ggplot(data=data, aes(x=Tleaf, y=A, shape= Treatment, fill=Treatment)) + geom_point(size=2) + scale_x_continuous (expand=c(0,0), limits = c(0,60)) + scale_y_continuous(expand = c(0, 0), limits = c(0,25)) + scale_fill_manual(values=c("orchid3","limegreen"))
tempresponse <- function(tmax, Amax, phi) {A <-(phi*tmax*Amax)/(phi*tmax+Amax)-0.5 return(A)}
qr1 <- nlrq(A ~ tempresponse(Tleaf, Asat, phi), data=adata, start = list(Asat=25.00, phi=2), tau = 0.95)
summary(qr1)
adata$predict1<-predict(qr1)
qr2 <- nlrq(A ~ tempresponse(Tleaf, Asat, phi), data=edata, start = list(Asat=25.00, phi=2), tau = 0.95)
summary(qr2)
edata$predict2<-predict(qr2)
graph + geom_line(data = adata, aes(x=Tleaf, y=predict1, colour="aCO2"), size=1) + geom_line(data = edata, aes(x=Tleaf, y=predict2, colour="eCO2"),size=1) + scale_colour_manual(values=c(aCO2="orchid4",eCO2="green4")) + labs(title=mytitle,x="Tleaf (mol m² s¹)",y="A (umol m² s¹)") + theme_classic() + scale_shape_manual(values=c(21,24)) + theme( axis.text.x =element_text(colour="black"), axis.text.y=element_text(colour="black"))
К сожалению, у меня огромный набор данных, поэтому я только что включил небольшое подмножество для контрольной обработки (aCO2). Дайте мне знать, если потребуется больше данных.
Данные:
structure(list(A=c(1.771300391,0.872906522,1.173757725, 1.457901641,2.008012294,1.144381423, 0.436038124,0.35554492,5.626408497,1.386333338,5.369568075,9.103550834,0.372938458,1.798202163,2.452058892,4.148990103,2.624227388,14.37401416, 1.053168086,0.591258151, 1.704200802, 8.043595025, 0.659375616,7.126891696, 5.634794593, 2.356663033, 4.645011092, 5.264363781,1.168007799, 2.678075898, 7.415954393, 11.8107612, 2.864701857, 4.587671971, 1.321942387,8.288765155, 4.829228133, 5.156779624,5.899663, 5.580920413, 9.130111349,5.682881883, 3.068479924, 4.661596406, 8.724987829, 4.104015807, 6.409303031, 9.28596278,10.46525749, 3.096035817, 5.361093648, 3.825743475, 8.428090506, 2.917948862, 1.929610513, 4.110901881, 7.329171546, 6.90626074, 6.568950917,7.168861931, 9.100652356, 9.449898766,5.756998565, 5.484114912, 5.019835688, 5.510624356, 11.26000418, 2.99329673, 5.311440917,8.170257613, 6.263255673, 5.551858311,4.16956211, 6.155467995, 5.565367779,6.789648175, 4.014469181, 13.5402248,6.17666554, 5.513399534, 6.806806227,4.263391554, 8.029855229, 5.218907275,4.466852096, 5.368631052, 8.012086379,3.767371375, 1.503040182, 4.505278935, 3.042379365, 5.604432686, 8.85255493, 14.29617663,14.91664342, 3.040487098, 4.786362296,7.267613238, 5.373444062, 2.011415824), Tleaf = c(12.3045, 12.33086667, 12.39818333, 12.506075,12.76401667, 12.88464, 13.011525, 13.10804,13.2797, 13.47936667, 13.544, 13.5592, 13.60034, 13.66123333, 13.70948333, 13.78274, 13.79138333, 13.84036667, 13.88025, 13.8955, 13.92424286, 13.9592, 13.96106, 14.0385, 14.04413333, 14.16735714, 14.19331667, 14.201925, 14.33206667, 14.33933333, 14.3745, 14.47971667, 14.49485, 14.61745,14.66368333, 14.67094, 14.76426667, 14.78586667, 14.81126667, 14.818725, 14.90775, 14.984675, 15.04658, 15.05843333, 15.0607, 15.06493333, 15.08073333, 15.08334, 15.1038, 15.1283, 15.183,15.20016667, 15.2069, 15.258025, 15.2816,15.41673333, 15.44446667, 15.46614, 15.52606667, 15.58053333, 15.6111, 15.6326,15.6328, 15.70298333,15.72886667, 15.75262857, 15.75426667,15.75704, 15.77655, 15.80888,15.90685,15.94525, 15.95226667,15.97647238,15.97990794, 16.00691746,16.0378, 16.09526667, 16.10111905, 16.1281, 16.14651667, 16.17153333, 16.19583333, 16.19743333,16.203, 16.21244, 16.25021667, 16.25962,16.29893333, 16.31, 16.31552, 16.32326667, 16.35616, 16.41556667, 16.42626667, 16.43966667,16.47313333, 16.496, 16.497, 16.50213333)), row.names = c(NA, -100L), class = c("tbl_df", "tbl","data.frame"))
Заранее спасибо.