R에서 일정한 행 합계를 사용하여 임의 행렬 만들기

Jesse John 2023년6월21일
R에서 일정한 행 합계를 사용하여 임의 행렬 만들기

이 기사에서는 합계가 모든 행에 대해 일정하도록 각 행에서 임의로 선택된 음수가 아닌 값으로 행렬을 만드는 방법을 살펴봅니다.

간단하게 하기 위해 모든 행의 합이 1인 경우를 가정합니다. 행 벡터에 임의의 숫자를 곱하여 해당 숫자를 행 합계로 얻을 수 있습니다.

R에서 일정한 행 합계를 사용하여 임의 행렬 만들기

각 행에 4개의 요소가 있다고 가정합니다. 1보다 큰 양의 정수가 될 수 있습니다.

백분위수를 나타내는 0에서 100까지의 범위에서 시작합니다. 무작위로 선택한 3개의 컷 포인트를 사용하여 이 범위를 4개 부분으로 나눕니다.

이를 위해 해당 범위에서 임의로 3개의 점을 선택했습니다. 간단히 하기 위해 3개의 개별 숫자를 선택합니다.

선택한 컷 포인트를 내림차순으로 정렬합니다. 범위를 잘라낼 백분위수입니다.

컷 포인트를 100으로 나누겠습니다. 이렇게 하면 컷 포인트가 0에서 1까지의 십진수로 표시됩니다.

다음과 같이 1의 4개 섹션을 얻습니다.

  1. 1에서 첫 번째(가장 큰) 컷 포인트를 빼서 첫 번째 요소를 얻습니다.
  2. 첫 번째 절단점에서 두 번째 절단점을 빼서 두 번째 요소를 얻습니다.
  3. 두 번째 절단점에서 세 번째(가장 작은) 절단점을 빼서 세 번째 요소를 얻습니다.
  4. 세 번째 절단점에서 0을 빼서 네 번째 요소를 얻습니다.

이 숫자는 하나의 행을 구성합니다. 합하면 1이 됩니다. 필요한 행 수만큼 이 과정을 반복해야 합니다.

매트릭스용 코드

이제 각 행의 합이 1인 5행 4열의 임의 행렬을 얻는 코드를 살펴보겠습니다.

예제 코드:

# The final matrix.
# It begins as an empty matrix. It has 4 columns in our example.
Mx = matrix(byrow= TRUE, ncol = 4, nrow = 0)

# The number of rows. 5 rows in our example.
# We will repeat the code as many times as the number of rows we need.
for(RowNum in 1:5) {
  # Cut points. With 3 cuts, we will get 4 elements.
  # Randomly choose 3 different integers from the sequence 0 to 100.
  cuts = sample(0:100, 3, replace = FALSE)
  # Sort the cut points in descending order.
  cuts.sort = sort(cuts, decreasing = TRUE)

  # Convert the sorted cut points to decimals from 0 to 1.
  cuts.dec = cuts.sort/100

  # An empty vector to hold the current row that we will build.
  Elements = c()
  # The starting point for each cut.
  # The first cut starts at 1. Then resets this to its value.
  ElementStart = 1

  # Create each element.
  for(Cut in cuts.dec){
    Elements = c(Elements, (ElementStart-Cut))
    ElementStart = Cut
  }

  # Append the last element to get the full row.
  # This is from the last (smallest) cut value to 0.
  # (This vector can be multiplied by any number to get that number as the row sum.)
  Elements = c(Elements, cuts.dec[3])

  # Add the row to the matrix.
  Mx = rbind(Mx, Elements)
  rownames(Mx) = NULL
}

# Print the matrix.
print(Mx)

# Check that all 5 rows sum to 1.
table(apply(Mx, 1, sum))

출력:

> # Print the matrix.
> print(Mx)
     [,1] [,2] [,3] [,4]
[1,] 0.38 0.36 0.16 0.10
[2,] 0.41 0.15 0.03 0.41
[3,] 0.08 0.50 0.35 0.07
[4,] 0.17 0.15 0.06 0.62
[5,] 0.07 0.09 0.23 0.61
>
> # Check that all 5 rows sum to 1.
> table(apply(Mx, 1, sum))

1
5
작가: Jesse John
Jesse John avatar Jesse John avatar

Jesse is passionate about data analysis and visualization. He uses the R statistical programming language for all aspects of his work.

관련 문장 - R Matrix