首页 文章

系列相关系数计算

提问于
浏览
0

我想分析R中的默认数据集(mtcars数据集) . 我有兴趣根据以下规则创建相关系数列 . 仅在“mpg”和“wt”之间的前三个观测值((即,行1,2,3))的相关系数,然后离开第一行,再次计算下三个观测值之间的相关系数(即,第2,3行, 4)在mpg和wt之间然后离开前两行,再次计算mpg和wt之间的下三个观察值(即,行3,4,5)之间的相关系数,依此类推直到结束 . 例如

cor(mtcars$mpg[c(1,2,3)],mtcars$wt[c(1,2,3)])
cor(mtcars$mpg[c(2,3,4)],mtcars$wt[c(2,3,4)])
cor(mtcars$mpg[c(3,4,5)],mtcars$wt[c(3,4,5)]);

等等 . 任何人都可以帮助如何使用循环等自动化此R代码 .

Example,看看我是如何需要输出的,我已经在excel中完成了但我需要在R中完成它

2 回答

  • 1

    cor(mtcars$mpg[c(1,2,3)],mtcars$wt[c(1,2,3)]) 的值是-0.8884586;但是,问题中输出图像的“关联”列中的第一个值不是这样,因此相对于所需内容的描述,所显示的图像中存在一些错误 . 我们假设描述是正确的,而样本输出则不是 .

    尝试滚动申请, rollapply . 它将函数 cor2 应用于宽度为3的滚动窗口. align = "left" 表示它使用当前行和接下来的2行,以便NA值显示在问题中的图像中 . fill = NA 使它为最后2个元素生成NA值,因为这些元素不再有3个元素 .

    library(zoo)
    
    mtcars2 <- mtcars[c("mpg", "wt")]
    cor2 <- function(x) cor(x[, 1], x[, 2])
    transform(mtcars2, cor = rollapply(mtcars2, 3, cor2, by.column = FALSE,  
       align = "left", fill = NA))
    

    赠送:

    mpg    wt         cor
    Mazda RX4           21.0 2.620 -0.88845855
    Mazda RX4 Wag       21.0 2.875 -0.82589964
    Datsun 710          22.8 2.320 -0.87097656
    Hornet 4 Drive      21.4 3.215 -0.99520846
    Hornet Sportabout   18.7 3.440 -0.99985063
    Valiant             18.1 3.460 -0.99534538
    Duster 360          14.3 3.570 -0.97267882
    Merc 240D           24.4 3.190 -0.90784130
    Merc 230            22.8 3.150 -0.96247218
    Merc 280            19.2 3.440 -0.86602540
    Merc 280C           17.8 3.440 -0.99308187
    Merc 450SE          16.4 4.070 -0.05428913
    Merc 450SL          17.3 3.730 -0.96311366
    Merc 450SLC         15.2 3.780 -0.99534934
    Cadillac Fleetwood  10.4 5.250  0.05301502
    Lincoln Continental 10.4 5.424 -0.98658763
    Chrysler Imperial   14.7 5.345 -0.96899291
    Fiat 128            32.4 2.200  0.44730718
    Honda Civic         30.4 1.615 -0.86317499
    Toyota Corolla      33.9 1.835 -0.94182141
    Toyota Corona       21.5 2.465 -0.99341821
    Dodge Challenger    15.5 3.520 -0.94720046
    AMC Javelin         15.2 3.435  0.21168794
    Camaro Z28          13.3 3.840 -0.90670560
    Pontiac Firebird    19.2 3.845 -0.99864434
    Fiat X1-9           27.3 1.935 -0.99939736
    Porsche 914-2       26.0 2.140 -0.99630829
    Lotus Europa        30.4 1.513 -0.99962223
    Ford Pantera L      15.8 3.170 -0.93453339
    Ferrari Dino        19.7 2.770 -0.96372018
    Maserati Bora       15.0 3.570          NA
    Volvo 142E          21.4 2.780          NA
    

    另请参阅此SO帖子,除了在data.table上下文中类似之外:Rolling correlation with data.table

  • 0

    我不清楚你为什么想要计算看起来像我在 3 行/观察窗口内滚动相关的内容,但你可以在基数R中做这样的事情:

    x <- lapply(seq(1, nrow(mtcars) - 2), function(x) seq(x, x + 2))
    

    这里 xlist ,其中包含作为条目的行/观察,我们根据这些条目计算相关性 .

    df <- do.call(rbind, lapply(x, function(x) cor(mtcars$mpg[x], mtcars$wt[x])))
    df;
    #        [,1]
    #[1,] -0.88845855
    #[2,] -0.82589964
    #[3,] -0.87097656
    #[4,] -0.99520846
    #[5,] -0.99985063
    #[6,] -0.99534538
    #[7,] -0.97267882
    #[8,] -0.90784130
    #[9,] -0.96247218
    #[10,] -0.86602540
    #[11,] -0.99308187
    #[12,] -0.05428913
    #[13,] -0.96311366
    #[14,] -0.99534934
    #[15,]  0.05301502
    #[16,] -0.98658763
    #[17,] -0.96899291
    #[18,]  0.44730718
    #[19,] -0.86317499
    #[20,] -0.94182141
    #[21,] -0.99341821
    #[22,] -0.94720046
    #[23,]  0.21168794
    #[24,] -0.90670560
    #[25,] -0.99864434
    #[26,] -0.99939736
    #[27,] -0.99630829
    #[28,] -0.99962223
    #[29,] -0.93453339
    #[30,] -0.96372018
    

相关问题