Explaining the Source Code for Calculating Stationary Distribution in R

Click For Summary

Discussion Overview

The discussion revolves around understanding a specific R source code for calculating the stationary distribution of a transition matrix using eigenvectors. Participants explore the functionality of the code and the rationale behind certain coding choices.

Discussion Character

  • Technical explanation, Conceptual clarification, Debate/contested

Main Points Raised

  • One participant seeks clarification on the use of the dollar sign and the vector keyword in the R code for extracting the first column of the eigenvectors.
  • Another participant suggests that checking the documentation of the eigen function is essential for understanding its output.
  • Some participants propose that the original code is correct and that the alternative suggestion may not work as intended.
  • Resources for learning R and understanding its functions are shared, including links to tutorials and documentation.

Areas of Agreement / Disagreement

Participants express differing views on the necessity and correctness of the original code versus the proposed alternative. There is no consensus on which approach is superior or whether the alternative would function as intended.

Contextual Notes

Participants reference the R documentation for the eigen function, indicating that understanding its output is crucial for proper implementation. There may be assumptions about familiarity with R programming that are not explicitly stated.

Who May Find This Useful

Readers interested in R programming, particularly those working with Markov chains and eigenvalues, may find this discussion relevant.

user366312
Gold Member
Messages
88
Reaction score
3
TL;DR
Kindly explain the source code in R which meant for calculating stationary distribution of a transition matrix.
Summary: Kindly explain the source code in R which meant for calculating stationary distribution of a transition matrix.

I am trying to understand the following source code meant for finding stationary distribution of a matrix:

[CODE title="R code" highlight="5"]### Stationary distribution of discrete-time Markov chain
### (uses eigenvectors)
stationary <- function(mat)
{
x = eigen(t(mat))$vectors[,1]
as.double(x/sum(x))
}[/CODE]

I tested the following source code myself:

[CODE title="R code" highlight="6,16"]> rm(list=ls())
>
> P <- matrix(c(0.66, 0.34,
+ 0.66, 0.34), nrow=2, ncol=2, byrow = TRUE)
>
> x <- eigen(t(P))
> x
$values
[1] 1 0

$vectors
[,1] [,2]
[1,] 0.8889746 -0.7071068
[2,] 0.4579566 0.7071068

> y <- x$vectors[,1]
> y
[1] 0.8889746 0.4579566
> [/CODE]

looks like the command
Code:
y <- x$vectors[,1]
is selecting the 1st column of the matrix.

Why wasn't that simply written like the following?

[CODE title="R code"]
### Stationary distribution of discrete-time Markov chain
### (uses eigenvectors)
stationary <- function(mat)
{
x = eigen(t(mat))
y = x[,1]
as.double(y/sum(y))
}
[/CODE]

What was the reason for introduction of a dollar sign and vector keyword?
 
Last edited:
Technology news on Phys.org
My suggestion is to begin reading up on R or checking out some online tutorials

https://www.tutorialspoint.com/r/index.htm
@FactChecker suggestion in your other thread is a great technique for teasing out what these constructs mean.

There’s also the Rosetta Code website with examples of R doing various tasks. The code may or may not be the best implementation of any task but they are instructive

http://rosettacode.org/wiki/Category:R
And lastly the R reference on the eig function

https://www.rdocumentation.org/packages/pracma/versions/1.9.9/topics/eig
 
  • Like
Likes   Reactions: FactChecker
user366312 said:
What was the reason for introduction of a dollar sign and vector keyword?
That is what the documentation of the eigen function says that it returns. (see R documentation of eigen function)
I don't think that your code will work. When you encounter an unfamiliar function, it is always good to check the documentation.
 
  • Like
Likes   Reactions: jedishrfu
FactChecker said:
That is what the documentation of the eigen function says that it returns. (see R documentation of eigen function)
I don't think that your code will work. When you encounter an unfamiliar function, it is always good to check the documentation.

Got it thanks.
 

Similar threads

Replies
1
Views
1K
Replies
1
Views
3K
Replies
1
Views
1K
  • · Replies 5 ·
Replies
5
Views
2K
  • · Replies 1 ·
Replies
1
Views
2K
Replies
2
Views
3K
Replies
1
Views
3K
  • · Replies 12 ·
Replies
12
Views
3K
  • · Replies 1 ·
Replies
1
Views
2K
  • · Replies 11 ·
Replies
11
Views
3K