我模拟了长度为 100 的两个独立随机游走的 1000 次实现
N <- 1000
n <- 100
set.seed(1)
M.x <- sapply(1:N, \(k) cumsum(rnorm(n)))
M.y <- sapply(1:N, \(k) cumsum(rnorm(n)))
在矩阵中
M.x
,M.y
是列中的实现。
对于每个组合“列到列”,我想通过使用简单线性回归
lm(y ~ -1 + x)
来估计回归系数并提取回归系数。
我想避免循环。我更喜欢使用
map()
包中 purrr
系列的东西,我对此还不太了解。
我将非常感谢您的帮助。
请注意,无截距的简单线性回归中的斜率公式为
sum(x*y)/sum(x^2)
。我们可以以矩阵形式利用它:
diag(t(M.x) %*% M.y) / diag(t(M.x) %*% M.x)
[1] 0.142780158 -0.688172617 0.591777820 1.096226652 0.458449019 -0.729486974 -0.161225471
[8] -0.275493553 0.500602766 -0.175171117 -0.400500634 0.111438175 0.005283035 -0.302037119
[15] -0.588920240 -1.675476344 -1.609057813 0.047642782 -0.229759970 -0.599253230 2.537797206
正如@Onyambu 指出的,更有效的方法是:
colSums(M.x*M.y)/colSums(M.x^2)
基准:
benchmark("matrix_mul" = {
a <- diag(t(M.x) %*% M.y) / diag(t(M.x) %*% M.x)
},
"colsums" = {
a <- colSums(M.x*M.y)/colSums(M.x^2)
},
replications = 10)
test replications elapsed relative user.self sys.self user.child
2 colsums 10 0.021 1.000 0.02 0.00 0
1 matrix_mul 10 2.775 132.143 2.73 0.05 0
sys.child
2 0
1 0
您可以再次使用
sapply
:
unname(sapply(1:N, \(i) lm(M.y[,i] ~ -1 + M.x[,i])$coef))
#> [1] 0.142780158 -0.688172617 0.591777820 1.096226652 0.458449019
#> [6] -0.729486974 -0.161225471 -0.275493553 0.500602766 -0.175171117
#> [11] -0.400500634 0.111438175 0.005283035 -0.302037119 -0.588920240
#> [16] -1.675476344 -1.609057813 0.047642782 -0.229759970 -0.599253230
#> [21] 2.537797206 -2.977715213 0.636540370 0.061993011 2.188426275
#> [26] 0.679679549 -0.719462566 -1.197273286 -0.416117471 1.664768550
#> [31] -1.005816693 -1.162631092 -0.294099681 0.729467645 -0.215695317
#> [36] 0.956380670 1.846427922 0.489391447 -0.885925810 0.066974384
#> [41] 0.606102008 0.406679708 1.597965339 -0.202898267 0.019374302
#> [46] -0.107405981 0.422746366 0.807129063 0.595192146 0.408670969
#> [51] -0.327639464 0.008517012 -0.409888273 1.263649176 -1.542075828
#> [56] 0.512431632 1.155453295 0.053880676 -0.036682612 0.877186512
#> [61] -0.328162501 0.649707679 -0.557597309 0.975597615 1.625491381
#> [66] 0.428314366 -0.709623799 0.073475141 -0.202766409 -0.340904465
#> [71] -1.053087943 -0.956892298 1.341394636 -0.397776745 -0.036116668
#> [76] 0.523498836 -0.063581399 0.211290060 -1.962040442 -0.471110719
#> [81] -1.298191872 -0.086383535 -0.460128743 0.252570031 -0.033313877
#> [86] -0.475633530 -1.632861518 -0.593702856 -0.827513457 -0.001396760
#> [91] 0.563178278 -0.382932729 1.320015422 -0.486670558 -1.923201522
#> [96] -2.771269220 -1.127225486 1.279884834 0.908108916 -0.703459180
#> [101] 1.153656849 -0.887346302 -0.171878860 0.103040892 -0.355599609
#> [106] -0.703744718 1.470741204 2.535436357 -1.130265337 0.919289133
#> [111] 0.382851146 0.539736322 0.535958651 -0.449753720 0.466950594
#> [116] -0.080096195 -0.159956416 -1.710404742 -0.766018196 -1.587517475
#> [121] 0.243087724 -1.229835873 -3.136643564 1.431822385 -0.285076483
#> [126] 0.855901812 -0.585610441 -0.452630066 0.635419369 1.069862989
#> [131] -2.327251784 0.130630588 -0.038356725 -0.746222770 0.809647919
#> [136] -1.048461673 0.537289403 -2.085502597 -1.432872359 -0.651188384
#> [141] -0.174702321 1.118701033 0.996249234 0.098764025 0.073821528
#> [146] 0.453500977 0.091910378 -0.084203508 -0.808649050 -0.284186968
#> [151] 0.563463177 0.195282849 0.473938277 0.825834685 -0.615184094
#> [156] -1.475076996 -0.279765852 0.746661436 -0.042608477 2.260168802
#> [161] -0.211406901 -2.079142805 1.742691178 0.735913352 2.098113271
#> [166] 0.159075799 -0.271114399 -0.468704277 1.433374757 0.001036845
#> [171] -0.960438240 1.207444303 0.248658537 0.302821523 0.002429807
#> [176] 1.296961757 0.583911152 -1.106773843 -1.926896071 0.120309394
#> [181] 2.474567183 0.597633724 -0.184838007 0.150638633 0.069206696
#> [186] -0.854393866 0.988315471 -0.679071373 4.284405478 0.710587262
#> [191] -0.501174873 -0.773781398 -0.276915623 1.598569824 -0.942613117
#> [196] -0.581714832 0.307788847 -0.001973353 0.356196868 1.353933718
#> [201] -0.463888593 0.291795383 0.665797455 0.959419426 -0.547117724
#> [206] -0.609298164 1.265522580 0.954084026 0.568211456 0.866577912
#> [211] -0.262119503 -0.297727275 1.190209818 -0.060594486 -0.499806100
#> [216] -2.257997852 0.125542723 0.092895114 0.767227486 0.177355546
#> [221] 0.088750566 -0.694623358 0.755471912 0.072190646 -0.313446456
#> [226] 0.985802298 -0.306558415 0.570389359 -0.240827270 0.566492738
#> [231] -1.699678519 -1.245365340 0.760514004 -0.278772143 0.012356502
#> [236] 0.314190770 -0.752788913 -0.522973334 0.564922093 -0.818729227
#> [241] 0.316896487 -0.061078787 -0.248392816 0.740108985 -0.189991526
#> [246] -0.093572645 0.511704832 1.376989240 -0.328069553 -1.195800396
#> [251] 0.121389063 0.649641858 0.460376652 0.147758772 -0.400891935
#> [256] 0.743865930 1.290839946 0.282205768 0.684324693 -0.241200342
#> [261] -0.005604070 -0.008407957 -0.258061457 -0.104181623 -0.721145183
#> [266] -0.531989833 0.958034973 -0.019485204 -0.640718886 -1.050179620
#> [271] 0.100071359 0.969843131 0.433737583 -0.488703249 0.409396810
#> [276] -0.272751252 -0.694075277 0.252244042 -0.600687490 -1.642538569
#> [281] 1.106936025 0.919048889 0.971942874 0.379891648 0.008922961
#> [286] -0.244725919 1.373009578 -0.595568748 0.820877695 0.078434072
#> [291] 1.621109471 -0.552126110 0.790993402 1.234568207 0.942040388
#> [296] 1.313044432 -0.678262672 0.478572186 -0.214135010 -1.121011739
#> [301] -1.514925554 -0.382354982 -1.206988640 -0.340690348 0.547124102
#> [306] -0.045360546 0.440435604 -0.690129377 0.319584078 0.775831568
#> [311] 0.460294762 1.505941187 0.308014083 1.057926228 1.038160496
#> [316] 0.702004015 -0.559355572 0.025643119 1.251236134 0.486673391
#> [321] -0.152482284 -0.812259297 -0.086964018 -0.331959372 -1.351203941
#> [326] -1.325641395 0.750480747 0.225129511 -0.302439528 0.368495587
#> [331] -0.155709918 0.030223853 -0.421697568 -0.082027612 0.505391874
#> [336] -0.177161150 0.664516409 -1.175020606 0.559086969 -0.926244570
#> [341] -0.988884806 -1.795195859 -1.242319946 0.278460180 -0.387542222
#> [346] -3.241608445 0.545854689 0.399026127 -0.103525327 1.193451241
#> [351] 0.590264050 0.755009240 -0.670187334 -0.238820106 0.668178223
#> [356] -0.609009594 0.181935783 -0.653944599 -0.563463065 0.076750822
#> [361] -0.669208489 0.620508443 -1.210562126 2.594621571 0.823149487
#> [366] -0.418400403 0.087126846 0.011642997 -0.054161075 -0.701836104
#> [371] 0.724482722 0.057437708 -1.138908592 -1.611934282 0.484930031
#> [376] 0.627516677 0.511555475 1.671077505 -1.869605290 0.104855370
#> [381] -0.500006866 0.664458715 -0.254880133 0.273153560 -0.972156766
#> [386] -0.612948676 0.463238387 -0.771706884 -0.152892676 -0.277668758
#> [391] -0.034229842 0.592440207 1.476814388 0.274990442 0.683610781
#> [396] -1.677356321 0.447578448 -0.466287718 0.059293393 1.983837238
#> [401] -0.077064452 1.535348498 0.232939092 -0.859431993 -0.790554969
#> [406] 4.185362384 0.104208531 0.232461652 1.032037726 -0.507343252
#> [411] -0.717896429 -0.024296632 -0.114259015 1.278474957 0.253348442
#> [416] -0.493087330 -1.481319794 -0.051070933 0.528177631 -0.764335578
#> [421] -0.354651054 -0.025094481 0.877145682 -0.025753603 1.147501626
#> [426] -0.736490995 -0.358757791 0.984722673 0.625297939 0.267092517
#> [431] -0.125890124 0.655998709 -0.433716359 -1.180240544 -0.023133140
#> [436] -2.058958525 0.045283679 0.994295964 -2.726133031 0.589739694
#> [441] 0.522789707 0.255225152 -0.842458719 -3.288018360 0.268888458
#> [446] -1.025985070 1.783538144 0.274914979 0.549368818 1.014576846
#> [451] -0.414151885 -0.312253275 -0.049141545 -0.222312373 1.011742456
#> [456] 0.582157308 -1.501621742 -0.834920693 0.175630033 -0.668892854
#> [461] 1.136500854 -1.042510367 -0.388277548 1.579019482 -0.338852237
#> [466] 1.229626862 0.383807372 -1.031890439 -0.182115176 -0.461429897
#> [471] 0.245829274 1.122306941 0.490415809 -0.008683220 0.045273361
#> [476] 1.357918350 0.421894080 -0.363645529 0.614758589 0.665282720
#> [481] 1.954763605 -0.145879345 -0.153090170 -0.029691622 -0.428708901
#> [486] -0.208822466 0.019570092 -2.399608403 0.525993397 -0.005184060
#> [491] 1.368057020 -0.329971374 0.290391874 -0.815309000 -0.008396685
#> [496] 1.325130172 1.250087677 0.429978678 -0.787679242 -1.534935317
#> [501] -0.831585909 0.973363449 -1.637260710 -0.015329439 -0.276239062
#> [506] 0.400099010 1.034728008 0.161922721 -0.036928227 0.906681043
#> [511] 1.388616887 0.413838396 -0.593609601 -0.553056503 -0.076678301
#> [516] -0.112235818 -0.138329801 -0.138426635 0.912623273 -0.909450247
#> [521] 0.182960923 0.610006736 0.596871007 0.094906527 1.429897683
#> [526] -1.980858050 -1.038331200 -0.322100701 1.176064916 1.008884733
#> [531] 0.323342093 0.693673733 0.558897396 -0.321437122 0.427578935
#> [536] 0.272240144 -0.248542287 -1.376679813 0.771310134 -1.918237330
#> [541] 1.118653706 0.253123615 -0.048065085 -0.081069590 0.260625490
#> [546] -0.199715775 -0.196610461 -1.333797311 -0.294943351 -1.680231262
#> [551] -0.056302127 -0.237052281 1.344312600 -1.679848830 0.392146617
#> [556] -0.230505381 0.073599679 1.124174778 0.152681151 0.277105893
#> [561] 0.318497229 -2.622962122 -0.025196409 0.253981739 -0.316410464
#> [566] 0.842998848 0.193398191 0.074307214 0.388002690 -1.053945009
#> [571] 0.416116671 -0.097739395 -0.363803718 0.695399661 1.023318872
#> [576] -0.024103929 -0.187999949 -0.157047687 0.072294422 -0.607698838
#> [581] 0.442578953 0.421976722 1.636688095 -0.392688289 0.192968744
#> [586] -1.277807053 -0.007460952 0.305810067 -0.186106546 -0.470916167
#> [591] 1.250230169 -0.636339498 -0.143533925 -1.203047745 0.038806710
#> [596] -1.947324708 1.812736330 -0.819454895 -0.937642936 0.397273569
#> [601] -0.703541527 -0.563010266 -0.413320022 -1.447774882 0.325015704
#> [606] 0.041007959 0.700083984 -0.107917941 0.411982406 0.874344596
#> [611] 0.218511291 0.548132171 -0.423096393 -0.513291084 0.407246145
#> [616] 0.180821250 0.026307385 0.975473273 -0.580539240 -0.984826634
#> [621] 0.418078364 -0.291757826 -0.173333743 -0.621228061 -0.098119257
#> [626] 0.014267538 0.131728699 -1.659052329 0.355753545 -0.979578862
#> [631] -0.751149061 0.641575239 1.947022802 -0.307268398 -0.355498641
#> [636] -0.552994094 -0.072896614 0.004081815 1.535724326 -0.694960031
#> [641] -0.942599442 -1.008218229 1.057722675 0.593655165 -3.364598391
#> [646] -0.364751791 0.602939503 0.843215859 -0.857700079 -0.626362726
#> [651] -1.191980367 0.645131380 -0.716272144 -1.670270971 0.377044129
#> [656] -0.227288272 0.266709680 -0.575794899 -0.003092393 -1.131304990
#> [661] -0.271245131 -0.056698023 -0.499877998 -0.836935075 -1.575005255
#> [666] -1.020114768 -0.558284137 -0.688783739 1.676023919 0.321405836
#> [671] -0.885289072 -0.529382987 -0.120157692 -0.621319345 -0.559189806
#> [676] 2.228373987 -0.718729881 3.019370856 -0.690494724 0.006536090
#> [681] -0.839671617 0.445830072 1.354970793 0.717173345 -0.225335764
#> [686] -1.592243165 0.307817908 0.903138953 -1.147974894 0.433826706
#> [691] 1.188687235 -0.295693458 -1.024777758 0.141901252 0.978099035
#> [696] -1.019038742 0.338415766 1.175447094 -1.015748001 0.214480721
#> [701] -1.222546184 -2.103001574 -2.174898234 -0.821057397 0.905598624
#> [706] -0.018949206 -0.906960472 1.804277362 0.937477284 0.378882797
#> [711] 0.289311897 1.055060190 0.524166191 0.602805628 -0.385147770
#> [716] -2.560322637 1.354662135 -1.869113561 0.759088474 0.159640159
#> [721] 1.595104332 1.349868933 -0.640981456 0.319723055 -0.700202086
#> [726] -0.030996980 0.490609752 -1.505985915 -1.172451504 -1.570715873
#> [731] -1.059930839 0.405345812 0.254510054 -0.311236260 -0.236567791
#> [736] 0.515981965 0.053573253 -0.642747394 -1.447894823 0.323381417
#> [741] 0.004482076 -0.395398752 0.629588753 -0.105610510 -0.401305241
#> [746] 5.102246377 0.407634259 -0.327246045 -0.248085259 0.122404236
#> [751] -0.683975511 0.271868805 0.524927931 -1.177261229 -0.468528501
#> [756] 0.265269749 1.325718929 0.186478687 -0.014795828 -0.592484794
#> [761] -0.271923065 -0.083180505 -0.862606807 -1.300436271 -1.367001795
#> [766] 0.820520976 -0.493885278 0.558534102 -0.517153378 -0.345050493
#> [771] -1.316169153 -0.037889441 -0.391100496 -0.250052739 -0.336979388
#> [776] 1.262638296 -0.177596688 3.249398843 0.938132145 -0.163673504
#> [781] 0.455873806 -2.511250157 1.709364886 -0.691060879 -0.324192930
#> [786] -0.879495240 -1.884495600 0.091255164 -0.685735670 0.118470157
#> [791] -0.047474961 1.168527130 0.672150445 -0.621979016 -0.536693958
#> [796] -1.595820145 -0.155981317 -1.246725418 1.089565438 0.489779503
#> [801] -0.417214112 0.443137779 -1.210536906 0.915981465 -1.129062956
#> [806] 0.384933609 -1.033609720 0.774092049 0.786226432 1.283178813
#> [811] -0.152609026 -0.623084587 -1.193118689 -1.031066109 0.100258097
#> [816] -0.272545632 1.057919309 -0.327012132 -0.353760557 0.972085189
#> [821] 0.750070893 -1.069572094 1.375028833 -1.067651001 0.470007167
#> [826] -0.480467096 -0.144925034 -1.017411085 -0.807132430 1.582803291
#> [831] 0.206971466 -0.337142947 -0.296166475 -0.693760238 0.247693786
#> [836] -0.532784838 0.707518060 0.085600568 -0.591593386 0.605976246
#> [841] -0.273506700 0.512892407 -0.842999232 -0.137111172 0.414036061
#> [846] 0.447228955 0.334547473 1.683487981 0.304940060 -1.859899324
#> [851] 0.050384437 -0.722624188 -0.410544345 -0.953988844 -0.108775566
#> [856] -0.156519439 1.018372684 -2.277867880 0.740314445 -1.159149609
#> [861] -2.778408681 -0.817934216 -0.188595339 -0.920092351 0.016759135
#> [866] -0.054782116 -0.041216762 2.017510231 0.285408330 0.933284066
#> [871] 0.393518694 -1.520506593 0.861880369 0.266554276 1.389880127
#> [876] -0.835548939 -2.784430510 0.634368107 -0.408897708 -0.817965861
#> [881] -0.093666747 -0.136140528 -0.048701755 -0.237781325 -0.388323000
#> [886] 1.483665647 -2.836321970 -0.293884714 -1.021843430 -1.544642133
#> [891] 0.125904486 -0.267030538 0.136994133 -0.404835151 -0.406830086
#> [896] 0.759312397 -1.022547835 -0.526718122 -0.751037511 -0.366842047
#> [901] 0.253243770 -0.833496977 -0.053614877 -0.131402129 1.642664006
#> [906] 0.506368330 -0.249639763 -0.171877683 -0.534761998 -0.374962837
#> [911] 1.384406951 -1.105639345 0.021978031 -0.890433287 -1.579214962
#> [916] 0.048256996 0.104334531 1.832824029 -0.250895296 -0.797026968
#> [921] 0.655569276 -1.448102565 -1.182888978 -0.052004765 -0.944823737
#> [926] 0.845384163 -0.447629164 -0.280044284 0.521135186 0.595257903
#> [931] -0.672434321 2.559969024 -0.056732861 -0.477141469 0.678068080
#> [936] 1.121641291 -0.947261586 0.308302462 1.100078243 0.364928198
#> [941] 0.228815913 0.588466255 -0.798926968 0.497836747 -0.480694712
#> [946] -0.003117742 0.080966682 0.653415945 0.232699176 -1.100040627
#> [951] 0.981915644 -0.142760209 0.134545619 0.844301227 0.879541777
#> [956] 0.785469269 1.267139513 -0.185951025 -0.044168527 -0.295282479
#> [961] -0.194446874 -0.045376377 0.368187536 0.056163708 -0.662164303
#> [966] -0.356984532 0.048393092 1.250741721 2.694488166 0.645393564
#> [971] 1.987430087 0.879119028 -0.553184641 0.841232332 -2.023211703
#> [976] -0.729007161 -3.656670655 0.555670055 -0.308245278 0.253733509
#> [981] -0.418765293 1.538593949 0.762869350 -0.256973687 0.370456422
#> [986] 2.451956272 -0.513617909 -0.246875031 -0.126422669 -1.580391031
#> [991] 0.882649310 0.085424287 0.119481942 -0.031228133 -1.036315771
#> [996] 0.209135738 0.383954776 -0.495887324 2.307715949 -1.250153766