การแสดงการตอบสนอง Likert โดยใช้ R หรือ SPSS


19

ฉันมีผู้ตอบแบบสอบถาม 82 คนใน 2 กลุ่ม (43 คนในกลุ่ม A และ 39 คนในกลุ่ม B) ที่ทำแบบสอบถาม 65 Likert แต่ละคำถามมีตั้งแต่ 1 - 5 (เห็นด้วยอย่างยิ่ง - ไม่เห็นด้วยอย่างยิ่ง) ฉันจึงมี dataframe ที่มี 66 คอลัมน์ (1 สำหรับแต่ละคำถาม + 1 หมายถึงการจัดสรรกลุ่ม) และ 82 แถว (1 สำหรับผู้ตอบแต่ละคน)

การใช้ R หรือ SPSS ทำให้ทุกคนรู้วิธีที่ดีในการแสดงข้อมูลนี้

ฉันต้องการสิ่งนี้: ป้อนคำอธิบายรูปภาพที่นี่
(จากJason Bryer )

แต่ฉันไม่สามารถรับส่วนเริ่มต้นของรหัสในการทำงาน หรือฉันพบตัวอย่างที่ดีของวิธีการแสดงภาพข้อมูล Likert จากโพสต์ที่ผ่านการตรวจสอบความถูกต้องก่อนหน้า: การแสดงข้อมูลการตอบสนองของรายการ Likertแต่ไม่มีคำแนะนำหรือคำแนะนำเกี่ยวกับวิธีการสร้างกราฟนับจำนวนกึ่งกลางเหล่านี้


1
สวัสดีอดัมเพื่อชี้แจงเพิ่มเติมคุณต้องการใช้การสร้างภาพข้อมูลเพื่อแสดงความแตกต่างระหว่างกลุ่มหรือไม่? ถ้าใช่นั่นไม่ใช่วิธีที่แนะนำ
มิเชล

แพ็คเกจของ Jason Bryer ไม่ได้ใช้งานสำหรับฉัน แต่ฉันคิดว่าเขาอัปเดตและตอนนี้มันใช้งานได้อย่างสวยงามแล้ว ฉันยังได้เพิ่มคำขอดึงพร้อมคุณสมบัติพิเศษในการจัดเก็บชื่อคอลัมน์เป็นคุณลักษณะและกลุ่ม เมื่อใช้สิ่งนี้ฉันสามารถเห็นภาพคำถาม 45 คำถามของ Likert แบ่งออกเป็นกลุ่มได้อย่างง่ายดายแม้แบ่งกับตัวแปรอื่นหากฉันเลือก (ฉันแสดงผลโดยใช้ knitr ดังนั้นจึงลงท้ายด้วยพล็อตย่อยจำนวนมากบนเว็บไซต์ไม่ใช่พล็อตขนาดมหึมา) ฉันเขียนรายละเอียดไว้ที่นี่: reganmian.net/blog/2013/10/02/…
Stian Håklev

เพียงแค่ FYI สำหรับผู้ที่อ่านคำตอบเหล่านี้ในอนาคตดูเหมือนว่าฟีเจอร์และฟังก์ชันการทำงานบางอย่างของ irutils ที่เกี่ยวกับข้อมูล likert ได้ถูกย้ายไปยังแพ็คเกจ Likert R ( ดู CRAN ที่นี่ )
firefly2442

ลิงก์bryer.org/2011/visualizing-likert-itemsดูเหมือนจะเสียหาย ยินดีต้อนรับการแก้ไขหรือเปลี่ยนใหม่
Nick Cox

1
คำถามประเภทนี้ - ด้วยการมุ่งเน้นที่รหัสเฉพาะ - มีการต้อนรับน้อยลงในปี 2561 เมื่อเทียบกับปี 2555 ไม่ว่าจะมีการอ้างอิงโยงบางอย่างสำหรับผู้ที่สนใจสิ่งนี้คือstats.stackexchange.com/questions/56322/ …และ stats.stackexchange.com/questions/148554/…
Nick Cox

คำตอบ:


30

หากคุณต้องการใช้บาร์โค้ดแบบเรียงซ้อนกับรายการจำนวนมากดังกล่าวนี่เป็นวิธีแก้ปัญหาสองวิธี

การใช้ irutils

ฉันเจอแพคเกจนี้เมื่อหลายเดือนก่อน

