如何在R中绘制衰减曲线?
我试着从网络上编写代码来绘制衰减曲线,但我从来没有得到一个有点同时有衰减曲线的图形。取而代之的是一个散点图,点之间用直线连接。任何帮助都会很棒。多谢各位 我确实使用了ggplot2:geom_点和geom_平滑、geom_线和其他选项如何在R中绘制衰减曲线?,r,R,我试着从网络上编写代码来绘制衰减曲线,但我从来没有得到一个有点同时有衰减曲线的图形。取而代之的是一个散点图,点之间用直线连接。任何帮助都会很棒。多谢各位 我确实使用了ggplot2:geom_点和geom_平滑、geom_线和其他选项 df <- read.table(text = "d weighted_LD 1.400 0.00002198 1.450 0.00001849 1.500 0.00001652 1.550
df <- read.table(text =
"d weighted_LD
1.400 0.00002198
1.450 0.00001849
1.500 0.00001652
1.550 0.00001673
1.600 0.00001067
1.650 0.00001647
1.700 0.00001861
1.750 0.00001903
1.800 0.00001949
1.850 0.00001966
1.900 0.00001781
1.950 0.00001327
2.000 0.00000964
2.050 0.00001383
2.100 0.00000492
2.150 0.00001325
2.200 0.00001706
2.250 0.00002061
2.300 0.00002108
2.350 0.00001343
2.400 0.00001627
2.450 0.00001545
2.500 0.00000920", header = TRUE)
df不清楚你所说的衰减曲线是什么意思
如果这是关于拟合形式为y=beta0*exp(beta1*x)
的一般指数模型,那么一个好的起点是log
-线性化数据并拟合线性模型:
fit <- lm(log(weighted_LD) ~ d, data = df);
fit;
#Call:
#lm(formula = log(weighted_LD) ~ d, data = df)
#
#Coefficients:
#(Intercept) d
# -10.5438 -0.2864
df$pred.y <- exp(predict(fit));
ggplot(df, aes(d, weighted_LD)) +
geom_line() +
geom_line(aes(d, pred.y), colour = "red", size = 1) +
labs(x = "d (cM)", y = "Weighted LD")
样本数据
df使用线性模型平滑指数衰减可能不是正确的做法:它适合模型y=a+B*exp(-x)
,而不是更常见的y=a*exp(-B*x)
。前者在A
处有一条渐近线,而不是在0
处,正如您对衰减曲线所期望的那样。@user2554330我根本不清楚这个问题是关于拟合模型还是关于如何绘制数据。OP需要澄清。大体上我同意你的观点,但“衰减曲线”在数学上是一个相当模糊的术语。这很公平。对您的答案的一个真正有用的改进是在同一个绘图上绘制函数中指定的数据和曲线(可能由nls()
,或者其他方式找到)。我知道如何在基本图形中做到这一点,但在ggplot2
@user2554330中却不知道。我的感觉是nls
会有点过分,尤其是考虑到OP的问题相当分散;我认为一个简单的log
线性化模型将是一个很好的起点。我添加了一个示例。谢谢,但我仍然不知道如何使用geom_函数
:-(。当软件的限制决定统计分析时,这是不好的。
ggplot(df, aes(d, weighted_LD)) +
geom_line() +
stat_function(fun = function(x) exp(coef(fit)[1] + coef(fit)[2] * x), colour = "red") +
labs(x = "d (cM)", y = "Weighted LD")
df <- read.table(text =
"d weighted_LD
1.400 0.00002198
1.450 0.00001849
1.500 0.00001652
1.550 0.00001673
1.600 0.00001067
1.650 0.00001647
1.700 0.00001861
1.750 0.00001903
1.800 0.00001949
1.850 0.00001966
1.900 0.00001781
1.950 0.00001327
2.000 0.00000964
2.050 0.00001383
2.100 0.00000492
2.150 0.00001325
2.200 0.00001706
2.250 0.00002061
2.300 0.00002108
2.350 0.00001343
2.400 0.00001627
2.450 0.00001545
2.500 0.00000920", header = T)