我开始使用R,遇到了一点问题。我有一个包含20个点的数据集,在这些点上测量叶片温度和呼吸,称为ADC_dark。
我期望一个指数关系,即叶片温度的增加导致呼吸作用的增加然后我用这个图画了一条指数曲线:
ADC_dark %>%
ggplot(aes(x=Tleaf, y=abs_A))+
geom_point()+
stat_smooth(method='lm', formula = log(y)~x)+
labs(title="Respiration and leaf temperature", x="Tleaf", y="abs_A")
这条线看起来不太好,对应的公式是y = -2.70206 * e^(0.11743*x)
Call:
lm(formula = log(ADC_dark$abs_A) ~ ADC_dark$Tleaf)
Residuals:
Min 1Q Median 3Q Max
-2.0185 -0.1059 0.1148 0.2698 0.6825
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -2.70206 0.51255 -5.272 5.18e-05 ***
ADC_dark$Tleaf 0.11743 0.02161 5.435 3.66e-05 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.5468 on 18 degrees of freedom
Multiple R-squared: 0.6213, Adjusted R-squared: 0.6003
F-statistic: 29.54 on 1 and 18 DF, p-value: 3.659e-05
当我在excel中使用相同的数据时,我得到了这个:
正如你所看到的,这些建议的指数关系之间的截距不同。仅仅看一下图片,我就会说excel做得更好。
我如何训练R通过我的数据做出更好的拟合曲线,或者我误解了什么?
1条答案
按热度按时间zz2j4svz1#
问题是,当你在
ggplot2
内拟合开始平滑使用log(y) ~ x
时,你的数据点和拟合线的比例是不同的。基本上你在相同的y
比例下绘制y
和log(y)
,因为y > log(y)
对于任何正的y
,你的拟合图移动低于你的数据点。你有几个选择,比如调整轴和尺度,或者只使用带有对数链接的
glm
广义线性模型代替lm
。在这种情况下,尺度将被保留,没有额外的调整。输出: