2015-05-31 9 views
5

मैं नीचे की तरह एक dataframe है:कैसे कोर की तरह एक रेखीय प्रतीपगमन मैट्रिक्स उत्पन्न करने के लिए()

a1 a2 a3 a4 
1 3 3 5 5 
2 4 3 5 5 
3 5 4 6 5 
4 6 5 7 3 

मैं dataframe में हर दो स्तंभों के लिए रेखीय प्रतीपगमन करना चाहते हैं, और 0.

रूप intercept सेट

दूसरे शब्दों में, मैं cor() में lm(a1~a2+0), lm(a1~a3+0), lm(a1~a4+0), lm(a2~a1+0), lm(a2~a3+0)...

के गुणांकों प्राप्त करना चाहते हैं, अगर मैं इनपुट एक dataframe, मैं एक मैट्रिक्स वापस मिल जाएगा, जैसे नीचे,

  a1  a2  a3  a4 
a1 1.0000000 0.9467293 0.8944272 0.2045983 
a2 0.9467293 1.0000000 0.9622504 0.4989222 
a3 0.8944272 0.9622504 1.0000000 0.4574957 
a4 0.2045983 0.4989222 0.4574957 1.0000000 

lm() में वहाँ किसी भी तरह से मैट्रिक्स की ही तरह पाने के लिए है?

धन्यवाद।

+0

मुझे आपकी टिप्पणी के लिए खेद है कि आपके प्रश्न से संबंधित नहीं है, लेकिन इसका क्या अर्थ है? क्या आप मॉडल में अवरोध शामिल नहीं करने की कोशिश कर रहे हैं? – SabDeM

+0

@SabDeM '+ 0' का मतलब अवरोध को हटा देना है। – rankthefirst

+0

मैंने अनुमान लगाया। मुझे केवल '1' रखना था, लेकिन अब मुझे पता है कि '+ 0' भी अच्छी तरह से काम करता है जैसा कि यहां कहा गया है: http://stackoverflow.com/questions/14216893/how-to-remove-intercept-in -r। धन्यवाद। – SabDeM

उत्तर

4

यहाँ एक बहुत सामान्य रणनीति

dd<-read.table(text="a1 a2 a3 a4 
1 3 3 5 5 
2 4 3 5 5 
3 5 4 6 5 
4 6 5 7 3", header=T) 

mm<-diag(ncol(dd)) 
mm[lower.tri(mm)] <- combn(dd, 2, function(x) coef(lm(x[,2]~x[,1]+0))) 
mm[upper.tri(mm)] <- rev(combn(dd[length(dd):1], 2, function(x) coef(lm(x[,2]~x[,1]+0)))) 

इस मैट्रिक्स देता है

mm 
#   [,1]  [,2]  [,3]  [,4] 
# [1,] 1.0000000 1.202381 0.7738095 0.9285714 
# [2,] 0.8255814 1.000000 0.6592593 0.7925926 
# [3,] 1.2441860 1.508475 1.0000000 1.2033898 
# [4,] 0.9069767 1.101695 0.7481481 1.0000000 

जहां तत्व [4,1] coef(lm(a4~a1+0, dd)) और तत्व [2,3] के रूप में ही है के रूप में ही है coef(lm(a2~a3+0, dd))

+0

धन्यवाद, यह वास्तव में सहायक है। मैं मूल रूप से एक समारोह चाहता हूं, लेकिन यह सही काम करता है ~ – rankthefirst

+0

जबकि, 'upper.tri (mm)' में, केवल एक टिप्पणी है, ऐसा लगता है कि 'rev() 'मैट्रिक्स को भरने का सही क्रम नहीं है। शायद पहले 'टी (मिमी)' फिर 'टी (टी (मिमी))'? – rankthefirst

+0

मैंने अभी भी 'dd' के कॉलम फ़्लिप किए हैं जो मुझे लगता है कि समस्या को हल करता है। – MrFlick

संबंधित मुद्दे

 संबंधित मुद्दे