【掲示板ご利用上の注意】

 ※題名は具体的に!
 ※学校の課題の丸投げ禁止!
 ※ソースの添付は「HTML変換ツール」で字下げ!
 ※返信の引用は最小限に!
 ※環境(OSとコンパイラ)や症状は具体的に詳しく!
 ※返信付き投稿の削除は禁止!
 ※マルチポスト(多重投稿)は慎んで!

 詳しくはこちら


本当はこんなに大きく書きたくはないのですが、なかなか守っていただけなくて…。
 守ってくださいね。お願いします。(by管理人)

C言語ソース⇒HTML形式ツール掲示板2こちら


管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.22231

重回帰分析の質問です
投稿者---isibasi(2005/07/28 12:56:52)


重回帰分析の問題で、a0=μy-(a1μx1+a2μx2+...+apμxp)のa0,a1,a2,a3を求めるのですが、行列の掛け算のところまでは出来たのですが、その後の、(Xの転置*X)A=(Xの転置*Y) a[a1]
[a2]
[ap]
という所からがよく分かりません。
今出来ているものは、
#include<stdio.h>
int main(void)
{
int i,j=0,m,n,k;
double a[50][50],b[50],c[50][50],heikin=0.0,d[50[50],y=0.0,w[50][50];
double ave=0.0,z=0.0,e[50][50];
float a[50][51];
FILE *fp;
char fname[21],dummy[100];

printf("ファイル名の入力");
scanf("%s",fname);
if((fp=fopen(fname,"r"))==NULL){
return 0;
}
fgets(dummy,99,fp);
fscanf(fp,"%d",&n);fscanf(fp,"%d",&m);

fgets(dummy,99,fp);
fgets(dummy,99,fp);

for(i=0;i<n;i++){
fscanf(fp,"%lf",b[i]);
for(j=0;j<m;j++){
fscanf(fp,"%lf",&a[i][j]);
}
}
for(i=0;i<n;i++){/*計算前の結果*/
for(j=0;j<m;j++){
printf("%3.0lf",a[i][j]);
}
}
for(i=0;i<n;i++){/*平均値の計算*/
heikin+=b[i];
}
heikin=heikin/n;/*各要素-平均値*/
for(i=0;i<n;i++){
b[i]=b[i]-heikin;
}

for(j=0;j<m;j++){
for(i=0;i<n;i++){
a[n][j]+=a[i][j];
}
}
for(i=0;i<n;i++){/*各列の平均値の計算*/
ave=a[n][i]/n;
}
for(i=0;i<n;i++){
for(j=0;j<m;j++){
a[i][j]=a[i][j]-ave;/*各要素-平均値*/
}
}

for(i=0;i<n;i++){/*計算後の結果*/
for(j=0;j<m;j++){
printf("%3.0lf",a[i][j]);
}
}
for(i=0;i<m;i++){/*転置行列*/
for(k=3;k>=0;k--){
for(j=0;j<n;j++){


c[i][j]=a[k][j];

}
}
}
for(i=0;i<m;i++){
for(j=0;j<n;j++){
printf("%3d",c[j][i]);
}
putchar('\n');
}
for(i=0;i<m;i++){
for(k=0;k<m;k++){
for(j=0;j<n;j++){

y+=c[i][j]*a[j][k];/*aの転置*a*/
z+=c[i][j]*b[i];/*aの転置*b*/

}
w[i][k]=y;
e[i][k]=z
y=0;
z=0;
}
}
for(i=0;i<n;i++){/*結果の出力*/
for(j=0;j<m;j++){
printf("%3d %3d ",w[i][j],e[i][j]);
}
putchar('\n');
}
for (i=0;i<N;i++){/*ガウスージョルダンの互除法*/
for (j=0;j<=N;j++)
for (k=0;k<60;k++){
d=a[k][k];
for (j=k;j<=60;j++)
a[k][j]=a[k][j]/d;
for (i=0;i<N;i++){
if (i == k) continue;
d=a[i][k];
for (j=k+1;j<=N;j++)
a[i][j]=a[i][j]-a[k][j]*d;
a[i][k] = 0.0;
}
}

printf("\n答え:\n");
for (k=0;k<N;k++)
printf(" x%d=%7.3f",k+1,a[k][N]);
printf("\n\n");

}
です。
この後どうやって計算をすればいいんでしょうか?


      


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:重回帰分析の質問です 22272 ebi 2005/07/29 02:57:56


No.22272

Re:重回帰分析の質問です
投稿者---ebi(2005/07/29 02:57:56)


以前に

http://aoki2.si.gunma-u.ac.jp/Mokuji/index2.html

から辿れる、

http://aoki2.si.gunma-u.ac.jp/PseudoFTP/UNIX/index.html

のawkのプログラムを参考に、重回帰分析を行うプログラムを書いたことがあります。残念ながらCではなかったのですが、ロジックが非常に役立ちました。ご参考まで。


この投稿にコメントする

削除パスワード

No.22294

Re:重回帰分析の質問です
投稿者---isibasi(2005/07/29 17:41:32)


ありがとうございました。
参考にしてみます。


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