ไม่มีใครรู้ว่าเทียบเท่า R กับ SAS PROC FREQ
?
ฉันพยายามสร้างสถิติเชิงพรรณนาสรุปสำหรับตัวแปรหลายตัวพร้อมกัน
ไม่มีใครรู้ว่าเทียบเท่า R กับ SAS PROC FREQ
?
ฉันพยายามสร้างสถิติเชิงพรรณนาสรุปสำหรับตัวแปรหลายตัวพร้อมกัน
คำตอบ:
ฉันใช้table
และprop.table
แต่CrossTable
ในgmodels
แพ็คเกจอาจให้ผลลัพธ์ที่ใกล้เคียงกับ SAS มากขึ้น ดูลิงค์นี้
นอกจากนี้หากต้องการสร้าง "สถิติเชิงพรรณนาสำหรับหลายตัวแปรพร้อมกัน" คุณจะต้องใช้summary
ฟังก์ชันนี้ เช่นsummary(mydata)
.
การสรุปข้อมูลในฐาน 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))
ฉันไม่ได้ใช้ SAS ดังนั้นฉันจึงไม่สามารถแสดงความคิดเห็นว่าการทำซ้ำต่อไปนี้SAS PROC FREQ
หรือไม่ แต่เป็นกลยุทธ์ที่รวดเร็วสองข้อสำหรับการอธิบายตัวแปรใน data.frame ที่ฉันมักใช้:
describe
ในHmisc
ให้สรุปที่เป็นประโยชน์ของตัวแปรรวมถึงข้อมูลที่เป็นตัวเลขและไม่ใช่ตัวเลขdescribe
ในpsych
จัดทำสถิติเชิงพรรณนาสำหรับข้อมูลตัวเลข> 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
ฉันใช้ฟังก์ชั่นcodebookจาก{EPICALC}ซึ่งให้สถิติสรุปสำหรับตัวแปรตัวเลขและตารางความถี่ที่มีเลเบลระดับและรหัสสำหรับปัจจัยต่างๆ http://cran.r-project.org/doc/contrib/Epicalc_Book.pdf (ดูหน้า 50) นอกจากนี้สิ่งนี้มีประโยชน์มากเพราะมันให้ SD สำหรับตัวแปรเชิงปริมาณ
สนุก !
codebook()
นี้มาก 1 ประเด็นคือna
s ถูกดร็อปซึ่งคุณอาจต้องการรวมในเอาต์พุตของคุณ 1 วิธีในการจัดการ w / สิ่งนี้ (อย่างน้อย w / ปัจจัย) คือการใช้? recode.is.naวันที่ 1 (เช่นเพื่อ "หายไป"); สำหรับตัวแปรที่เป็นตัวเลขที่คุณสามารถสร้างตัวแปรใหม่ทันทีไปทางซ้ายของคอลัมน์ w / ค่าตรรกะขึ้นอยู่กับการเรียกใช้แล้วis.na()
codebook()
มันเป็นบิตของ kluge แม้ว่า
คุณสามารถดูแพ็คเกจสรุปของฉัน( ลิงก์ CRAN ) ซึ่งมีฟังก์ชั่นคล้ายโค้ดโค๊ดบุ๊คพร้อมตัวเลือกการจัดรูปแบบมาร์คดาวน์และ html
install.packages("summarytools")
library(summarytools)
dfSummary(CO2, style = "grid", plain.ascii = TRUE)
+------------+---------------+-------------------------------------+--------------------+-----------+
| 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)
ประเภท : ปัจจัยที่สั่ง
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
ขอบคุณสำหรับทุกคำแนะนำทุกคน ฉันลงเอยด้วยการใช้ตารางหรือฟังก์ชั่น numS บทสรุปของ Rcmdr และใช้:
apply(dataframe[,c('need_rbcs','need_platelets','need_ffp')],2,table)
มันใช้งานได้ดีและไม่สะดวกเกินไป อย่างไรก็ตามฉันจะลองแก้ปัญหาอื่น ๆ เหล่านี้อย่างแน่นอน!