我必须创建一个图形,在其中可以查看两个离散数字变量之间的相关性。
它们是if ($players->contains('id',Auth::id())){ }
中的age
和educ
。
carData::GSSvocab
的值从0到20,并且年龄以年为单位。
我没有一个好主意来绘制此图,因为如果我使用educ
,则会有很多重叠点。
我尝试了以下方法,但我对此并不满意:
geom_point
根据您正在使用的数据集,我感到变量educ
更像是一个类变量,而不是真正的数字变量。
就个人而言,我宁愿使用educ
作为因子,而不是尝试将其绘制为数字,而是添加一个箱形图以获得类似的内容。
因此,它看起来应该像:
ggplot(df,aes(x = as.factor(educ),y = age)) +
geom_jitter(width = .2,size = .5,color = adjustcolor("black",alpha=.6)) +
geom_boxplot() +
coord_flip()
以及下图:
我认为educ
和age
之间的相关性稍微高一些,老年人的得分为educ
较低,而年轻人的得分较高。 educ
中的。
这对您有意义吗? (再次,这是我对这个数据集的个人理解)
,您的散点图在双变量分布中产生大量联系,并模糊了显示中的许多点,显然它没有那么大用处。为解决此问题,请将年龄分成多个级别的因子,并生成一个箱形图而不是散点图。
Cnt2Fac <- function(x,breaks = NULL) {
if(is.null(breaks)) breaks <- unique(quantile(x,0:10/10))
x <- cut(x,breaks,include.lowest = TRUE,right = FALSE)
levels(x) <- paste(round(breaks[-length(breaks)]),ifelse(diff(breaks) > 1,c(paste("-",breaks[-c(1,length(breaks))] - 1,sep = ""),"+"),""),sep = "")
return(x)
}
plot(educ ~ Cnt2Fac(age,c(18,36,54,72,90)),data = carData::GSSvocab[complete.cases(carData::GSSvocab[,c("educ","age")]),],xlab='Age',ylab='Education',main='Education vs Age')
,
在这种情况下,我倾向于尝试描绘一些关于点密度的东西:
library(carData)
library(ggplot2)
data('GSSvocab')
p <- ggplot(GSSvocab,aes(x = age,y = educ))
p + geom_hex() # or...
p + geom_bin2d() # or...
p + geom_point(alpha = 0.05) + geom_density_2d()
我担心将受教育年限转换为factor
(如另一个答案中所述)是(1)这并不反映您将如何在相关性测试中实际分析数据; (2)描绘箱形图可能会让您在视觉上对没有大量数据(例如0:5年)的类别的集中趋势过于自信-真正的收获是没有……那里有很多数据点; (3)它设置了一个任意的选择:为什么要使factor
接受多年教育,为什么不让factor
接受年龄?