r - 是否有用于从“beta + beta*t”之类的字符串创建公式的 R 函数?
问题描述
我正在运行交叉验证算法,以找到适合每天变化的数据的最佳多项式。我想找到一种简单的方法来在简单的图中显示拟合,而不必每次都手动编写整个回归公式和绘图的 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
功能。其次,使用predict
.
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)
curve
计算传递给其第一个参数的表达式。x
表示图的 x 值。它总是必须的x
!
推荐阅读
- actions-on-google - Google Assistant 的银行操作是否必须使用交易 API?
- jquery - 带有隐藏表单域的多选菜单框
- java - ProcessBuilder 函数用于从 Java 调用 C# .exe 文件导致程序挂起
- azure - 无法在 PowerShell 中将密钥添加到 Azure Key Vault -“未经授权”
- java - 使 ConstraintLayout 组件在一个简单的 UI 中填充整个显示
- go - 如何完全禁用 HTTP/1.x 支持
- c# - 如何使 2D 对象面向它移动的方向,就像漂移一样
- java - Java - 收到致命警报:handshake_failure
- xslt - XSLT - 在每一行上显示不同的节点数据(atm 第一个节点显示在所有行上)
- python - 在 python 中,为什么 0xbin() 返回 False?