2016-06-16 143 views
-1

我從事的是團聚效應,我想用包nls2運行非線性迴歸。使用nls2包的非線性迴歸

我試圖運行這個模型有R

dens=runif(100) 
surf=rnorm(100, 10, 2) 
zone=seq(1,100,1) 
donnees<-data.frame(dens,surf,zone) 
attach(donnees) 
donnees$salaire<-rnorm(100, 1000,3)  
mp<-rep(0,100)  
MP<-rep(0,100) 
MPfonc<-function(alpha){  
for (i in 1:100){  
    for (j in 1:100){  
    if(j!=i){  
    mp[j]<- dens[j]/(surf[i]-surf[j])^alpha 
    } 
    }  
    MP[i]<-sum(mp)  
}  
    return(MP)  
} 

fo <- salaire ~ const+ gamma1*dens+gamma2*surf+gamma3*MPfonc(alpha) 

gstart <- data.frame(const = c(-100, 100), gamma1 = c(-10, 10), 
     gamma2 = c(-10, 10),gamma3 = c(-10, 10), alpha=c(-10, 10)) 
fm <- nls2(fo, start = gstart, alg = "plinear-random") 

它不運行,我認爲這是阿爾法的問題。 可以nls2函數接受函數(MP(alpha))作爲輸入嗎?

這裏是我的模型的規格:

nonlinear regression equations

回答

2

的問題是:

  • set.seed應設置爲使代碼可重複

  • salaire沒有定義 - 它在數據幀donnees中定義,但此後從未使用過210。

  • MPfoncsum呼叫求和元件包括NaN或NA元素,以便總和同樣未定義

  • 成爲plinear算法式的RHS必須評估到線性參數的係數的矩陣。

  • 對於plinear算法僅爲非線性參數提供初始值(即僅針對alpha)。

  • nls2包永遠不會加載。需要library聲明。

  • 代碼發佈到SO應縮進4個空格,以使其正確格式化(這是在編輯處理的問題)

  • 在問題的數學公式都不清楚在它們如何與這個問題並且缺少重要的元素,例如alpha。這需要清理。我們假設MPfonc給出了期望的結果並簡化了它。

以下內容更正了所有要點並增加了一些小改進。

library(nls2) 

set.seed(123) # for reproducibility 

dens <- runif(100) 
surf <- rnorm(100, 10, 2) 
zone <- seq(1, 100, 1) 
salaire <- rnorm(100, 1000, 3) 

MPfonc <- function(alpha) { 
    sapply(1:100, function(i) sum((dens/(surf[i] - surf)^alpha)[-i], na.rm = TRUE)) 
} 

fo <- salaire ~ cbind(1, dens, surf, MPfonc(alpha)) 
gstart <- data.frame(alpha = c(-10, 10)) 

fm <- nls2(fo, start = gstart, alg = "plinear-random") 

,並提供:

> fm 
Nonlinear regression model 
    model: salaire ~ cbind(1, dens, surf, MPfonc(alpha)) 
    data: parent.frame() 
    alpha  .lin1 .lin.dens .lin.surf  .lin4 
    0.90477 1001.20905 -0.50642 -0.12269 0.00681 
residual sum-of-squares: 757.6 

Number of iterations to convergence: 50 
Achieved convergence tolerance: NA 

注:

nls(fo, start = coef(fm)["alpha"], alg = "plinear") 

更新:一些代碼改進現在,我們有初始值,我們可以用nls像這樣使用它,更正和澄清。

+0

非常感謝。但爲什麼模型沒有收斂:實現了收斂容差:不適用。這是正常的? – THIOYE

+0

這是我第一次在這個網站上提出問題,因爲我發現我搜索的每一件東西都沒有提出問題。通常,所有數學都應該存在。但是我只專注於MPfonc,因爲其他人都是線性形式。我還有另一個問題,女巫算法應該適合我的模型?阿爾法影響他的估計的初始值? – THIOYE

+0

收斂在這裏沒有意義 - 這就是爲什麼它是NA。 'nls2'的目的是找到初始值。使用指定的'alg =',只需在50個隨機點評估模型,然後返回找到的最好模型。然後,您可以使用生成的coefs作爲'nls'中的起始值。 –