'How to generalize the calculation of cross entropy in R?
Reference article: http://dx.doi.org/10.2139/ssrn.3560339
I have this:
data.frame(v1=c(0,0,9,4,0), v2=c(0,6,0,4,3), v3=c(3,0,0,0,4))-> res
cross.entropy<-function(x){
prob.d1<-function(x,i) x[i]/colSums(x)[i]
prob.d2<-function(x,i,j) x[,c(i,j)]/colSums(x[,c(i,j)]) %>% sum() #IF v2
prob.d3<-function(x,i,j,k) x[,c(i,j,k)]/colSums(x[,c(i,j,k)]) %>% sum() #IF v3
prob.d4<-function(x,i,j,k,l) x[,c(i,j,k,l)]/colSums(x[,c(i,j,k,l)]) %>% sum() #IF v4
H1 <- prob.d1(x,1)%>% round(2) %>% as.matrix( ) %>% entropia() %>% round(2)
H2 <- prob.d1(x,2)%>% round(2) %>% as.matrix( ) %>% entropia() %>% round(2)
H3 <- prob.d1(x,3)%>% round(2) %>% as.matrix( ) %>% entropia() %>% round(2)
H4 <- prob.d1(x,4)%>% round(2) %>% as.matrix( ) %>% entropia() %>% round(2)
T1 <- H1-(H2+H3+H4)
T2 <- H2-(H1+H3+H4)#IF v2
T3 <- H3-(H1+H2+H4)#IF v3
T4 <- H4-(H1+H2+H3)#IF v4
H12 <- prob.d2(x,1,2)%>% round(2) %>% as.matrix( ) %>% entropia() %>% round(2);T12 <- (H1+H2)-H12#IF v2
H13 <- prob.d2(x,1,3)%>% round(2) %>% as.matrix( ) %>% entropia() %>% round(2);T13 <- (H1+H3)-H13#IF v3
H14 <- prob.d2(x,1,4)%>% round(2) %>% as.matrix( ) %>% entropia() %>% round(2);T14 <- (H1+H4)-H14#IF v4
H23 <- prob.d2(x,2,3)%>% round(2) %>% as.matrix( ) %>% entropia() %>% round(2);T23 <- (H2+H3)-H23#IF v3, v4
H24 <- prob.d2(x,2,4)%>% round(2) %>% as.matrix( ) %>% entropia() %>% round(2);T24 <- (H2+H4)-H24#IF v4
H34 <- prob.d2(x,3,4)%>% round(2) %>% as.matrix( ) %>% entropia() %>% round(2);T34 <- (H3+H4)-H34#IF v4
H123 <- prob.d3(x,1,2,3)%>% round(2) %>% as.matrix( ) %>% entropia() %>% round(2);T123 <- (H1+H2+H3)-(H12+H13+H23)+H123#IF v3, v4
H124 <- prob.d3(x,1,2,4)%>% round(2) %>% as.matrix( ) %>% entropia() %>% round(2);T124 <- (H1+H2+H4)-(H12+H14+H24)+H124#IF v4
H134 <- prob.d3(x,1,3,4)%>% round(2) %>% as.matrix( ) %>% entropia() %>% round(2);T134 <- (H1+H3+H4)-(H13+H14+H34)+H134#IF v4
H234 <- prob.d3(x,2,3,4)%>% round(2) %>% as.matrix( ) %>% entropia() %>% round(2);T234 <- (H2+H3+H4)-(H23+H24+H34)+H234#IF v4
H1234 <- prob.d4(x,1,2,3,4)%>% round(2) %>% as.matrix( ) %>% entropia() %>% round(2);T1234 <- (H2+H3+H4)-(H23+H24+H34)+H234#IF v4
return(data.frame(H1 = H1, T1 = T1, H2 = H2, T2 = T2, H3 = H3, T3 = T3, H4 = H4, T4 = T4, H12 = H12, T12 = T12, H13 = H13, T13 = T13, H14 = H14, T14 = T14, H23 = H23, T23 = T23, H24 = H24, T24 = T24, H34 = H34, T34 = T34, H123 = H123, T123 = T123, H124 = H124, T124 = T124, H134 = H134, T134 = T134, H234 = H234, T234 = T234, H1234 = H1234, T1234 = T1234))
}
cross.entropy(res)
how to generalize this function to a matrix with n vectors > 1?
Exemple:
data.frame(v1=c(0,0,9,4,0), v2=c(0,6,0,4,3))-> resV2
data.frame(v1=c(0,0,9,4,0), v2=c(0,6,0,4,3),v3=c(3,0,0,0,4),v4=c(0,4,3,5,0))-> resV4
data.frame(v1=c(?,?,?),...,vn=c(?,?,?))-> resVn
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|