ณ กระทำ 0573195c07 บนGithubรหัสจะไม่ทำงานกับgrouping=อาร์กิวเมนต์ มาเริ่มเซสชั่นการดีบั๊กวันศุกร์กันดีกว่า

เริ่มต้นด้วยการดาวน์โหลดเวอร์ชันซิปจาก Github คุณจะต้องแฮ็คR/likert.Rไฟล์โดยเฉพาะlikertและplot.likertฟังก์ชั่น ครั้งแรกในlikert, cast()ถูกนำมาใช้ แต่reshapeแพคเกจไม่เคยโหลด (ถึงแม้จะมีการimport(reshape)เรียนการสอนในNAMESPACEไฟล์) คุณสามารถโหลดได้ด้วยตัวเองก่อน ประการที่สองมีการเรียนการสอนที่ไม่ถูกต้องสามารถดึงข้อมูลฉลากสินค้าที่iเป็นที่ห้อยรอบสาย 175 นี้ได้รับการแก้ไขเช่นกันเช่นโดยการแทนที่เกิดขึ้นทั้งหมดด้วยlikert$items[,i] likert$items[,1]จากนั้นคุณสามารถติดตั้งแพ็กเกจในแบบที่คุณเคยทำบนเครื่องของคุณ ใน Mac ของฉันฉันทำ

% tar -czf irutils.tar.gz jbryer-irutils-0573195
% R CMD INSTALL irutils.tar.gz

จากนั้นด้วย R ลองทำสิ่งต่อไปนี้:

library(irutils)
library(reshape)

# Simulate some data (82 respondents x 66 items)
resp <- data.frame(replicate(66, sample(1:5, 82, replace=TRUE)))
resp <- data.frame(lapply(resp, factor, ordered=TRUE, 
                          levels=1:5, 
                          labels=c("Strongly disagree","Disagree",
                                   "Neutral","Agree","Strongly Agree")))
grp <- gl(2, 82/2, labels=LETTERS[1:2]) # say equal group size for simplicity

# Summarize responses by group
resp.likert <- likert(resp, grouping=grp)

นั่นควรจะใช้งานได้ แต่การแสดงผลภาพจะไม่ดีเพราะมีไอเท็มจำนวนมาก มันทำงานได้โดยไม่ต้องจัดกลุ่ม (เช่นplot(likert(resp)))

ป้อนคำอธิบายรูปภาพที่นี่

ฉันจึงขอแนะนำให้ลดชุดข้อมูลของคุณเป็นชุดย่อยของรายการที่เล็กลง เช่นใช้ 12 รายการ

plot(likert(resp[,1:12], grouping=grp))

ฉันได้รับ barchart แบบ 'อ่านได้' คุณสามารถประมวลผลได้ในภายหลัง (สิ่งเหล่านี้เป็นggplot2วัตถุ แต่คุณจะไม่สามารถจัดเรียงไว้ในหน้าเดียวด้วยgridExtra::grid.arrange()เนื่องจากปัญหาการอ่าน!)

ป้อนคำอธิบายรูปภาพที่นี่

ทางเลือกการแก้ปัญหา

ฉันต้องการดึงความสนใจของคุณไปยังแพ็คเกจอื่นHHที่อนุญาตให้พล็อต Likert เป็นแผนภูมิแท่งแบบแยกส่วน เราสามารถใช้รหัสข้างต้นซ้ำได้ดังที่แสดงด้านล่าง

resp.likert <- likert(resp)
detach(package:irutils)
library(HH)
plot.likert(resp.likert$results[,-6]*82/100, main="")

แต่นั่นจะทำให้สิ่งต่าง ๆ ซับซ้อนขึ้นเล็กน้อยเพราะเราจำเป็นต้องแปลงความถี่เป็นจำนวนชิ้นย่อยของlikertวัตถุที่ถูกสร้างโดยirutilsแพ็คเกจแยกออกเป็นต้นดังนั้นเรามาเริ่มกันใหม่ด้วยสถิติใหม่ (นับ):

plot.likert(t(apply(resp, 2, table)), main="", as.percent=TRUE,
            rightAxisLabels=NULL, rightAxis=NULL, ylab.right="", 
            positive.order=TRUE)

ป้อนคำอธิบายรูปภาพที่นี่

ในการใช้ตัวแปรการจัดกลุ่มคุณจะต้องทำงานกับarrayค่าตัวเลข

