【问题标题】:Predict X value from Y value with a fitted 2-degree polynomial model使用拟合的 2 次多项式模型从 Y 值预测 X 值
【发布时间】: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))

我知道有关此主题的一些先前主题,例如

但没有任何帮助。主要问题是:

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


【解决方案1】:

根据讨论,我所了解的,我为您提供以下解决方案

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))

formula <- lm(caliber ~ poly(var2, degree = 2, raw=T), dataset1)

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(formula, dataset2, type = 'response')

predict 函数的输出将为您提供 dataset2 中 calibre 的值。

我已更正您的数据集1。如果将值放在双引号内,它就会变成字符。所以,我已经从 caliber 变量中删除了双引号。

【讨论】:

  • 成功了,谢谢。口径是数字,但我仍然不知道我做错了什么。
  • 当你想预测某事时,你必须提供 x 即自变量。但是您的dataset2 包含caliber NA,而您的newdata 不包含caliber。这就是你的错误所说的object 'caliber' not found
猜你喜欢
  • 2017-09-05
  • 2020-12-06
  • 2015-10-30
  • 2019-05-08
  • 1970-01-01
  • 2022-01-14
  • 2019-02-05
  • 1970-01-01
  • 2018-11-13
相关资源
最近更新 更多