簡體   English   中英

使用 R 中的 Survey 包的單向方差分析

[英]One-way anova using the Survey package in R

我正在嘗試確定在復雜調查設計上運行單向 Anova的最佳方法。 在閱讀了Lumley 的調查包文檔后,我一點也不聰明。

調查::anova 函數旨在“擬合和比較復雜調查數據的分層對數線性模型”,這不是我正在做的。

我正在嘗試做的事情是我收集了關於一個分類自變量 [3 個級別] 和一個定量因變量的數據。 我想使用方差分析來檢查因變量是否根據自變量的水平而變化。

這是我的過程的一個例子:

加載測量包並創建復雜的測量設計對象

library(survey)

df <- data.frame(sex = c('F', 'O', NA, 'M', 'M', 'O', 'F', 'F'),
                 married = c(1,1,1,1,0,0,1,1),
                 pens = c(0, 1, 1, NA, 1, 1, 0, 0),
                 weight = c(1.12, 0.55, 1.1, 0.6, 0.23, 0.23, 0.66, 0.67))

svy_design <- svydesign(ids=~1, data=df, weights=~weight)

借用這里的這篇文章

方法1:使用survey::aov

summary(aov(weight~sex,data = svy_design))

但是我收到一條錯誤消息:

Error in h(simpleError(msg, call)) : 
  error in evaluating the argument 'object' in selecting a method for function 'summary': object 'api00' not foun

方法2:使用survey::glm代替anova

同一篇文章有​​一個反對使用方差分析的答案/解釋:

根據我們研究所的主要統計學家的說法,在任何常見的建模環境中都不容易實現這種分析。 原因是 ANOVA 和 ANCOVA 是線性模型,在 70 年代通用線性模型(后來的廣義線性模型 - GLM)出現后沒有進一步發展。 正常的線性回歸模型產生與 ANOVA 幾乎相同的結果,但在變量選擇方面更加靈活。 由於 GLM 存在加權方法(參見 R 中的調查包),因此沒有真正需要為 ANOVA 中的分層抽樣設計開發加權方法......只需使用 GLM 代替。

summary(svyglm(weight~sex,svy_design))

我得到了這個輸出:

call:
svyglm(formula = weight ~ sex, design = svy_design)

Survey design:
svydesign(ids = ~1, data = df, weights = ~weight)

Coefficients:
            Estimate Std. Error t value Pr(>|t|)   
(Intercept)   0.8730     0.1478   5.905  0.00412 **
sexM         -0.3756     0.1855  -2.024  0.11292   
sexO         -0.4174     0.1788  -2.334  0.07989 . 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for gaussian family taken to be 0.04270091)

Number of Fisher Scoring iterations: 2

我的問題:

  1. 為什么方法1會拋出錯誤?
  2. 是否可以使用survey::aov 函數來實現我的目標?
  3. 如果我要使用survey::glm [方法2],我應該查看哪個值來確定均值的差異? 會是截距的p值嗎?

我與統計愛好者相去甚遠,請用最簡單的術語解釋一下。 謝謝!!

沒有像survey::aov這樣的功能,所以你不能用它來實現你的目標。 您的代碼使用stats::aov

您可以使用survey::svyglm 我將使用包中的一個示例,因此我可以實際運行代碼

> model<-svyglm(api00~stype, design=dclus2)
> summary(model)

Call:
svyglm(formula = api00 ~ stype, design = dclus2)

Survey design:
dclus2<-svydesign(id=~dnum+snum, weights=~pw, data=apiclus2)

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)   692.81      30.28  22.878  < 2e-16 ***
stypeH        -94.47      27.66  -3.415  0.00156 ** 
stypeM        -50.46      23.01  -2.193  0.03466 *  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for gaussian family taken to be 17528.44)

Number of Fisher Scoring iterations: 2

共有三種學校類型, EMH 這里的兩個系數估計E的均值與其他兩組的均值之間的差異,$p$ 值檢驗HE具有相同均值以及ME具有相同均值的假設。

如果您想要對三組之間的均值差異進行整體測試,您可以使用regTermTest函數,該函數測試模型中的一個術語或一組術語,例如,

> regTermTest(model,~stype)
Wald test for stype
 in svyglm(formula = api00 ~ stype, design = dclus2)
F =  12.5997  on  2  and  37  df: p= 6.7095e-05 

該 F 測試類似於stats::aov給出的一個。 不相同,因為這是調查數據

暫無
暫無

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

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