2014-06-23 1 views
2

Я пытаюсь построить выходы анализа пути, предложенные Дьюи и Лу (1959) в R.Построение анализа траектории Дьюи и Лу в качестве диаграммы траектории в R

require(agricolae) 
require(Hmisc) 

data(wilt) 
data(soil) 
x<-soil[,c(3,12,14,20)] 
y<-wilt[,14] 
data <- cbind(y,x) 
#Correlation of independant variables 
cor.x <- rcorr(as.matrix(x))$r 
#Correlation of dependant variable with all the independant variables 
cor.y <- as.data.frame(t(subset(rcorr(as.matrix(cbind(y,x)))$r, select = c(y))))[,-1] 
#Path Analysis 
Path <- path.analysis(cor.x,cor.y) 
#Direct Effects 
diag(Path$Coeff) 
#Residual Effects 
Path$Residual 

Я хочу построить прямое влияние независимых переменных на зависимую переменную y и корреляции между зависимыми переменными, как следует наряду с остаточным эффектом.

enter image description here

Я попытался semPlot и path.diagram {sem} и qgraph.lavaan, но сюжет только модель. pathdiagram не отображает метки границ (коэффициенты пути и корреляции). Как это сделать в R?

Это до тех пор, пока я не использовал пакет диаграмм.

par(mar = c(1, 1, 1, 1)) 
openplotmat() 
# Get plot coordinates 
elpos <- coordinates (c(2, length(cor.y))) 
# adjust coordinates for Residual 
elpos[2,1] <- abs((elpos[1,1]+elpos[1,2])/2) 


#Specify Arrow positions 
#1 Residual to Dependent 
ft1 <- matrix(ncol = 2, byrow = TRUE, data = c(1, 2)) 
#2 Independent to dependent 
ft2 <- matrix(ncol=2, byrow = FALSE, 
       data= c(seq((2+length(cor.y)))[3:(length(cor.y)+2)], rep(2, length(cor.y)))) 
#3 For cor.x 
fromto_CU <- t(combn(seq((2+length(cor.y)))[3:(length(cor.y)+2)],2)) 
#4 For path distances 
fromto_ST <- rbind(ft1,ft2) 

# Plot Path distance arrows 
nr <- nrow(fromto_ST) 
arrpos <- matrix(ncol = 2, nrow = nr) 
for (i in 1:nr) 
    arrpos[i, ] <- straightarrow (to = elpos[fromto_ST[i, 2], ], 
           from = elpos[fromto_ST[i, 1], ], 
           lwd = 2, arr.pos = 0.6, arr.length = 0.5) 

#Label residual path distance arrow 
text(arrpos[1, 1], arrpos[1, 2] + 0.05, 
    paste("P", "X", nrow(cor.x)+1," = ", round(Path$Residual, 2), sep=""), cex=0.6) 

#Label path distance arrows 
nr <- nrow(arrpos) 
for(i in 2:nr){ 
    text(arrpos[i, 1], arrpos[i, 2] + 0.05, 
     paste("P", "X", i-1," = ", round(diag(Path$Coeff)[i-1], 2), sep=""), cex=0.6) 
} 

# Plot correlation arrows direction 1 
nr <- nrow(fromto_CU) 
arrpos <- matrix(ncol = 2, nrow = nr) 
for (i in 1:nr) 
    arrpos[i, ] <- curvedarrow (to = elpos[fromto_CU[i, 2], ], 
           from = elpos[fromto_CU[i, 1], ], 
           lwd = 2, arr.pos = 0.8, arr.length = 0.5, curve = 0.35) 

# Plot correlation arrows - direction 2 
nr <- nrow(fromto_CU) 
arrpos <- matrix(ncol = 2, nrow = nr) 
for (i in 1:nr) 
    arrpos[i, ] <- curvedarrow (to = elpos[fromto_CU[i, 1], ], 
           from = elpos[fromto_CU[i, 2], ], 
           lwd = 2, arr.pos = 0.8, arr.length = 0.5, curve = -0.35) 

# Create combinations of cor.x for labelling rxy in correlation arrows 
rcomb <- as.data.frame(t(combn(seq(nrow(cor.x)),2))) 
rcomb <- paste(rcomb$V1,rcomb$V2, sep="") 

# Label correlation arrows 
nr <- nrow(fromto_CU) 
arrpos <- matrix(ncol = 2, nrow = nr) 
for (i in 1:nr) 
    arrpos[i, ] <- curvedarrow (to = elpos[fromto_CU[i, 1], ], 
           from = elpos[fromto_CU[i, 2], ], 
           lwd = 2, arr.pos = 0.5, lcol = "transparent", arr.length = 0.5, curve = -0.35) 

nr <- nrow(arrpos) 
for(i in 1:nr){ 
    text(arrpos[i, 1], arrpos[i, 2] + 0.05, 
     paste("r", "X", rcomb[i]," = ", round(as.dist(cor.x)[i], 2), sep=""), cex=0.6) 
} 

# Label Residual 
textrect (elpos[1,], 0.09, 0.03,lab = "Residual", box.col = "white", 
      shadow.col = "grey", shadow.size = 0.005, cex = 1) 
# Label Dependent 
textrect (elpos[2,], 0.09, 0.03,lab = attributes(y)$class, box.col = "white", 
      shadow.col = "grey", shadow.size = 0.005, cex = 1) 
# Label independents 
nr <- nrow(elpos) 
for (i in 3:nr){ 
    textrect (elpos[i,], 0.09, 0.03,lab = colnames(x)[i-2], box.col = "white", 
      shadow.col = "grey", shadow.size = 0.005, cex = 1) 
} 

enter image description here

мне нужна помощь для

1) ПРОКЛАДОК на горизонтальную компоновке в diagram, так что сюжет выглядит как первый

2) прокладочных индексы в стрелки, такие как P X5, r , r etc. Расческа ination expression и paste в используемых циклах использует нотацию индексации как таковой, а не индексированный элемент.

+2

Было бы неплохо увидеть фактический код для построения графика, чтобы мы могли его исправить. –

+0

@GaborCsardi Честно говоря, я не знаю, с чего начать, но я добавил, какой код мне удалось бы управлять до сих пор, используя 'semPlot'. – Crops

+1

это можно сделать аккуратно в 'LateX', используя' tikz/pgf', вы можете подумать о переносе его на tex.stackexchange, если решение 'R' не представляется возможным – OdeToMyFiddle

ответ

1

В конечном итоге вы можете найти это быстрее, чтобы использовать инструменты, такие как text, чтобы разместить текст там, где вы хотите его на чертеже. Я не знаю, какие параметры используются для определения диагональных линий с помощью «P25 = -0.37» и подобных меток, но, исходя из предположения, что вы знаете координаты каждой строки (например, конечные точки), вы можете использовать plotrix:radialtext.

+0

Я искал что-то вроде сетевой диаграммы. – Crops

+0

Я обновил вопрос с помощью некоторого кода, используя инструменты 'diagram' и' text'. – Crops

 Смежные вопросы

  • Нет связанных вопросов^_^