簡體   English   中英

R:如何進行循環的多元線性回歸,從而將因子下降到<2級

[英]R: How to for loop a multiple linear regression which drops factors with <2 levels

我正在嘗試循環執行多元線性回歸並自動刪除沒有至少兩個級別的因子,以避免出現以下錯誤消息:

contrasts<-誤差contrasts<-*tmp* ,value = contr.funs [1 + isOF [nn]]):對比度只能應用於具有兩個或多個水平的因子*

現在我的代碼是:

df %>% 
  group_by(crop_name) %>% 
    do(tidy(lm(formula = value ~ intercrop + 
erosion_c + purchased_seed + inorg_pest +
 org_pest + landscape + fert + inorgfert,
             data = . )))

問題是,有些農作物的樣本量很大,我要回歸的所有變量都有很多點,而另一些農作物的樣本量很小,零接受給定的處理(即沒有間種有血果作物的作物等)。 )。

有沒有一種方法可以讓for循環告訴R退回它可以刪除的所有內容,並避免出現此錯誤消息?

我很新,所以這可能不是最好的方法。 您可能需要使用crop_name設置for循環,因為在我的示例中,df是一個作物組的子集。

df <- data.frame(intercrop = c("A","B","C","A","B","C"),
                   erosion_c = c("A","D","C","A","B","C"),
                   purchased_seed = c("A","B","D","F","E","C"),
                   inorg_pest = c("A","B","C","A","B","C"),
                   org_pest = c("A","B","A","A","B","B"),
                   landscape = c("A","A","A","A","A","A"),
                   fert = c("A","B","C","A","B","C"),
                   inorgfert = c("A","B","C","A","B","C")
                   )


yo <- sapply(df, levels)
hi <- as.data.frame(c(NA))
for(i in 1:length(yo)){
  hi[i] <- length(yo[[i]])
  names(hi)[i] <- names(df[i])
}

hi <- subset(as.data.frame(t(hi)), V1 >= 2)

formu <- row.names(hi)
formu <- as.formula(paste("value ~ ",gsub('.{3}$', '', paste( unlist(paste(formu,"+ ")), collapse=''))))

暫無
暫無

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

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