簡體   English   中英

嵌套表格並使用R中的置信區間計算匯總統計量

[英]Nested tables and calculating summary statistics with confidence intervals in R

這個問題與統計程序R有關

數據

我有一個數據幀, study_data ,具有100行,每行代表一個不同的人,和三列, genderheight_category ,和freckles 可變gender是一個因素,取“男性”或“女性”的值。 變量height_category也是一個因素,取值為“高”或“短”。 freckles變量是一個連續的數字變量,指出一個人有多少雀斑。

以下是一些示例數據(為此,感謝Roland):

set.seed(42)
DF <- data.frame(gender=sample(c("m","f"),100,T),
      height_category=sample(c("tall","short"),100,T),
      freckles=runif(100,0,100))

問題1

我想創建一個嵌套表,將這些患者分為“男性”和“女性”,再將他們細分為“高”和“短”,然后計算每個子組中的患者數以及中位數上下置信區間為95%的雀斑。

該表應類似於下圖所示,其中用適當的計算結果替換#號。

gender height_category n median_freckles LCI UCI

male              tall #               #   #   #
                 short #               #   #   #
female            tall #               #   #   #
                 short #               #   #   #

問題2

一旦計算出這些結果,我便要創建一個條形圖。 y軸是雀斑的中位數。 x軸將分為男性和女性。 但是,這些部分將按高度類別細分(因此,總共四個條形圖,每組兩個)。 我想將95%的置信帶覆蓋在條形圖的頂部。

我嘗試過的

我知道我可以使用MASS庫和xtabs命令創建嵌套表:

ftable(xtabs(formula = ~ gender + height_category, data = study_data))

但是,我不確定如何將計算雀斑數量的中位數合並到此命令中,然后將其顯示在摘要表中。 我也知道ggplot2可用於制作條形圖,但是由於我無法首先計算所需的數據,因此不確定如何執行此操作。

您確實應該提供一個可復制的示例。 無論如何,您可能會發現library(plyr)很有幫助。 請注意這些置信區間,因為如果n <30,則中心極限定理不適用。

library(plyr)
ddply(df, .(gender, height_category), summarize,
      n=length(freckles), median_freckles=median(freckles), 
      LCI=qt(.025, df=length(freckles) - 1)*sd(freckles)/length(freckles)+mean(freckles), 
      UCI=qt(.975, df=length(freckles) - 1)*sd(freckles)/length(freckles)+mean(freckles))

編輯:我忘了在情節上增加一點。 假設我們將先前的結果另存為tab

library(ggplot2)
library(reshape)
m.tab <- melt(tab, id.vars=c("gender", "height_category"))
dodge <- position_dodge(width=0.9)
ggplot(m.tab, aes(fill=height_category, x=gender, y=median_freckles))+
  geom_bar(position=dodge) + geom_errorbar(aes(ymax=UCI, ymin=LCI), position=dodge, width=0.25)
set.seed(42)
DF <- data.frame(gender=sample(c("m","f"),100,T),
                 height_category=sample(c("tall","short"),100,T),
                 freckles=runif(100,0,100))


library(plyr)
res <- ddply(DF,.(gender,height_category),summarise,
             n=length(na.omit(freckles)),
             median_freckles=quantile(freckles,0.5,na.rm=TRUE),
             LCI=quantile(freckles,0.025,na.rm=TRUE),
             UCI=quantile(freckles,0.975,na.rm=TRUE))

library(ggplot2)
p1 <- ggplot(res,aes(x=gender,y=median_freckles,ymin=LCI,ymax=UCI,
                     group=height_category,fill=height_category)) +
  geom_bar(stat="identity",position="dodge") +
  geom_errorbar(position="dodge")
print(p1)

在此處輸入圖片說明

#a better plot that doesn't require to precalculate the stats
library(hmisc)
p2 <- ggplot(DF,aes(x=gender,y=freckles,colour=height_category)) + 
  stat_summary(fun.data="median_hilow",geom="pointrange",position = position_dodge(width = 0.4))
print(p2)

在此處輸入圖片說明

暫無
暫無

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

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