У меня есть набор данных в следующем формате:
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)
Мой вопрос заключается в том, как я мог бы использовать новую группу переменных для определения значения переменной калибра. Как вы можете видеть ниже, у меня уже есть результаты для каждой переменной, но мне нужно определить значение калибра.
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
Значение NA для формулы $caliber
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): объект 'калибр' не найден
невозможно передать прогноз в другой набор данных
наборы данных с разными строками
интерполяция между X и Y дала неправильные значения
скорректировано по запросу коллеги
Вы откалибровали или разработали модель, используя caliber
в качестве независимой переменной, а var2
в качестве зависимой переменной. Но у твоего newdata
нет caliber
. вот почему вы получаете ошибку.
Да, я знаю это. Проблема заключается в том, как предсказать калибр набора данных2, используя модель полиномиальной регрессии, созданную с использованием набора данных1.
В такой ситуации caliber
должна быть зависимой переменной, а var2
должна быть независимой переменной.
В соответствии с обсуждениями, что я понял, я предлагаю вам следующее решение
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
предоставят вам значения калибра в наборе данных2.
Я исправил ваш набор данных1. Если вы поместите значения в двойные кавычки, они станут символьными. Итак, я удалил двойные кавычки из переменной caliber
.
Это сработало, спасибо. Калибр был числовым, но я до сих пор не знаю, что я делал не так.
Когда вы хотите что-то предсказать, вы должны указать x, то есть независимую переменную. Но ваш dataset2
содержит caliber
NA, а ваш newdata
не содержит caliber
. Вот что говорит ваша ошибка object 'caliber' not found
.
Вам будет легче помочь, если вы включите простой воспроизводимый пример с образцом ввода и желаемым результатом, который можно использовать для тестирования и проверки возможных решений. Не публикуйте изображения данных, потому что тогда мы не сможем скопировать данные в R. Вы нашли связанные вопросы, и это хорошо, но какой именно код вы попробовали, основываясь на этих предыдущих вопросах. Вам будет легче помочь, если вы покажете, какой код вы пробовали, и точно опишите, почему этот код не работает.