散布図の最小二乗法及び最小絶対値方による線形回帰
    4 ビュー (過去 30 日間)
  
       古いコメントを表示
    
以下のプログラムでプロットした散布図を最小二乗法及び最小絶対値方、二つの方法で線形回帰したいのですが関数ありましたら教えて頂けると幸いです。 どちらも各データセットごとではなくプロットした全ての値から線形回帰したいの考えています。
for i = 1:12
    hold on
    if i==1 || i==3 || i==5 || i==7 || i==8 || i==10 || i==12
        for j = 1:31
            xfilename = sprintf('TA2004%02d%02d.txt',i,j);
            yfilename = sprintf('TS2004%02d%02d.txt',i,j);
            x = load(xfilename);
            y = load(yfilename);
            if i==1 && j == 1
            scatter(x,y);
            else
            scatter(x,y);
            end
        end
    elseif i==2
        for j = 1:29
            xfilename = sprintf('TA2004%02d%02d.txt',i,j);
            yfilename = sprintf('TS2004%02d%02d.txt',i,j);
            x = load(xfilename);
            y = load(yfilename);
            scatter(x,y);
        end
    else
        for j = 1:30
            xfilename = sprintf('TA2004%02d%02d.txt',i,j);
            yfilename = sprintf('TS2004%02d%02d.txt',i,j);
            x = load(xfilename);
            y = load(yfilename);
            scatter(x,y);
        end        
    end
    hold off
end
xlabel('surface temperature');
ylabel('near-surface air temperature');
1 件のコメント
  Walter Roberson
      
      
 2016 年 10 月 9 日
				Approximate translation:
The method of least squares the scatter diagram plotted in the following program and the minimum absolute value hand, I want to linear regression in two ways, but I hope if you could tell me if you have a function. Both are thought to want to linear regression from all of the values plot rather than for each data set.
回答 (1 件)
  michio
    
 2016 年 10 月 10 日
        
      編集済み: michio
    
 2016 年 10 月 10 日
  
      最小二乗法での簡単な線形回帰は、多項式近似を行う polyfit が MATLAB 本体にありますが、最小絶対値法を使用して線形回帰を行う関数はありません。fminsearch関数などを使用して最適化問題としての実装が可能かと思います。
今回、コードから推察するに2004/1/1 から 2004/12/31 まで毎日観測した結果が保存された 366 x 2個のファイルから1つ1つデータを変数 x, y に読み込んで、散布図を作成されております。散布図の作成であれば1つ1つ処理すれば十分ですが、すべてのデータに対して線形回帰や相関係数を求める場合には、 上記の方法では難しいかと思います。
以前、すべてのデータをメモリに読み込むことが可能かという点について質問させていただきましたが、732個のファイルからのすべてのデータの散布図を描けているようですので、メモリの面では問題が無いのかと推察します。
実際にデータがどのように保存されているかによって多少のカスタマイズが必要ですが、
dsX = datastore('TA2004*.txt');
x = readall(dsX);
dsY = datastore('TS2004*.txt');
y = readall(dsY);
ですべてのデータファイルのデータを x, y に読み込むことができる関数です。
まずは、上記の datastore 関数の説明ページ、または下記のコマンドで挙動を確認してみてください。
dsX = datastore('TA2004*.txt')
preview(dsX)
15 件のコメント
  michio
    
 2016 年 10 月 29 日
				以前と同じファイルですと、
 dsX = datastore ('TS2004*.txt');
 dsX.MultipleDelimitersAsOne = true;
 dsX.NumHeaderLines = 0;
のオプション設定が有効かと思います。 dsX (datastore object) の各プロパティとデータの形式、そして出力結果とをにらめっこしながら確認して頂くのが確実です。
経験上下記の5つは要注目です。
- NumHeaderLines — ファイルの先頭でスキップする行数
- Delimiter — フィールドの区切り記号
- RowDelimiter — 行区切り記号文字
- Whitespace — 空白文字
- MultipleDelimitersAsOne — 複数の区切り記号の取り扱い
オプションも多く、それぞれ一つづつ確認するのは最初は大変かと思いますが、一度慣れていただきますとその他様々な形式のファイルに柔軟に対応できますので、是非一度挙動を確認してみてください。各オプション設定は
の2ページに例題も合わせて情報がありますので参考にしてください。
参考
カテゴリ
				Help Center および File Exchange で Text Data Preparation についてさらに検索
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

