R语言 用散点图拟合指数曲线

carvr3hs  于 2022-12-20  发布在  其他
关注(0)|答案(1)|浏览(389)

我开始使用R,遇到了一点问题。我有一个包含20个点的数据集,在这些点上测量叶片温度和呼吸,称为ADC_dark。
我期望一个指数关系,即叶片温度的增加导致呼吸作用的增加然后我用这个图画了一条指数曲线:

  1. ADC_dark %>%
  2. ggplot(aes(x=Tleaf, y=abs_A))+
  3. geom_point()+
  4. stat_smooth(method='lm', formula = log(y)~x)+
  5. labs(title="Respiration and leaf temperature", x="Tleaf", y="abs_A")

这条线看起来不太好,对应的公式是y = -2.70206 * e^(0.11743*x)

  1. Call:
  2. lm(formula = log(ADC_dark$abs_A) ~ ADC_dark$Tleaf)
  3. Residuals:
  4. Min 1Q Median 3Q Max
  5. -2.0185 -0.1059 0.1148 0.2698 0.6825
  6. Coefficients:
  7. Estimate Std. Error t value Pr(>|t|)
  8. (Intercept) -2.70206 0.51255 -5.272 5.18e-05 ***
  9. ADC_dark$Tleaf 0.11743 0.02161 5.435 3.66e-05 ***
  10. ---
  11. Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 1
  12. Residual standard error: 0.5468 on 18 degrees of freedom
  13. Multiple R-squared: 0.6213, Adjusted R-squared: 0.6003
  14. F-statistic: 29.54 on 1 and 18 DF, p-value: 3.659e-05

当我在excel中使用相同的数据时,我得到了这个:

正如你所看到的,这些建议的指数关系之间的截距不同。仅仅看一下图片,我就会说excel做得更好。
我如何训练R通过我的数据做出更好的拟合曲线,或者我误解了什么?

zz2j4svz

zz2j4svz1#

问题是,当你在ggplot2内拟合开始平滑使用log(y) ~ x时,你的数据点和拟合线的比例是不同的。基本上你在相同的y比例下绘制ylog(y),因为y > log(y)对于任何正的y,你的拟合图移动低于你的数据点。
你有几个选择,比如调整轴和尺度,或者只使用带有对数链接的glm广义线性模型代替lm。在这种情况下,尺度将被保留,没有额外的调整。

  1. library(ggplot2)
  2. set.seed(123)
  3. ADC_dark <- data.frame(Tleaf = 1:20,
  4. abs_A = exp(0.11*x - 2.7 + rnorm(1:20) / 10))
  5. ADC_dark %>%
  6. ggplot(aes(x = Tleaf, y = abs_A))+
  7. geom_point()+
  8. geom_smooth(method = "glm", type = "response", formula = y ~ x, method.args = list(family = gaussian(link = "log")))+
  9. labs(title = "Respiration and leaf temperature", x = "Tleaf", y = "abs_A")

输出:

展开查看全部

相关问题