アットウィキロゴ

主成分分析99

var point=new Array();
var a=new Array();
 
function myFunction() {
 
  for(s=1;s<11;s++){
  point[s]=new Array();
  }
 
   id="1wNSGiOawj581vATf9rxG3pI81DB88CmFRA2Mn5GFGVI";
  ex = SpreadsheetApp.openById(id);
 
  var sheet = ex.getSheetByName("data");
 
  var v=sheet.getRange(1, 1,11,4).getValues();
 
  for(s=1;s<11;s++){
  for(sx=1;sx<4;sx++){
  aa=change(v[s][sx]);
  point[s][sx]=parseFloat(aa);
  }
}
 
  var avg=new Array();
 
  for(tr=1;tr<4;tr++){
  a1=0;
  for(s=1;s<11;s++){
  a1=a1+point[s][tr];
  }
  avg[tr]=a1/10;
  }
 
  var sig=new Array();
  for(s=1;s<4;s++){
  sig[s]=new Array();
  }
 
 
  for(s1=1;s1<4;s1++){
  for(s2=1;s2<4;s2++){
    a1=0;
    for(sx=1;sx<11;sx++){  
  a1=a1+(point[sx][s1]-avg[s1])* (point[sx][s2]-avg[s2]); 
    }
  sig[s1][s2]=a1/10;
  }
  }
 
 
 
  for(s=0;s<3;s++){
  a[s]=new Array();
  }
 
 
  for(s1=1;s1<4;s1++){
  for(s2=1;s2<4;s2++){
  z=sig[s1][s2]/Math.sqrt(sig[s1][s1]);
  a[s1-1][s2-1]= z/ Math.sqrt(sig[s2][s2]);
  }}
 
 
 
 
  var sub=numeric;   
 
ev = sub.numeric.eig(a);
 
var xx=ev.lambda.x;
var yy=ev.E.x;
 
var lam=new Array(); 
var v=new Array(); 
 
 for(s=1;s<4;s++){
  v[s]=new Array();
  }
 
 
 
for(s=1;s<4;s++){  
lam[s]=xx[s-1];  
}
 
  for(s=1;s<4;s++){  
  for(sx=1;sx<4;sx++){  
 v[s][sx]=yy[s-1][sx-1];  
  }}
 
 
Logger.log(lam[1]);  
 
 Logger.log(v[1][1]+","+v[1][2]+","+v[1][3]);  
 
  Logger.log(lam[2]);  
  Logger.log(v[2][1]+","+v[2][2]+","+v[2][3]);  
  Logger.log(lam[3]);  
  Logger.log(v[3][1]+","+v[3][2]+","+v[3][3]);
 
  var delta=new Array();
 
  for(s=1;s<11;s++){
  p1=0;
  for(sx=1;sx<4;sx++){
  p1=p1+v[2][sx]*(point[s][sx]-avg[sx]);
  }
  delta[s]=p1;
  } 
 
 
 
  for(s=1;s<11;s++){ 
  sheet.getRange(1+s,5).setValue(delta[s]);
}
 
 
 
}
 
function change(strx){
 
han = "0123456789";
zen = "0123456789";
str = "";
for (i=0; i<strx.length; i++){
	c = strx.charAt(i);
	n = zen.indexOf(c,0);
	if (n >= 0) c = han.charAt(n);
	str += c;
}
return str;
 
}
最終更新:2017年04月19日 05:12