มีค่าเทียบเท่า R ของ SAS PROC FREQ หรือไม่


18

ไม่มีใครรู้ว่าเทียบเท่า R กับ SAS PROC FREQ?

ฉันพยายามสร้างสถิติเชิงพรรณนาสรุปสำหรับตัวแปรหลายตัวพร้อมกัน


2
ทำไมคำถามนี้ปิด มันเกี่ยวข้องกับการสร้างภาพข้อมูลและสร้างการตอบสนองที่คุ้มค่าหลายประการ
z0lo

คำตอบ:


12

ฉันใช้tableและprop.tableแต่CrossTableในgmodelsแพ็คเกจอาจให้ผลลัพธ์ที่ใกล้เคียงกับ SAS มากขึ้น ดูลิงค์นี้

นอกจากนี้หากต้องการสร้าง "สถิติเชิงพรรณนาสำหรับหลายตัวแปรพร้อมกัน" คุณจะต้องใช้summaryฟังก์ชันนี้ เช่นsummary(mydata).


นอกจากนี้ผมขอแนะนำอย่างอบอุ่นซีดีแพคเกจ แต่ดูบทความประกอบ: การทำงานกับข้อมูลเด็ดขาดกับ R และซีดีและแพคเกจ
chl

9

การสรุปข้อมูลในฐาน R เป็นเพียงอาการปวดหัว นี่เป็นหนึ่งในพื้นที่ที่ SAS ทำงานได้ค่อนข้างดี สำหรับ R ฉันแนะนำplyrแพ็คเกจ

ใน SAS:

/* tabulate by a and b, with summary stats for x and y in each cell */
proc summary data=dat nway;
  class a b;
  var x y;
  output out=smry mean(x)=xmean mean(y)=ymean var(y)=yvar;
run;

ด้วยplyr:

smry <- ddply(dat, .(a, b), summarise, xmean=mean(x), ymean=mean(y), yvar=var(y))

8

ฉันไม่ได้ใช้ SAS ดังนั้นฉันจึงไม่สามารถแสดงความคิดเห็นว่าการทำซ้ำต่อไปนี้SAS PROC FREQหรือไม่ แต่เป็นกลยุทธ์ที่รวดเร็วสองข้อสำหรับการอธิบายตัวแปรใน data.frame ที่ฉันมักใช้:

  • describeในHmiscให้สรุปที่เป็นประโยชน์ของตัวแปรรวมถึงข้อมูลที่เป็นตัวเลขและไม่ใช่ตัวเลข
  • describeในpsychจัดทำสถิติเชิงพรรณนาสำหรับข้อมูลตัวเลข

ตัวอย่าง R

> library(MASS) # provides dataset called "survey"
> library(Hmisc) # Hmisc describe
> library(psych) # psych describe

ต่อไปนี้เป็นผลลัพธ์ของHmisc describe:

> Hmisc::describe(survey)
survey 

 12  Variables      237  Observations
----------------------------------------------------------------------------------------------------------------------
Sex 
      n missing  unique 
    236       1       2 

Female (118, 50%), Male (118, 50%) 
----------------------------------------------------------------------------------------------------------------------
Wr.Hnd 
      n missing  unique    Mean     .05     .10     .25     .50     .75     .90     .95 
    236       1      60   18.67   16.00   16.50   17.50   18.50   19.80   21.15   22.05 

lowest : 13.0 14.0 15.0 15.4 15.5, highest: 22.5 22.8 23.0 23.1 23.2 
----------------------------------------------------------------------------------------------------------------------
NW.Hnd 
      n missing  unique    Mean     .05     .10     .25     .50     .75     .90     .95 
    236       1      68   18.58   15.50   16.30   17.50   18.50   19.72   21.00   22.22 

lowest : 12.5 13.0 13.3 13.5 15.0, highest: 22.7 23.0 23.2 23.3 23.5 
----------------------------------------------------------------------------------------------------------------------
[ABBREVIATED OUTPUT]

จากนั้นด้านล่างเป็นผลลัพธ์ของpsych describeตัวแปรที่เป็นตัวเลข:

> psych::describe(survey[,sapply(survey, class) %in% c("numeric", "integer") ])
       var   n   mean    sd median trimmed   mad    min   max range  skew kurtosis   se
Wr.Hnd   1 236  18.67  1.88  18.50   18.61  1.48  13.00  23.2 10.20  0.18     0.36 0.12
NW.Hnd   2 236  18.58  1.97  18.50   18.55  1.63  12.50  23.5 11.00  0.02     0.51 0.13
Pulse    3 192  74.15 11.69  72.50   74.02 11.12  35.00 104.0 69.00 -0.02     0.41 0.84
Height   4 209 172.38  9.85 171.00  172.19 10.08 150.00 200.0 50.00  0.22    -0.39 0.68
Age      5 237  20.37  6.47  18.58   18.99  1.61  16.75  73.0 56.25  5.16    34.53 0.42

3

ฉันใช้ฟังก์ชั่นcodebookจาก{EPICALC}ซึ่งให้สถิติสรุปสำหรับตัวแปรตัวเลขและตารางความถี่ที่มีเลเบลระดับและรหัสสำหรับปัจจัยต่างๆ http://cran.r-project.org/doc/contrib/Epicalc_Book.pdf (ดูหน้า 50) นอกจากนี้สิ่งนี้มีประโยชน์มากเพราะมันให้ SD สำหรับตัวแปรเชิงปริมาณ

สนุก !

ตัวอย่างผลลัพธ์


1
+1 (จากก่อนหน้านี้) ฉันชอบวิธีcodebook()นี้มาก 1 ประเด็นคือnas ถูกดร็อปซึ่งคุณอาจต้องการรวมในเอาต์พุตของคุณ 1 วิธีในการจัดการ w / สิ่งนี้ (อย่างน้อย w / ปัจจัย) คือการใช้? recode.is.naวันที่ 1 (เช่นเพื่อ "หายไป"); สำหรับตัวแปรที่เป็นตัวเลขที่คุณสามารถสร้างตัวแปรใหม่ทันทีไปทางซ้ายของคอลัมน์ w / ค่าตรรกะขึ้นอยู่กับการเรียกใช้แล้วis.na() codebook()มันเป็นบิตของ kluge แม้ว่า
gung - Reinstate Monica

3

คุณสามารถดูแพ็คเกจสรุปของฉัน( ลิงก์ CRAN ) ซึ่งมีฟังก์ชั่นคล้ายโค้ดโค๊ดบุ๊คพร้อมตัวเลือกการจัดรูปแบบมาร์คดาวน์และ html

install.packages("summarytools")
library(summarytools)
dfSummary(CO2, style = "grid", plain.ascii = TRUE)

ข้อมูลสรุปของ Dataframe

CO2

+------------+---------------+-------------------------------------+--------------------+-----------+
| Variable   | Properties    | Stats / Values                      | Freqs, % Valid     | N Valid   |
+============+===============+=====================================+====================+===========+
| Plant      | type:integer  | 1. Qn1                              | 1: 7 (8.3%)        | 84/84     |
|            | class:ordered | 2. Qn2                              | 2: 7 (8.3%)        | (100.0%)  |
|            | + factor      | 3. Qn3                              | 3: 7 (8.3%)        |           |
|            |               | 4. Qc1                              | 4: 7 (8.3%)        |           |
|            |               | 5. Qc3                              | 5: 7 (8.3%)        |           |
|            |               | 6. Qc2                              | 6: 7 (8.3%)        |           |
|            |               | 7. Mn3                              | 7: 7 (8.3%)        |           |
|            |               | 8. Mn2                              | 8: 7 (8.3%)        |           |
|            |               | 9. Mn1                              | 9: 7 (8.3%)        |           |
|            |               | 10. Mc2                             | 10: 7 (8.3%)       |           |
|            |               | ... 2 other levels                  | others: 14 (16.7%) |           |
+------------+---------------+-------------------------------------+--------------------+-----------+
| Type       | type:integer  | 1. Quebec                           | 1: 42 (50%)        | 84/84     |
|            | class:factor  | 2. Mississippi                      | 2: 42 (50%)        | (100.0%)  |
+------------+---------------+-------------------------------------+--------------------+-----------+
| Treatment  | type:integer  | 1. nonchilled                       | 1: 42 (50%)        | 84/84     |
|            | class:factor  | 2. chilled                          | 2: 42 (50%)        | (100.0%)  |
+------------+---------------+-------------------------------------+--------------------+-----------+
| conc       | type:double   | mean (sd) = 435 (295.92)            | 95: 12 (14.3%)     | 84/84     |
|            | class:numeric | min < med < max = 95 < 350 < 1000   | 175: 12 (14.3%)    | (100.0%)  |
|            |               | IQR (CV) = 500 (0.68)               | 250: 12 (14.3%)    |           |
|            |               |                                     | 350: 12 (14.3%)    |           |
|            |               |                                     | 500: 12 (14.3%)    |           |
|            |               |                                     | 675: 12 (14.3%)    |           |
|            |               |                                     | 1000: 12 (14.3%)   |           |
+------------+---------------+-------------------------------------+--------------------+-----------+
| uptake     | type:double   | mean (sd) = 27.21 (10.81)           | 76 distinct values | 84/84     |
|            | class:numeric | min < med < max = 7.7 < 28.3 < 45.5 |                    | (100.0%)  |
|            |               | IQR (CV) = 19.23 (0.4)              |                    |           |
+------------+---------------+-------------------------------------+--------------------+-----------+

