## Metric for different values of alfa and beta

18 Feb 09

m=mapametrica(todas.A,todas.M,todas.S,todas.f,todas.pos_real,10.^(-3:1:3),10.^(-3:1:3),2,1000);
>> imagesc(-3:3,-3:3,log10(m))
>> xlabel(‘log10(beta)’)
>> ylabel(‘log10(alfa)’)

19 Feb 09

Assuming quadratic cost and independent neurons, the increment of cost when interchanging the deviations of two neurons is

DeltaW=(omega1-omega2)(Deltax2^2-Deltax1^2). This is used in efectoperms.m.

For a ideal simple system, this works fine:

>> A=zeros(100);
>> B=rand(100,2);
>> f=[0 0];
>> pos=rand(100,1);
>> [Deltacostes_perm,Deltacostes_perm_teor]=efectoperms(A,B,f,pos,2,[]);

When alfa is small, also works great for elegans:

>> alfa=0.0001; beta=10;
>> [Deltacostes_perm,Deltacostes_perm_teor]=efectoperms(todas.A*alfa,todas.M*beta+todas.S,todas.f,todas.pos_real,2,[]);

Good agreement for alfa and beta of the pnas:

>> alfa=0.05; beta=1.5;
[Deltacostes_perm,Deltacostes_perm_teor]=efectoperms(todas.A*alfa,todas.M*beta+todas.S,todas.f,todas.pos_real,2,[]);

For alfa=10, fuzzier but reasonable:

>> alfa=10; beta=10;
>> [Deltacostes_perm,Deltacostes_perm_teor]=efectoperms(todas.A*alfa,todas.M*beta+todas.S,todas.f,todas.pos_real,2,[]);

We try permutations of multiple neurons:

n_neur=[2 3 5 10 20 50];
for c=1:6
subplot(2,3,c)
[Deltacostes_perm,Deltacostes_perm_teor]=efectoperms_multiples(A,B,f,pos,2,n_neur(c),1000,[]);
End

n_neur=[2 3 5 10 20 50];
alfa=.00001; beta=10;
for c=1:6
subplot(2,3,c)
[Deltacostes_perm,Deltacostes_perm_teor]=efectoperms_multiples(todas.A*alfa,todas.M*beta+todas.S,todas.f,todas.pos_real,2,n_neur(c),1000,[]);
End

n_neur=[2 3 5 10 20 50];
alfa=.05; beta=1.5;
for c=1:6
subplot(2,3,c)
[Deltacostes_perm,Deltacostes_perm_teor]=efectoperms_multiples(todas.A*alfa,todas.M*beta+todas.S,todas.f,todas.pos_real,2,n_neur(c),1000,[]);
end

For big alfas and large number of permutations, there is a shift:

n_neur=[2 3 5 10 20 50];
alfa=10; beta=10;
for c=1:6
subplot(2,3,c)
[Deltacostes_perm,Deltacostes_perm_teor]=efectoperms_multiples(todas.A*alfa,todas.M*beta+todas.S,todas.f,todas.pos_real,2,n_neur(c),1000,[]);
end

With permutations as in the metric:

>> [Deltacostes_perm,Deltacostes_perm_teor]=efectoperms_completas(A,B,f,pos,2,1000,[]);

>> alfa=.05; beta=1.5;
>> [Deltacostes_perm,Deltacostes_perm_teor]=efectoperms_completas(todas.A*alfa,todas.M*beta+todas.S,todas.f,todas.pos_real,2,1000,[]);

>> alfa=10; beta=10;
>> [Deltacostes_perm,Deltacostes_perm_teor]=efectoperms_completas(todas.A*alfa,todas.M*beta+todas.S,todas.f,todas.pos_real,2,1000,[]);

Study of the effect neuron-by-neuron

[Deltacostes_perm,Deltacostes_perm_teor]=efectoperms_neuraneur(A,B,f,pos,2,1000,[]);

alfa=10; beta=10;
>> [m,Deltacostes_perm,Deltacostes_perm_teor]=efectoperms_neuraneur(todas.A*alfa,todas.M*beta+todas.S,todas.f,todas.pos_real,2,10000,[]);

Oh, AVAL and AVAR!

