2013-06-29 78 views
1

我從下面顯示的函數合成生成一些數據。R在數據上擬合多項式

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重新創建係數,我會相當準確地返回係數。提前致謝。

+4

'x1'和'x2'完全共線,因此無法同時對兩個參數進行估計。 R認識到這一點,並將其中的一個設置爲「NA」。 –

回答

5

如果您適合2個預測變量的網格,則需要expand.grid

x <- expand.grid(x1=seq(0.1, 0.9, by=0.01), x2=seq(1.1, 0.3, by=-0.01)) 
x$yval <- with(x, fn(x1, x2)) 

fit = lm(yval ~ x1 + x2 + I(x1^2) + I(x2^2),data=x) 
coef(fit) 
(Intercept)   x1   x2  I(x1^2)  I(x2^2) 
     -0.1  -1.3  -0.4   1.8   1.8