【发布时间】:2021-04-01 21:23:11
【问题描述】:
我有一个格式如下的数据集:
dataset1 = data.frame(
caliber = c("5000", "2500", "1250", "625", "312.5", "156", "80", "40", "20", "0"),
var1 = c(NA, NA, NA, 30458, 13740,11261, 9729, 5039, 3343, 367),
var2 = c(463000, 271903, 154611,87204, 47228, 28082, 14842, 8474, 5121, 1308),
var3 = c(308385, 184863, 89719, 48986, 27968, 18557, 9191, 5248, 3210, 703),
var4 = c(290159, 149061, 64045, 36864, 19092, 12515, 6805, 3933, 2339, 574),
var5 = c(270801, 163657, 51642, 48197, 23582, 14544, 7877, 4389, 2663, 482),
var6 = c(NA, NA, NA, 37316, 21305, 11823, 5692, 3070, 1781, 363))
描述口径与其他变量之间关系的最佳方式是使用 2 次多项式方程:var = poly(caliber, 2, raw=T)
我的问题是如何使用一组新的变量来识别 calibre 变量的值。正如你在下面看到的,我已经有了每个变量的结果,但是我需要确定口径的值。
dataset2 = data.frame(
caliber = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
var1 = c(1120, 1296, 1132, 1280, 1096, 1124, 1004, 8384, 1072, 1104, 1568, 1044, 1108, 1012),
var2 = c(5044, 4924, 5088, 4804, 4824, 4844, 4964, 4788, 4804, 4964, 4824, 4788, 4844, 4944),
var3 = c(2836, 2744, 2744, 2668, 2688, 2940, 2756, 2720, 2668, 2892, 2636, 2700, 2836, 2668),
var4 = c(8872, 61580, 3036, 4468, 12132, 3000, 7920, 6868, 6896, 9392, 4728, 6896, 21076, 3228),
var5 = c(2312, 4236, 1928, 4448, 2388, 2108, 3644, 3060, 2168, 1912, 1812, 3528, 4100, 2176),
var6 = c(1156, 1228, 1224, 1364, 1128, 1176, 1184, 1640, 1188, 1300, 1332, 1176, 1176, 1152))
我知道有关此主题的一些先前主题,例如
- predict x values from simple fitting and annoting it in the plot
- Predict X value from Y value with a fitted model
- get x-value given y-value: general root finding for linear / non-linear interpolation function
- aproxfun function from binsmooth package, find x from y value
但没有任何帮助。主要问题是:
formula <- lm(var2~poly(caliber,2,raw=T), dataset1)
approx(x = formula$fitted, y = formula$caliber, xout = 0)$y
公式$caliber的NA值
mod<-lm(var2~poly(caliber, 2, raw=T), data=dataset1); summary(mod)
newdata=data.frame("var2"=dataset2[1:24,c("var2")])
pred<-predict(mod,newdata, type = 'response')
poly(caliber, 2, coefs = list(alpha = c(998.35, 3691.21383929929 :object 'caliber' not found) 中的错误
无法将预测传递到另一个数据集
具有不同行的数据集
X 和 Y 之间的插值给出了错误的值
【问题讨论】:
-
如果您包含一个简单的reproducible example,其中包含可用于测试和验证可能解决方案的示例输入和所需输出,则更容易为您提供帮助。不要发布数据图片,因为那样我们无法将数据复制到 R 中。您已经找到了相关的问题,这些问题很好,但是您根据之前的问题尝试了哪些代码。如果您展示您尝试过的代码并准确描述该代码是如何不工作的,那么为您提供帮助会更容易。
-
根据同行要求调整
-
您已经使用
caliber作为自变量而var2是因变量来校准或开发模型。但是您的newdata没有caliber。这就是你收到错误的原因。 -
是的,我知道。问题是如何使用dataset1生成的多项式回归模型来预测dataset2的口径。
-
这种情况下
caliber应该是因变量,var2应该是自变量。
标签: r regression prediction predict