แก้ไข

ในรุ่นใหม่ของsummarytoolsที่freq()ฟังก์ชั่น (ซึ่งเป็นผู้ผลิตตารางความถี่ตรงไปตรงมามากขึ้นเพื่อให้ตรงประเด็นเป็นเรื่องที่เกี่ยวกับคำถามเดิม) ยอมรับเฟรมข้อมูลเช่นเดียวกับตัวแปรเดียว สำหรับ cross-tabulations (ซึ่งproc freq ทำเช่นเดียวกัน) ให้ดูctable()ฟังก์ชัน

freq(CO2)

ความถี่

CO2 $ พืช

ประเภท : ปัจจัยที่สั่ง

          Freq   % Valid    % Valid Cum   % Total    % Total Cum
    Qn1      7      8.33           8.33      8.33           8.33
    Qn2      7      8.33          16.67      8.33          16.67
    Qn3      7      8.33          25.00      8.33          25.00
    Qc1      7      8.33          33.33      8.33          33.33
    Qc3      7      8.33          41.67      8.33          41.67
    Qc2      7      8.33          50.00      8.33          50.00
    Mn3      7      8.33          58.33      8.33          58.33
    Mn2      7      8.33          66.67      8.33          66.67
    Mn1      7      8.33          75.00      8.33          75.00
    Mc2      7      8.33          83.33      8.33          83.33
    Mc3      7      8.33          91.67      8.33          91.67
    Mc1      7      8.33         100.00      8.33         100.00
   <NA>      0                               0.00         100.00
  Total     84    100.00         100.00    100.00         100.00
CO2 $ ประเภท

ประเภท : ปัจจัย

                Freq   % Valid    % Valid Cum   % Total    % Total Cum
       Quebec     42     50.00          50.00     50.00          50.00
  Mississippi     42     50.00         100.00     50.00         100.00
         <NA>      0                               0.00         100.00
        Total     84    100.00         100.00    100.00         100.00
CO2 รักษา $

ประเภท : ปัจจัย

               Freq   % Valid    % Valid Cum   % Total    % Total Cum
  nonchilled     42     50.00          50.00     50.00          50.00
     chilled     42     50.00         100.00     50.00         100.00
        <NA>      0                               0.00         100.00
       Total     84    100.00         100.00    100.00         100.00

2

ขอบคุณสำหรับทุกคำแนะนำทุกคน ฉันลงเอยด้วยการใช้ตารางหรือฟังก์ชั่น numS บทสรุปของ Rcmdr และใช้:

apply(dataframe[,c('need_rbcs','need_platelets','need_ffp')],2,table) 

มันใช้งานได้ดีและไม่สะดวกเกินไป อย่างไรก็ตามฉันจะลองแก้ปัญหาอื่น ๆ เหล่านี้อย่างแน่นอน!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.