Oh, it’s the opposite: AVAL and AVAR are not producing the shift, their effect is actually against the shift, as we see when removing them from the calculation:

>> [m,Deltacostes_perm,Deltacostes_perm_teor]=efectoperms_completas(todas.A*alfa,todas.M*beta+todas.S,todas.f,todas.pos_real,2,1000,[],[54 55]);

## Comparison of costs and probabilities for different exponents

>> alfa=10^-1.1; beta=10^-.9;
>> analizaBayes(todas.A,todas.M,todas.S,todas.f,todas.pos_real,[.5 1],alfa,beta,infoarchivos,[],[],prob)
Computing global optimum…Done.
Computing cost matrices…Done. 0.186333 seconds elapsed.
ind_lambda =
2
ind_mu =
8
ind_tipo =
4
ind_lambda =
12
ind_mu =
9
ind_tipo =
3
tipo =
2.2000 1.0000
2.1000 2.0000
lambda =
2.9126 0.8483
mu =
0.4771 0.0856
Mostrando neurona 1,??? Operation terminated by user during ==> analizaBayes at 138

## Bayes and “Center-of-mass” calculations with neurons fixed in their actual positions vs fixed in their optimal positions

From yesterday: CURRENT POINT: coste2graficamolona AND coste2pos_num_ruido ARE NOT USING THE SAME COST FOR NEURON 37. THERE MUST BE SOME MISTAKE THERE.

This is because the optimizer does not really converge, but in the end oscillates between two states of similar cost. So when we compute the cost from one of these states we get a different cost surface that leads to the other.

Caca.

## Generalized omega

16 Feb 09

We use a new “generalized omega” defined as the distance between the optimum and the furthest point for which the cost has increased less than x%. For x=10%, we get this shit (good prediction is all points above the line):

>> alfa=10^-1.1; beta=10^-.9; pot=.5;
>> [pos_cm,omega_general]=coste2pos_restofijas(todas.A*alfa,todas.M*beta+todas.S,todas.f,todas.pos_real,pot,.1);
>> plot(abs(todas.pos_real-pos_cm),omega_general,’.’)
>> hold on
>> plot([0 .7],[0 .7],’k’)
>> xlabel(‘Deviation’)
>> ylabel(‘Predicted maximum deviation (10%)’)

for c=1:279

text(abs(todas.pos_real(c)-pos_cm(c)),omega_general(c),num2str(c))

end

Some points below the line still make some sense, for example neuron 157:

Others not even that (neuron 209):

All the above is WRONG. The mistake is that we normalize each neuron separately. We must define omega generalized as the maximum distance to a point where the cost has increased less than a certain threshold, but that threshold must be the same for all neurons. Doing it correctly (threshold 20%), we get

What happens with the above neurons is that the scale is not in context. Neurons 7, 157 and 209:

subplot(1,3,1)
>> miracostes(todas.A,todas.M,todas.S,todas.f,todas.pos_real,.5,alfa,beta,pos_cm,7)
Computing cost matrices…Done. 0.190727 seconds elapsed.
Mostrando neurona 7,
>> subplot(1,3,2)
>> miracostes(todas.A,todas.M,todas.S,todas.f,todas.pos_real,.5,alfa,beta,pos_cm,157)
Computing cost matrices…Done. 0.194888 seconds elapsed.
Mostrando neurona 157,
>> axis([0 1 0 4])
>> subplot(1,3,3)
>> miracostes(todas.A,todas.M,todas.S,todas.f,todas.pos_real,.5,alfa,beta,pos_cm,209)
Computing cost matrices…Done. 0.192309 seconds elapsed.
Mostrando neurona 209,
>> axis([0 1 0 4])

We plot the cost for each neuron, in the same way as in coli:

matriz=coste2graficamolona(todas.A*alfa,todas.M*beta+todas.S,todas.f,pot,todas.pos_real,0);
>> xlabel(‘Deviation’)

Values in the colorscale are (cost increment)/(cost of actual configuration).

Rescaling the colorbar, so that small values are highlighted:
>> caxis([0 .015])

17 Feb 09

I change the way neurons are sorted, so that the right-hand contour is smooth.

