簡體   English   中英

R:自舉多重回歸

[英]R: Bootstrap Multiple Regression

我正在嘗試進行多元回歸分析,以找出水質對特定位置(又名 Guzzler)浮游生物豐度的影響。 我能夠運行我的模型和摘要,但是數據是非參數的,因此典型的摘要是不可靠的。 這主要是由於樣本量較小,因為它是在幾周的過程中完成的,並且每周進行一個樣本。

然后我在想這個的非參數版本可能是一個引導程序。 我以前在其他數據上運行過引導程序,但從未運行過多元回歸模型。 我似乎無法找到有關如何進行此操作的代碼,因此從我過去執行引導程序的方式開始。 我很好奇我需要編輯什么才能運行這個引導程序。

這是 dput(head(Guzzler1) 的輸出:

    structure(list(Abundance = c(98L, 43L, 65L, 55L, 54L), Phospates = c(2L, 
2L, 2L, 2L, 2L), Nitrates = c(0, 0.3, 0, 0.15, 0), pH = c(7.5, 
8, 7.5, 7, 7)), .Names = c("Abundance", "Phospates", "Nitrates", 
"pH"), row.names = c(NA, 5L), class = "data.frame")

這是我的模型和摘要:

    Guzzler1model<-lm(Abundance ~ Phospates + Nitrates + pH, data=Guzzler1)
> summary(Guzzler1model)

Call:
lm(formula = Abundance ~ Phospates + Nitrates + pH, data = Guzzler1)

Residuals:
     1      2      3      4      5 
 20.75  -4.25 -12.25   8.50 -12.75 

Coefficients: (1 not defined because of singularities)
            Estimate Std. Error t value Pr(>|t|)
(Intercept)   -80.25     209.62  -0.383    0.739
Phospates         NA         NA      NA       NA
Nitrates     -135.00      90.02  -1.500    0.272
pH             21.00      28.87   0.727    0.543

Residual standard error: 20.41 on 2 degrees of freedom
Multiple R-squared:  0.5302,    Adjusted R-squared:  0.06032 
F-statistic: 1.128 on 2 and 2 DF,  p-value: 0.4698

***請注意:我相信磷酸鹽有 NA,因為在這個特定位置每個值都等於 2。

這是我最初執行引導程序但不確定要更改什么的方式:

n=length(Guzzler1Abundance)
B = 1000
results = numeric(B)
for(b in 1:B){
  i = sample(x = 1:n, size=n, replace=TRUE)
  bootSample = Guzzler1Abundance[i]
  thetahat= mean(bootSample)
  results[b] = thetahat
}

非常感謝您!

我不太清楚你所說的非參數數據是什么意思,但我明白,你想從你的數據中獲取引導樣本並用它執行線性回歸。

一種可能的方法是

Guzzler1 <-  structure(list(Abundance = c(98L, 43L, 65L, 55L, 54L), Phospates = c(2L, 
                      2L, 2L, 2L, 2L), Nitrates = c(0, 0.3, 0, 0.15, 0), pH = c(7.5, 
                      8, 7.5, 7, 7)), .Names = c("Abundance", "Phospates", "Nitrates", 
                      "pH"), row.names = c(NA, 5L), class = "data.frame")
lines <- nrow(Guzzler1)
replicate(5, lm(Abundance ~ Phospates + Nitrates + pH, 
                         data=Guzzler1[sample(lines, replace = TRUE),])$coefficients)

這將報告來自 5 個這樣的線性回歸的系數

> replicate(5, lm(Abundance ~ Phospates + Nitrates + pH, 
+                          data=Guzzler1[sample(lines, replace = TRUE),])$coefficients)
                 [,1]       [,2]      [,3]       [,4] [,5]
(Intercept)  65.00000 145.000000 -408.0000 145.000000 -100
Phospates          NA         NA        NA         NA   NA
Nitrates    -73.33333   6.666667 -256.6667   6.666667 -110
pH                 NA -13.000000   66.0000 -13.000000   22

通過更改我的replicate調用的第一個參數,可以任意選擇更高的 5 個復制的數量。 正如@IRTFM 預測和解釋的那樣,許多NA值是由於數據稀缺所致。 隨着更多數據將被采樣,這將得到改善。

讓我們對 5000 個 bootstrap 樣本進行抽樣並研究硝酸鹽系數的分布:

reps <- replicate(5000, lm(Abundance ~ Phospates + Nitrates + pH, 
                           data=Guzzler1[sample(lines, replace = TRUE),])$coefficients)
plot(table(reps["Nitrates",]))
plot(ecdf(reps["Nitrates",]))
quantile(reps["Nitrates",], c(.025, .25, .5, .75, .975), na.rm = TRUE)

磷酸鹽可以編輯成這樣,其中一個有變體數據:

boxplot(reps["(Intercept)",], reps["Nitrates",], reps["pH",]
        , names = c("Intercept", "Nitrates", "pH"), ylab="bootstrapped coefficients")
abline(h=0, col="firebrick", lty=3)

在此處輸入圖片說明

暫無
暫無

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

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