r - 是否有 R 函数用于从 "beta + beta*t"这样的字符串创建公式?

标签 r function plot line

我正在运行交叉验证算法来找到最适合每天变化的数据的多项式。我想找到一种在简单图中显示拟合的不麻烦的方法,而不必每次都手动编写整个回归公式和绘图的 beta 系数。对于回归公式,求解很简单,我使用 sprintf 创建一个字符串,并在该字符串上使用 as.formula() 。

问题在于绘制线条。我以相同的方式创建一个字符串,但 as.formula() 函数似乎只适用于回归公式,而不适用于“beta + beta*t”形式的公式。我也尝试过使用 eval(parse()) ,如下所示,但这只会创建 NA 的向量。

#Create strings
poly_form = "y ~ t"
beta_form = "beta[1]"
for (i in 1:pmin) {  #pmin is the best polynomial fit, e.g. 4 or 9.
           poly_form <- sprintf("%s + I(t^%s)", poly_form, i)
           beta_form <- sprintf("%s + beta[%s]*t^%s",beta_form, i+1, i)
            }

#Regression
poly.mod = lm(as.formula(poly_form))
beta = coef(poly.mod)

#Plot
plot(t, y, type = 'h')
lines(t, eval(parse(text = beta_form))) #This doesn't work.

因此,本质上,如何使用我创建的字符串作为lines函数输入的一部分,自动生成与此相同的输出:

lines(t, beta2[1] + beta2[2]*t + beta2[3]*t^2 + beta2[4]*t^3 + beta2[5]*t^4 + beta2[6]*t^5 + beta2[7]*t^6) 

最佳答案

这不是你应该做的事情。

首先,使用poly函数。其次,使用预测

set.seed(42)
y <- rnorm(10)
t <- 1:10

DF <- data.frame(y, t) #important!

pmin <- 3

poly.mod <- lm(y ~ poly(t, degree = pmin, raw = TRUE), data = DF)

plot(t, y, type = 'h')
curve(predict(poly.mod, newdata = data.frame(t = x)), add = TRUE)

resulting plot

curve 计算传递给其第一个参数的表达式。 x 表示绘图的 x 值。它始终必须是x!

关于r - 是否有 R 函数用于从 "beta + beta*t"这样的字符串创建公式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63409772/

相关文章:

list - 如何避免R中的循环:从列表中选择项目

R - 使用 tmap() 绘图不显示图例

r - 绘制 R map 的循环中有什么问题?

python - 如何在 Python 中对 Matplotlib 进行线程化?

r - 向量串联函数结果上不需要的排序行为

r - 对从 Rscript.exe 调用的 R 脚本进行故障排除

r - 从 R 中的函数在数据框中创建新列

function - 火卫一的纯度降低

JavaScript 变量声明前后?

plot - 如何在 Julia 上绘制矢量场?