matriz=coste2graficamolona(todas.A*alfa,todas.M*beta+todas.S,todas.f,pot,todas.pos_real,[.005],0);

The same thing, without the contour and with rescaled caxis:

matriz=coste2graficamolona(todas.A*alfa,todas.M*beta+todas.S,todas.f,pot,todas.pos_real,[.005],0);
>> caxis([0 .01])

Answer to first comment by Gonzalo:

potencias=[.1 .25 .5 .75 1 1.5 2 2.5 3 3.5 4 5 6 7 8 9 10];
alfa=1/29; beta=1/29;
for c_pot=1:length(potencias)
pos_cm(1:279,c_pot)=coste2pos_restofijas(todas.A*alfa,todas.M*beta+todas.S,todas.f,todas.pos_real,potencias(c_pot));
end
>> error=mean(abs(pos_cm-repmat(todas.pos_real,[1 length(potencias)])));
>> close all
>> plot(potencias,error,’.-‘)

I do it with the alfa and beta given by Bayes:

potencias=[.1 .25 .5 .75 1 1.5 2 2.5 3 3.5 4 5 6 7 8 9 10];
alfa=10^-1.1; beta=10^-.9;
for c_pot=1:length(potencias)
pos_cm(1:279,c_pot)=coste2pos_restofijas(todas.A*alfa,todas.M*beta+todas.S,todas.f,todas.pos_real,potencias(c_pot));
end
error=mean(abs(pos_cm-repmat(todas.pos_real,[1 length(potencias)])));
close all
plot(potencias,error,’.-‘)
xlabel(‘Cost exponent’)
ylabel(‘Mean error’)

CURRENT POINT: coste2graficamolona AND coste2pos_num_ruido ARE NOT USING THE SAME COST FOR NEURON 37. THERE MUST BE SOME MISTAKE THERE.

## Estudio de los costes para cada neurona, con exponentes 0.5 y 2. Comparación del óptimo global con el que se obtiene fijando todas las demás neuronas en sus posiciones reales.

>> [alfa beta]
ans =
0.0794 0.1259

Se ven sobre todo dos cosas:
1. Sobre todo para exponente 0.5, la posición óptima global (línea negra) suele estar bastante lejos de la posición de mínimo coste con el resto de las neuronas fijas en su posición experimental. Y la posición real (línea roja) suele estar más cerca del mínimo del coste con el resto fijas que del óptimo global.

2. Que algunas neuronas tienen posiciones reales clavadas en mínimos locales.

Pruebo encontrando el óptimo para cada neurona, con las demás fijas en sus posiciones reales.

pos_cm=coste2pos_restofijas(todas.A*alfa,todas.M*beta+todas.S,todas.f,todas.pos_real,.5);
>> mean(abs(todas.pos_real-pos_cm))
ans =
0.0911
pos_cm2=coste2pos_restofijas(todas.A*alfa,todas.M*beta+todas.S,todas.f,todas.pos_real,2);
>> mean(abs(todas.pos_real-pos_cm2))
ans =
0.0926
ans =
0.0976
>> mean(abs(todas.pos_real-pos_opt(:,ind_min)))
ans =
0.1321

Así que calcular el óptimo con el resto fijas apenas mejora el resultado con coste cuadrático, pero lo mejora muchísimo con coste 0.5. Tanto, que pasa a ser mejor que el cuadrático.

Ahora, gráfica omega-desv para el exponente 0.5 y los alfa y beta que dio Bayes. Un truñaco.

plot(abs(todas.pos_real-pos_cm),omega,’.’)

>> xlabel(‘Deviation’)
>> ylabel(‘\omega’)
>> hold on
>> axis(axis)
>> plot(abs(todas.pos_real-pos_cm),omega,’.’)
>> plot(x,7./x.^.5,’k’)
>> plot(x,5./x.^.5,’k’)
>> plot(x,2./x.^.5,’k’)

Miramos el coste de AVAL, que se va mucho en la gráfica:

Para calmar a cierto insidioso supervisor mío, añado omega-desv para el caso sintético con alfa y beta del pnas y exponente 0.5.

plot(abs(pos_opt{1}-pos{1}),omega_pnas,’.’)
>> xlabel(‘Deviation’)
>> ylabel(‘\omega’)

