簡體   English   中英

R - 不同數據幀中變量的線性線性回歸

[英]R - Linear linear regression with variables in different dataframes

我有 4 個大小相同的大矩陣 A、B、C 和 D。每個矩陣有 n 個樣本(列)和 n 個觀察值(行)。

A <- structure(list(S1 = c(0L, 0L, 1L, 1L), S2 = c(0L, 1L, 0L, 0L), S3 = c(0L, 0L, 0L, 1L)), class = "data.frame", row.names = c("Ob1", "Ob2", "Ob3", "Ob4"))
#        S1  S2  S3
# Ob1     0   0   0
# Ob2     0   1   0
# Ob3     1   0   0
# Ob4     1   0   1

B <- structure(list(S1 = c(0L, 1L, 1L, 1L), S2 = c(0L, 8L, 0L, 0L), S3 = c(0L, 0L, 0L, 1L)), class = "data.frame", row.names = c("Ob1", "Ob2", "Ob3", "Ob4"))
#        S1  S2  S3
# Ob1     0   0   0
# Ob2     1   8   0
# Ob3     1   0   0
# Ob4     1   0   1

C <- structure(list(S1 = c(0L, 0L, 4L, 1L), S2 = c(2L, 1L, 0L, 2L), S3 = c(0L, 0L, 0L, 1L)), class = "data.frame", row.names = c("Ob1", "Ob2", "Ob3", "Ob4"))
#        S1  S2  S3
# Ob1     0   2   0
# Ob2     0   1   0
# Ob3     4   0   0
# Ob4     1   2   1

D <-  structure(list(S1 = c(0L, 0L, 4L, 1L), S2 = c(8L, 1L, 5L, 0L), S3 = c(0L, 0L, 0L, 1L)), class = "data.frame", row.names = c("Ob1", "Ob2", "Ob3", "Ob4"))
#        S1  S2 S3
# Ob1     0   8   0
# Ob2     0   1   0
# Ob3     4   5   0
# Ob4     1   0   1

每個矩陣包含一個不同的變量。 我想對每個樣本執行 4 個變量的線性回歸並觀察矩陣。 我不想要任何樣本和觀察值組合之間的線性回歸,只是矩陣 A 中第 1 列和第 1 行形式的成對回歸將與矩陣 B、C 和 D 中的第 1 列和第 1 行相匹配; 第 2 列和第 2 行,第 2 列和第 2 行,依此類推。

lm model:

lm(A ~ B * C + D)

我想:

lm(A$S1_Obs1 ~ B$S1_Obs1 * C$S1_Obs1 + D$S1_Obs1)
lm(A$S1_Obs2 ~ B$S1_Obs2 * C$S1_Obs2 + D$S1_Obs2)
lm(A$S1_Obs3 ~ B$S1_Obs3 * C$S1_Obs3 + D$S1_Obs3)

lm(A$S2_Obs1 ~ B$S2_Obs1 * C$S2_Obs1 + D$S2_Obs1)
lm(A$S2_Obs2 ~ B$S2_Obs2 * C$S2_Obs2 + D$S2_Obs2)
lm(A$S2_Obs3 ~ B$S2_Obs3 * C$S2_Obs3 + D$S2_Obs3)

...

任何幫助表示贊賞。

我們可以使用asplit按行拆分,然后通過循環 Map 中的每個拆分元素來構造線性Map

out <- Map(function(a, b, c, d) lm(a ~ b * c + d),
      asplit(A, 1), asplit(B, 1), asplit(C, 1), asplit(D, 1))

這是一種使用purrr package 的方法,它也分配名稱:

library(purrr)
seq_along(A) %>%
  map(~ lm(A[.] ~ B[.] * C[.] + D[.])) %>%
  set_names(map(seq_along(.),
                ~ arrayInd(.x, dim(A)) %>%
                    paste(collapse = "_")))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM