2017-01-14 9 views
0

自分自身のk-meansを実装するために、Rスタジオでの平方和の総和、平方和の平方和、および平方和の間の関数を作成しようとしています。平方和不一致の総和を計算する

私は正常に平方和の関数を書いていますが、私は平方和の総和(したがってbss)に問題があります。私が得た結果は、R自身のkmeans関数が計算するものよりもかなり大きいです。私は式が提供するものを正確に守っているので、混乱しています。ここに私のデータがあります:

A = 

36  3 
73  3 
30  3 
49  3 
47 11 
47 11 
0  7 
46  5 
16  3 
52  4 
0  8 
21  3 
0  4 
57  6 
31  5 
0  6 
40  3 
31  5 
38  4 
0  5 
59  4 
61  6 
48  7 
29  2 
0  4 
19  4 
19  3 
48  9 
48  4 
21  5 

各列は機能です。これは、これまでにtssに対して作成した関数です。

tot_sumoSq <- function(data){ 

    avg = mean(as.matrix(data)) 
    r = matrix(avg, nrow(data), ncol(data)) 

    tot_sumoSq = sum((data - r)^2) 

} 

結果は24342.4ですが、Rは13244.8です。私は何かを完全に欠いていますか?

答えて

0

後者の値は、カラム手段を使用して計算されます。これを使って平均を計算すると、同じ答えが得られます。

avg = colMeans(data) 
    r = matrix(avg, nrow(data), ncol(data), byrow=T) 
[1] 13244.8 
+0

ありがとうございます。これにより多くのことが明らかになりました。 – user1723196

0

あなたのプログラムに何か問題があるかもしれません。データフレームから行列を減算します。以下を使用してください。 -

tot_sumoSq <- function(data){ 
    data = as.matrix(data) 
    x = sum((data - mean(data))^2) 
    return(x) 
} 

私の側からは正しい答えが得られます。

+0

ありがとうございます。これで問題は解決しませんでしたが、解決策を見つけるのに役立ちました! – user1723196

0

最初の2人の解説者が提供したソリューションを組み合わせることで、私の問題の解決策が見つかりました。私は以前の間違いが何であるかを見て、将来の科学者に混乱を晴らすことを望みます。

tot_sumoSq <- function(data){ 

    avg = colMeans(data) 
    r = matrix(avg, nrow(data), ncol(data), byrow = T) 

    data = as.matrix(data) 

    return(sum((data - r)^2)) 

} 

各列は、私たちが列ごとに平均値を計算するときに、それが一つの特徴のために、サンプル全体のための手段の平均で、さまざまな機能のために全体のサンプルです。私の概念上の間違いは、両方の機能を組み合わせて全体的な平均を計算することでした。