Y aquí viene lo acojonante. ¿Quiénes son esos dos puntitos desviados?

SOSPECHA: ¿Puede ser que Bayes se esté limitando a escoger el que más se acerca con el cálculo de fijar el resto en posiciones reales? (que ya sé que hace mucho más, pero a lo mejor se obtiene el mismo resultado con este otro método mucho más simple).

Pues parece que en el caso de los alfa y beta del PNAS sí es lo que hace:

ans =
0.0879
>> pos_lin_pnas=coste2pos_num_ruido(todas.A*.05,todas.M*1.5+todas.S,todas.f,1,0,1,1);
>> mean(abs(todas.pos_real-pos_lin_pnas))
ans =
0.0946
>> pos_cm2_pnas=coste2pos_restofijas(todas.A*.05,todas.M*1.5+todas.S,todas.f,todas.pos_real,2);
>> mean(abs(todas.pos_real-pos_cm2_pnas))
ans =
0.0844
>> pos_cm1_pnas=coste2pos_restofijas(todas.A*.05,todas.M*1.5+todas.S,todas.f,todas.pos_real,1);
>> mean(abs(todas.pos_real-pos_cm1_pnas))
ans =
0.0828

En realidad no sé si esto importa mucho, porque:

1. Casi es normal que el que mejor cuadra con las desviaciones también tenga un error medio menor (aunque no tenga que ser cierto en general, es lo más probable).
2. Seguimos teniendo un patrón 1/x en la gráfica omega-desv para los alfa y beta del pnas, que indica que las desviaciones también son más consistentes con lineal.

## Study on the effect of removing AVAL and AVAR from the calculations

It seems that AVAL and AVAR may be critical for the good results of exponent 0.5, see previous post. Let’s see what happens when we remove them.

A coarse Bayes yields the same result, stored in posreal_sinavalavar.

>> prob=infoarchivos2prob(infoarchivos,[1 2 3]);
>> subplot(1,2,1)
>> plot(infoarchivos.pot,sum(sum(prob,2),3))
>> subplot(1,2,2)
>> imagesc(log10(infoarchivos.beta),log10(infoarchivos.alfa),squeeze(sum(prob,1)))

The metric is still very significant.

buenas=true(279,1);
>> find(strcmpi(‘aval’,todas.nombres))
ans =
54
>> find(strcmpi(‘avar’,todas.nombres))
ans =
55
>> buenas([54 55])=false;
[m,coste_real,coste_perm]=metrica_pot(todas.A(buenas,buenas)*alfa,todas.M(buenas,:)*beta+todas.S(buenas,:),todas.f,todas.pos_real(buenas),pot,10000,pos_opt(buenas,ind_min));
Calculando coste de permutaciones…1000,2000,3000,4000,5000,6000,7000,8000,9000,10000,Hecho.
>> m
m =
0
>> clf
>> hist(coste_perm,100)
>> hold on
>> ejes=axis;
>> plot(coste_real*[1 1],ejes(3:4),’k’)

The omega-desv plot looks horrible.

omega_restr=sum([todas.A(buenas,buenas)*alfa todas.M(buenas,:)*beta+todas.S(buenas,:)],2);
plot(abs(todas.pos_real(buenas)-pos_opt(buenas,ind_min)),omega_restr,’.’)

## Análisis del estado que predice Bayes (II)

Repito los cálculos de ayer, pero con los resultados definitivos del Bayes en remotón. Estos resultados son:

Pot=0.5, alfa=10^-1.1, beta=10^-0.9.

alfa=10^-1.1; beta=10^-.9; pot=.5;
>> pos_opt=coste2pos_num_ruido(todas.A*alfa,todas.M*beta+todas.S,todas.f,pot,0,1,1);
for c=1:100
pos_opt=[pos_opt coste2pos_num_ruido(todas.A*alfa,todas.M*beta+todas.S,todas.f,pot,0,1,1)];
end
figure
>> hold on
>> pos_opt=coste2pos_num_ruido(todas.A*alfa,todas.M*beta+todas.S,todas.f,pot,0,1,1);
for c=1:100
pos_opt=[pos_opt coste2pos_num_ruido(todas.A*alfa,todas.M*beta+todas.S,todas.f,pot,0,1,1)];
end
for c=1:101
costes(c)=pos2coste(todas.A*alfa,todas.M*beta+todas.S,todas.f,pos_opt(:,c),pot);
end
>> for c=1:101
error(c)=mean(abs(pos_opt(:,c)-todas.pos_real));
end
plot(costes,error,’.’)
>> xlabel(‘Coste’)
>> ylabel(‘Error medio’)
>> [r,p]=corrcoef(costes,error)
r =
1.0000 -0.0127
-0.0127 1.0000
p =
1.0000 0.8997
0.8997 1.0000

