在R/Sweave中,我有一条由以下代码生成的曲线
\documentclass[a4paper,12pt]{article}
\usepackage{Sweave} %%%%%%
\SweaveOpts{eps=TRUE}
\begin{document}
<<echo=FALSE, results=hide>>=
test.frame<-data.frame(ratio= c(0.0, 144.321, 159.407, 178.413, 202.557), value= c(0, 0.84, 0.8925, 0.945, 0.9975))
@
<<echo=FALSE,results=hide,eval=TRUE>>=
postscript('doudou.eps',
width=7, height=6,
colormodel="cmyk",
family = "ComputerModern",
horizontal = FALSE,
onefile=FALSE,
paper = "special",
encoding = "TeXtext.enc",
pagecentre=FALSE)
with(test.frame,plot(ratio, value, ylab= "Hello",
xlab="Wonderful",
type="o",
bty="o",
lty="solid",
lwd=3,
pch=1,
xaxp=c(0, 200, 4),
xlim=c(0,200),
yaxt = "n",
main=" My curve"))
axis(2,seq(0,1, by=0.5), las=2,cex=3,cex.lab=2,cex.axis=1.5,cex.main=2)
dev.off()
@
\begin{figure}[htbp]
\begin{center}
\includegraphics[width=0.8\textwidth]{doudou.eps}
\end{figure}
\end{document}该曲线具有x = +\sqrt(y)行为。我需要从曲线的第一个点开始绘制最大斜率,该点与初始曲线斜率相切。如何用R计算参数,得到直线的方程式?
一种近似的解决方案是找到一条最佳拟合线,但数据集的初始点(0,0)不构成拟合线的一部分(我们得到的y-截距不是零)。
非常感谢。
发布于 2011-12-04 04:20:22
你的图表有五个点:一个在0,四个在144和203之间,所以我认为你不能对0附近的行为说太多。
test.frame<-data.frame(ratio= c(0.0, 144.321, 159.407, 178.413, 202.557),
value= c(0, 0.84, 0.8925, 0.945, 0.9975))
with(test.frame,plot(ratio, value, ylab= "Hello", xlab="Wonderful", type="o",
bty="o", lty="solid", lwd=3, pch=1, xaxp=c(0, 200, 4),
xlim=c(0,200), yaxt = "n", main=" My curve") )
axis(2,seq(0,1, by=0.5), las=2,cex=3,cex.lab=2,cex.axis=1.5,cex.main=2)

可以使用以下命令获得第一个线段的斜率
> with(test.frame, (value[2]-value[1])/(ratio[2]-ratio[1]) )
[1] 0.005820359或者,您可以将一条线穿过限制为穿过原点的所有点
> with(test.frame, lm(value ~ ratio - 1 ) )
Coefficients:
ratio
0.005325 或者,您可以使用平方根函数,我认为(但不确定)您可能打算这样做
> with(test.frame, lm(value ~ sqrt(ratio) - 1 ) )
Coefficients:
sqrt(ratio)
0.07037 但在这种情况下,请注意y = 0.07 sqrt(x)的切线的梯度在0处是无限的。
https://stackoverflow.com/questions/8366592
复制相似问题