从 R 中的二进制调查响应创建邻接矩阵
Create an adjacency matrix from binary survey responses in R
我有一个代表不同人政策偏好的数据框,其中行代表个人。
这是一个玩具示例,使用来自“Frank”、“Sarah”、“Josh”和“Elyse”的假设数据。在这个例子中,参与者表示了他们对三项政治政策(减税、全民医保、延长任期限制)的支持,因此“1”代表支持,“0”代表反对。
d<-data.frame("Name"=c("Frank","Sarah","Josh","Elyse"),
"tax_cuts"=c(0,1,1,1),
"u_healthcare"=c(1,1,0,0),
"ex_term"=c(0,0,1,0))
d
Name tax_cuts u_healthcare ex_term
Frank 0 1 0
Sarah 1 1 0
Josh 1 0 1
Elyse 1 0 0
如何创建一个矩阵,其中的边表示一项政策的共同认可数量。例如,Sarah 共同认可减税和延长任期限制,而 Josh 共同认可延长任期限制和减税,因此这些政策将有 1 个共同认可。生成的矩阵将是具有以下值的 3-3 方阵。
mat<-rbind(c(0, 1, 1),c(1,0,0), c(1,0,0))
rownames(mat)<-c("tax_cuts","u_healthcare","ex_term")
colnames(mat)<-c("tax_cuts","u_healthcare","ex_term")
print(mat)
tax_cuts u_healthcare ex_term
tax_cuts 0 1 1
u_healthcare 1 0 0
ex_term 1 0 0
我们可以用矩阵乘法来做到这一点:
t(d[-1]) %*% as.matrix(d[-1])
tax_cuts u_healthcare ex_term
tax_cuts 3 1 1
u_healthcare 1 2 0
ex_term 1 0 1
对角线是每个背书的计数。如果您愿意,可以将其设置为 0...
coendorse = t(d[-1]) %*% as.matrix(d[-1])
diag(coendorse) = 0
coendorse
# tax_cuts u_healthcare ex_term
# tax_cuts 0 1 1
# u_healthcare 1 0 0
# ex_term 1 0 0
使用crossprod
crossprod(as.matrix(d[-1]), as.matrix(d[-1]))
# tax_cuts u_healthcare ex_term
#tax_cuts 3 1 1
#u_healthcare 1 2 0
#ex_term 1 0 1
我有一个代表不同人政策偏好的数据框,其中行代表个人。
这是一个玩具示例,使用来自“Frank”、“Sarah”、“Josh”和“Elyse”的假设数据。在这个例子中,参与者表示了他们对三项政治政策(减税、全民医保、延长任期限制)的支持,因此“1”代表支持,“0”代表反对。
d<-data.frame("Name"=c("Frank","Sarah","Josh","Elyse"),
"tax_cuts"=c(0,1,1,1),
"u_healthcare"=c(1,1,0,0),
"ex_term"=c(0,0,1,0))
d
Name tax_cuts u_healthcare ex_term
Frank 0 1 0
Sarah 1 1 0
Josh 1 0 1
Elyse 1 0 0
如何创建一个矩阵,其中的边表示一项政策的共同认可数量。例如,Sarah 共同认可减税和延长任期限制,而 Josh 共同认可延长任期限制和减税,因此这些政策将有 1 个共同认可。生成的矩阵将是具有以下值的 3-3 方阵。
mat<-rbind(c(0, 1, 1),c(1,0,0), c(1,0,0))
rownames(mat)<-c("tax_cuts","u_healthcare","ex_term")
colnames(mat)<-c("tax_cuts","u_healthcare","ex_term")
print(mat)
tax_cuts u_healthcare ex_term
tax_cuts 0 1 1
u_healthcare 1 0 0
ex_term 1 0 0
我们可以用矩阵乘法来做到这一点:
t(d[-1]) %*% as.matrix(d[-1])
tax_cuts u_healthcare ex_term
tax_cuts 3 1 1
u_healthcare 1 2 0
ex_term 1 0 1
对角线是每个背书的计数。如果您愿意,可以将其设置为 0...
coendorse = t(d[-1]) %*% as.matrix(d[-1])
diag(coendorse) = 0
coendorse
# tax_cuts u_healthcare ex_term
# tax_cuts 0 1 1
# u_healthcare 1 0 0
# ex_term 1 0 0
使用crossprod
crossprod(as.matrix(d[-1]), as.matrix(d[-1]))
# tax_cuts u_healthcare ex_term
#tax_cuts 3 1 1
#u_healthcare 1 2 0
#ex_term 1 0 1