# compute responses frequencies separately by grp
resp.array <- array(NA, dim=c(66, 5, 2))
resp.array[,,1] <- t(apply(subset(resp, grp=="A"), 2, table))
resp.array[,,2] <- t(apply(subset(resp, grp=="B"), 2, table))
dimnames(resp.array) <- list(NULL, NULL, group=levels(grp))
plot.likert(resp.array, layout=c(2,1), main="")

วิธีนี้จะสร้างแผงควบคุมแยกกันสองแผง แต่พอดีกับหน้าเดียว

ป้อนคำอธิบายรูปภาพที่นี่

แก้ไข 2016-6-3

  1. ณ ตอนนี้likertมีให้เป็นแพ็คเกจแยกต่างหาก
  2. คุณไม่จำเป็นต้องก่อร่างห้องสมุดหรือถอดออกทั้งirutilsและReshape

พล็อตสุดท้ายทำให้ฉันนึกถึงปิรามิดประชากร เราควรได้รับข้อมูลจริงเพื่อดูว่ามันทำงานอย่างไร "อยู่ในสภาวะปกติ" พร้อมกับข้อมูลบางอย่างที่ไม่เป็นระเบียบ ฉันจะยอมรับว่าพวกเขาจับตาและสวยว่า
Andy W

@Andy นั่นเป็นกรณีที่แน่นอน HH::as.pyramidLikertดู
chl

1
+1 ห้องสมุด (HH) เป็นวิธีที่จะไปแน่นอน แต่บางสิ่งบางอย่างที่ไม่ถูกต้องมีหายไปกับพล็อตสุดท้ายของคุณที่สองในการสั่งซื้อของเห็นด้วย / ไม่เห็นด้วย ฯลฯ
ปีเตอร์เอลลิส

@PeterEllis Yup ดูเหมือนว่าหมวดหมู่การตอบสนองอยู่ในลำดับที่ไม่ถูกต้องแน่นอน (คำสั่งของป้ายหายไปเมื่อทำเป็นตารางข้อมูลและชื่อตารางต่อไปนี้จะมีการจัดทำพจนานุกรมคำสั่ง.) สำหรับสับอย่างรวดเร็วเราก็สามารถแทนที่ด้วยt(apply(resp, 2, table)) t(apply(resp, 2, table))[,levels(resp[,1])]และ +1 ให้คุณด้วย!
chl

7

ฉันเริ่มเขียนบล็อกโพสต์เกี่ยวกับการสร้างแผนภูมิจำนวนมากในโพสต์ที่คุณพูดถึง (การแสดงข้อมูลการตอบสนองรายการ Likert ) ใน SPSS ดังนั้นฉันคิดว่านี่จะเป็นแรงจูงใจที่ดีในการทำมันให้เสร็จ

ในฐานะที่เป็นมิเชลตั้งข้อสังเกตความจริงที่ว่าคุณมีกลุ่มเป็นเกลียวใหม่เมื่อเทียบกับคำถามก่อนหน้า และในขณะที่กลุ่มสามารถนำมาพิจารณาโดยใช้กราฟแท่งแบบเรียงซ้อน IMO พวกมันถูกรวมเข้ากับตัวอย่างจุดล็อตในโพสต์ดั้งเดิมของ chl ได้ง่ายกว่ามาก ฉันได้รวมรหัส SPSS ไว้เพื่อสร้างสิ่งนี้ในตอนท้ายของโพสต์ซึ่งโดยหลักแล้วจะเกี่ยวข้องกับการรู้วิธีที่จะเปลี่ยนรูปร่างข้อมูลของคุณในรูปแบบที่เหมาะสมเพื่อสร้างพล็อตดังกล่าว (บันทึกย่อที่ให้ไว้ในโค้ด ที่นี่ฉันใช้การเข้ารหัสซ้ำซ้อน (สีและรูปร่าง) เพื่อแยกจุดที่มาจากทั้งสองกลุ่มและทำให้จุดกึ่งโปร่งใสเพื่อให้คุณสามารถบอกได้ว่าเมื่อใดที่พวกเขาทับซ้อนกัน (ตัวเลือกอื่นจะหลบจุดเมื่อทับซ้อนกัน)

รูปที่ 1: แปลง Dot ตามกลุ่ม

ทำไมถึงดีกว่าแผนภูมิแท่งแบบเรียงซ้อน? แผนภูมิแท่งแบบสแต็กเข้ารหัสข้อมูลในความยาวของแท่ง เมื่อคุณพยายามเปรียบเทียบระหว่างความยาวของแท่งไม่ว่าจะอยู่ในหมวดหมู่แกนเดียวกันหรือระหว่างพาเนลการเรียงซ้อนจะขัดขวางแท่งที่มีมาตราส่วนทั่วไป ตัวอย่างเช่นฉันได้จัดเตรียมรูปภาพในรูปที่ 2 ซึ่งวางแท่งสองแท่งไว้ในพล็อตที่ตำแหน่งเริ่มต้นของพวกเขาแตกต่างกันแถบใดที่กว้างกว่า (ตามแกนนอน)?

รูปที่ 2: แท่งที่ไม่มีมาตราส่วนทั่วไป

เปรียบเทียบกับพล็อตในรูปที่ 3 ด้านล่างซึ่งมีการลงจุดสองแท่ง (ที่มีความยาวเท่ากัน) จากจุดเริ่มต้นเดียวกัน ฉันตั้งใจทำให้งานยาก แต่คุณควรบอกได้ว่าอันไหนนานกว่านี้

รูปที่ 3: แท่งที่มีมาตราส่วนทั่วไป

แผนภูมิแท่งแบบสแต็คกำลังทำสิ่งที่แสดงในรูปที่ 2 พล็อตพล็อตสามารถพิจารณาคล้ายกับสิ่งที่แสดงในรูปที่ 3 เพียงแค่แทนที่แถบด้วยจุดที่ส่วนท้ายของแถบ

ฉันจะไม่บอกว่าจะไม่สร้างแผนภูมิเฉพาะสำหรับการวิเคราะห์ข้อมูลเชิงสำรวจ แต่ฉันขอแนะนำให้หลีกเลี่ยงแผนภูมิแท่งแบบเรียงซ้อนเมื่อใช้หลายหมวดหมู่ พล็อตจุดไม่ใช่ยาครอบจักรวาล แต่ฉันเชื่อว่าการเปรียบเทียบระหว่างพาเนลกับพล็อตพล็อตนั้นง่ายกว่าการใช้แผนภูมิแท่งแบบเรียงซ้อน ลองพิจารณาคำแนะนำที่ฉันมีให้ในโพสต์บล็อกของฉันที่นี่สำหรับตารางลองเรียงลำดับและ / หรือแยกแผนภูมิออกเป็นหมวดหมู่ที่มีความหมายและตรวจสอบให้แน่ใจว่ารายการที่คุณต้องการดูควบคู่กันอยู่ในแผนภูมิ ในขณะที่วิธีการวางแผนบางอย่างอาจปรับให้เหมาะกับคำถามมากมาย (ตัวอย่างแผนที่ความร้อนแบบแบ่งหมวดหมู่) โดยไม่ต้องจัดเรียงมันจะยากที่จะระบุรูปแบบความหมายใด ๆ (นอกเหนือจากค่าผิดปกติที่เห็นได้ชัด)

หมายเหตุเกี่ยวกับการใช้ SPSS SPSS สามารถสร้างการเชื่อมโยงไปยังแผนภูมิก่อนหน้าใด ๆ แม้ว่ามันมักจะสร้างความรู้วิธีการจัดรูปแบบข้อมูลของคุณ (เช่นเดียวกับ ggplot แต่คนได้รับการพัฒนาแพคเกจเพื่อปรับเปลี่ยนรูปร่างเป็นหลักสำหรับคุณ) เพื่อให้เข้าใจว่าภาษา GPL ของ SPSS ทำงานได้ดีขึ้นอย่างไรฉันแนะนำให้อ่านหนังสือ Hadley Wickham ในggplot2ในการใช้ R! ชุด. มันอธิบายไวยากรณ์ที่จำเป็นเพื่อทำความเข้าใจว่า GPL ของ SPSS ทำงานอย่างไรและอ่านได้ง่ายกว่าคู่มือการเขียนโปรแกรม GPL ที่มาพร้อมกับ SPSS! หากคุณมีคำถามใด ๆ เกี่ยวกับการสร้างแผนภูมิเฉพาะใน SPSS มันจะเป็นการดีที่สุดที่จะถามคำถามหนึ่งคำถามสำหรับแผนภูมิหนึ่ง (ฉันได้พูดคุยที่นี่พอแล้ว!) ฉันจะอัปเดตคำตอบนี้ด้วยลิงก์แม้ว่าฉันจะทำ บล็อกโพสต์จำลองแผนภูมิอื่น ๆ สำหรับการพิสูจน์แนวคิดของแผนที่ความร้อนหรือแปลงความผันผวนคุณสามารถดูโพสต์บล็อกอื่นของฉันเช่นบาง Corrgrams ในโปรแกรม SPSS

รหัส SPSS ใช้เพื่อสร้างรูปที่ 1

****************************************.
input program. */making fake data similar to yours.
loop #i = 1 to 82.
compute case_num = #i.
end case.
end loop.
end file.
end input program.
execute.
dataset name likert.

*making number in groups.
compute group = 1.
if case_num > 43 group = 2.
value labels group
1 'A'
2 'B'.

*this makes 5 variables with categories between 0 and 5 (similar to Likert data with 5 categories plus missing data).
vector V(5).
do repeat V = V1 to V5.
compute V = TRUNC(RV.UNIFORM(0,6)).
end repeat.
execute.

value labels V1 to V5
0 'missing'
1 'very disagree'
2 'disagree'
3 'neutral'
4 'agree'
5 'very agree'.
formats case_num group V1 to V5 (F1.0).
*****************************************.

*Because I want to panel by variable, I am going to reshape my data so all of the "V" variables are in one column (stacking them in long format).
varstocases
/make V from V1 to V5
/index orig (V).

*I am going to plot the points, so I aggregate that information (you could aggregate total counts as well if you wanted to plot percentages.
DATASET DECLARE agg_lik.
AGGREGATE
  /OUTFILE='agg_lik'
  /BREAK=orig V group
  /count_lik=N.
dataset activate agg_lik.


*now the fun part, generating the chart.
*The X axis, dim(1) is the count of likert responses within each category for each original question.
*The Y axis, dim(2) is the likert responses, and the third axis is used to panel the observations by the original questions, dim(4) here beacause I want to panel
by rows instead of columns.
DATASET ACTIVATE agg_lik.
* Chart Builder.
GGRAPH
  /GRAPHDATASET NAME="graphdataset" VARIABLES=count_lik V group orig 
    MISSING=LISTWISE REPORTMISSING=NO
  /GRAPHSPEC SOURCE=INLINE.
BEGIN GPL
  SOURCE: s=userSource(id("graphdataset"))
  DATA: count_lik=col(source(s), name("count_lik"))
  DATA: V=col(source(s), name("V"), unit.category())
  DATA: group=col(source(s), name("group"), unit.category())
  DATA: orig=col(source(s), name("orig"), unit.category())
  GUIDE: axis(dim(1), label("Count"))
  GUIDE: axis(dim(2))
  GUIDE: axis(dim(4))
  GUIDE: legend(aesthetic(aesthetic.color.exterior), label("group"))
  GUIDE: text.title(label("Figure 1: Dot Plots by Group"))
  SCALE: cat(aesthetic(aesthetic.color.exterior), include("1", "2"))
  SCALE: cat(aesthetic(aesthetic.shape), map(("1", shape.circle), ("2", shape.square)))
  ELEMENT: point(position(count_lik*V*1*orig), color.exterior(group), color.interior(group), transparency.interior(transparency."0.7"), size(size."8px"), shape(group))
END GPL.
*The "SCALE: cat" statements map different shapes which I use to assign to the two groups in the plot, and I plot the interior of the points as partially transparent.
*With some post hoc editing you should be able to make the chart look like what I have in the stats post.
****************************************.

จุดเด่นที่แข็งแกร่งจากฉันสำหรับการพูดคุยอย่างสุภาพ แต่ทะลุทะลวงข้อบกพร่องของแผนภูมิแท่งแบบซ้อนซึ่งเข้าใจได้ง่ายในหลักการ แต่บ่อยครั้งที่ง่ายต่อการถอดรหัสในการฝึกฝน
Nick Cox

5

โอ้ดีฉันมากับรหัสก่อนที่คุณจะชี้แจง ควรรอ แต่คิดว่าฉันควรโพสต์ไว้เพื่อทุกคนที่มาที่นี่สามารถใช้รหัสนี้ซ้ำได้

ข้อมูลจำลองเพื่อสร้างภาพ

# Response for http://stats.stackexchange.com/questions/25109/visualizing-likert-responses-using-r-or-spss
# Load libraries
library(reshape2)
library(ggplot2)

# Functions
CreateRowsColumns <- function(noofrows, noofcolumns) {
createcolumnnames <- paste("Q", 1:noofcolumns, sep ="")
df <- sapply(1:noofcolumns, function(i) assign(createcolumnnames[i], matrix(sample(1:5, noofrows, replace = TRUE))))
df <- sapply(1:noofcolumns, function(i) df[,i] <- as.factor(df[,i]))
colnames(df) <- createcolumnnames
return(df)}

# Generate dummy dataframe
LikertResponse <- CreateRowsColumns(82, 65)
LikertResponse[LikertResponse == 1] <- "Strongly agree"
LikertResponse[LikertResponse == 2] <- "Agree"
LikertResponse[LikertResponse == 3] <- "Neutral"
LikertResponse[LikertResponse == 4] <- "Disagree"
LikertResponse[LikertResponse == 5] <- "Strongly disagree"

รหัสสำหรับแผนที่ความร้อน

# Prepare data
LikertResponseSummary <- do.call(rbind, lapply(data.frame(LikertResponse), table))
LikertResponseSummaryPercent <- prop.table(LikertResponseSummary,1)

# Melt data
LikertResponseSummary <- melt(LikertResponseSummary)
LikertResponseSummaryPercent <- melt(LikertResponseSummaryPercent)

# Merge counts with proportions
LikertResponsePlotData <- merge(LikertResponseSummary, LikertResponseSummaryPercent, by = c("Var1","Var2"))

# Plot heatmap!
# Use the "geom_tile(aes(fill = value.y*100), colour = "white")" to control how you want the heatmap colours to map to.
ggplot(LikertResponsePlotData, aes(x = Var2, y = Var1)) +
    geom_tile(aes(fill = value.y*100), colour = "white") +
    scale_fill_gradient(low = "white", high = "steelblue", name = "% of Respondents") +
    scale_x_discrete(name = 'Response') +
    scale_y_discrete(name = 'Questions') +
    geom_text(aes(label = paste(format(round(value.y*100), width = 3), '% (', format(round(value.x), width = 3), ')')), size = 3) 

นี่เป็นเทมเพลตสำหรับรายการ Likert ที่มองเห็นได้ใน heatmap จากเว็บไซต์ Jason Bryon


1
github.com/jbryer/irutils/blob/master/R/likert.Rเป็นแหล่งข้อมูลสำหรับแผนภูมิแท่งแบบเรียงซ้อนที่คุณต้องการ
RJ-

เพื่อชี้แจงฉันไม่ต้องการเปรียบเทียบระหว่างกลุ่ม เพียงแค่นำเสนอการตอบสนองของทั้งสองกลุ่มด้วยวิธีที่ซับซ้อน นี่คือการตอบสนองที่ดี ขอบคุณมันจริงๆ ขอบคุณ
Adam

3

รหัสของ @ RJ สร้างพล็อตแบบนี้ซึ่งเป็นตารางที่มีเซลล์สีเทา ค่อนข้างยุ่งและยุ่งยากเล็กน้อยในการถอดรหัส ตารางธรรมดาที่ไม่มีการแรเงาอาจมีประสิทธิภาพมากกว่า (และคุณสามารถใส่ข้อมูลในลำดับที่มีความหมายมากขึ้นด้วย)

ป้อนคำอธิบายรูปภาพที่นี่

แน่นอนว่ามันขึ้นอยู่กับข้อความหลักที่คุณพยายามสื่อสาร แต่ฉันคิดว่ามันง่ายกว่าและเข้าใจง่ายกว่า นอกจากนี้ยังมีคำถามและคำตอบตามลำดับตรรกะ (ส่วนใหญ่!)

    library(stringr)
    LikertResponseSummary$Var1num <- 
      as.numeric(str_extract(LikertResponseSummary$Var1, "[0-9]+"))
    LikertResponseSummary$Var2 <- 
      factor(LikertResponseSummary$Var2, 
      levels =  c("Strongly disagree", "Disagree", "Neutral", "Agree", "Strongly agree"))

ggplot(LikertResponseSummary, 
       aes(factor(Var1num), value, fill = factor(Var2))) + 
       geom_bar(position="fill") +
       scale_x_discrete(name = 'Question', breaks=LikertResponseSummary$Var1num,
                        labels=LikertResponseSummary$Var1) +
       scale_y_continuous(name = 'Proportion') +
       scale_fill_discrete(name = 'Response') +
       coord_flip()

ป้อนคำอธิบายรูปภาพที่นี่


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