簡體   English   中英

R中具有許多自變量(固定效應)的非線性模型

[英]Nonlinear model with many independent variables (fixed effects) in R

我正在嘗試使用將近50個變量擬合非線性模型(因為存在固定年限的影響)。 問題是我有太多變量,無法像上面那樣寫下完整的公式

nl_exp = as.formula(y ~ t1*year.matrix[,1] + t2*year.matrix[,2] 
                        +... +t45*year.matirx[,45] + g*(x^d))
nl_model =  gnls(nl_exp, start=list(t=0.5, g=0.01, d=0.1))

其中y是二進制響應變量, year.matirx是45列的矩陣(指示45個不同的年份), x是自變量。 需要估計的參數是t1, t2, ..., t45, g, d

對於t1, ..., t45, g, d我有很好的起始值。 但是我不想為這種非線性回歸寫一個長公式。

我知道如果模型是線性的,則表達式可以使用

l_model = lm(y ~ factor(year) + ...)
  1. 我在gnls函數中嘗試了factor(year) ,但它不起作用。
  2. 此外,我也嘗試過

    nl_exp2 = as.formula(y ~ t*year.matrix + g*(x^d))

    nl_model2 = gnls(nl_exp2, start=list(t=rep(0.2, 45), g=0.01, d=0.1))

它還返回我錯誤消息。

那么,有沒有簡單的方法可以寫下非線性公式和R的起始值?

由於您沒有提供任何示例數據,因此我編寫了自己的示例數據-完全沒有意義,並且該模型實際上不起作用,因為它的數據覆蓋率很差,但是很容易理解:

y <- 1:100
x <- 1:100
year.matrix <- matrix(runif(4500, 1, 10), ncol = 45)

start.values <- c(rep(0.5, 45), 0.01, 0.1) #you could also use setNames here and do this all in one row but that gets really messy
names(start.values) <- c(paste0("t", 1:45), "g", "d")
start.values <- as.list(start.values)

nl_exp2 <- as.formula(paste0("y ~ ", paste(paste0("t", 1:45, "*year.matrix[,", 1:45, "]"), collapse = " + "), " + g*(x^d)"))

gnls(nl_exp2, start=start.values)

這可能不是最有效的方法,但是由於您可以將字符串傳遞給as.formula因此使用paste命令來構造您要嘗試的操作非常容易。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM