У меня есть некоторые данные, синтетически сгенерированные из функции, которая показана ниже.
fn <- function(w1,w2){
f= -(0.1 + 1.3*w1 + 0.4*w2 - 1.8*w1*w1 - 1.8*w2*w2)
return(f)
}
Затем я создаю фрейм данных со значениями, как показано ниже.
x = data.frame(
yval = fn(seq(0.1,0.9,by=0.01),seq(1.1,0.3,by=-0.01)),
x1 = seq(0.1,0.9,by=0.01),
x2 = seq(1.1,0.3,by=-0.01)
)
Я хочу посмотреть, смогу ли я воссоздать коэффициенты полинома в fn, используя полиномиальную подгонку, которую я пытаюсь выполнить, как показано ниже.
fit = lm(yval ~ x1 + x2 + I(x1^2) + I(x2^2),data=x)
coef(fit)
Однако, когда я запускаю приведенный выше код, я получаю следующее
(Intercept) x1 x2 I(x1^2) I(x2^2)
2.012 -5.220 NA 3.600 NA
Похоже, что термин x2 никогда не был «обнаружен». Кто-нибудь знает, что я могу делать неправильно? Я знаю, что если я создам синтетические линейные данные и попытаюсь воссоздать коэффициенты с помощью lm, я получу коэффициенты довольно точно. Заранее спасибо.
x1
иx2
совершенно коллинеарны, поэтому параметры не могут быть оценены для обоих одновременно. R распознает это и устанавливает для одного из них значениеNA
. - person Ben Bolker   schedule 29.06.2013