[m,ind_min]=min(costes)
omega=sum([todas.A*alfa todas.M*beta+todas.S],2);
plot(abs(todas.pos_real-pos_opt(:,ind_min)),omega,’.’)
>> xlabel(‘Deviation’)
>> ylabel(‘\omega’)

for c=1:279
text(abs(todas.pos_real(c)-pos_opt(c,ind_min)),omega(c),todas.nombres{c})
end

[matriz,binsx,binsy,contornos]=elegans_sintetico2graficaomega(todas.pos_real,pos_opt(:,ind_min),omega,20,20,[],1);
??? Subscripted assignment dimension mismatch.
Error in ==> elegans_sintetico2graficaomega at 35
matriz(c_vacios,:)=mean([matriz(c_vacios-1,:) ; matriz(c_vacios+1,:)]);

[m,coste_real,coste_perm]=metrica_pot(todas.A*alfa,todas.M*beta+todas.S,todas.f,todas.pos_real,pot,10000,pos_opt(:,ind_min));
Calculando coste de permutaciones…1000,2000,3000,4000,5000,6000,7000,8000,9000,10000,Hecho.
>> m
m =
0
>> clf
>> hist(coste_perm,100)
>> hold on
>> ejes=axis;
>> plot(coste_real*[1 1],ejes(3:4),’k’)

Parece (con el cálculo a medias en remotón) que los valores óptimos son:

Potencia=0.4, alfa=10^-1.2, beta=10^-1.1.

Vamos a ver la pinta que tiene la gráfica omega frente a desv para estos parámetros. Corro 101 optimizaciones, y cojo la de menor coste.

pos_opt=coste2pos_num_ruido(todas.A*10^(-1.2),todas.M*10^(-1.1)+todas.S,todas.f,.4,0,1,1);
for c=1:100
pos_opt=[pos_opt coste2pos_num_ruido(todas.A*10^(-1.2),todas.M*10^(-1.1)+todas.S,todas.f,.4,0,1,1)];
end

Coste frente a iteraciones para las 100 optimizaciones:

for c=1:101
costes(c)=pos2coste(todas.A*10^(-1.2),todas.M*10^(-1.1)+todas.S,todas.f,pos_opt(:,c),.4);
end

>> for c=1:101
error(c)=mean(abs(pos_opt(:,c)-todas.pos_real));
end
>> plot(costes,error,’.’)
>> xlabel(‘Coste’)
>> ylabel(‘Error medio’)

Cogemos el de coste mínimo:

[m,ind_min]=min(costes)
omega=sum([todas.A*10^(-1.2) todas.M*10^(-1.1)+todas.S],2);
>> plot(abs(todas.pos_real-pos_opt(:,ind_min)),omega,’.’)
for c=1:279
text(abs(todas.pos_real(c)-pos_opt(c,ind_min)),omega(c),todas.nombres{c})
end

Cojona. Resulta que AVAL, AVAR y DA06 quedan bien colocadas!

APARENTEMENTE bien colocadas. En realidad su coste es grande (aunque a saber si aquí tienen mucho sentido las líneas de isocoste)

## Primera prueba

Estrenamos éste nuestro cuaderno de laboratorio on-line, loable intento de transparencia y agilidad científica, con escasas probabilidades de éxito.

>> plot(-10:.01:10,(-10:.01:10).^2,’LineWidth’,3)
>> hold on
>> plot([-6 6],[120 120],’o’,’MarkerSize’,10,’LineWidth’,3)
>> axis([-12 12 -10 150])

## Hello world!

Welcome to WordPress.com. This is your first post. Edit or delete it and start blogging!