2015-06-16 1 views
1

Я ведущий факторный анализ нескольких переменных в R, используя factanal() (но я открыт для использования других пакетов). Я хочу определить факторный коэффициент каждого случая, но я хочу, чтобы оценки факторов были нестандартными и по исходной метрике входных переменных. Когда я запускаю факторный анализ и получаю оценки факторов, они стандартизируются с нормальным распределением среднего значения = 0, SD = 1 и не находятся на исходной метрике входных переменных. Как я могу получить нестандартные оценки факторов, которые имеют тот же показатель, что и входные переменные? В идеале это означало бы аналогичное среднее значение, sd, диапазон и распределение.Получите оценки нестандартного коэффициента из факторного анализа в R

Ранее я спросил similar question, но ответ респондента включал в себя масштабирование стандартизованных (то есть нормально распределенных) коэффициентов. Обратите внимание: я не хочу преобразовывать стандартизованные множители факторов в нестандартные, потому что распределения моих индикаторов ненормальны (т. Е. Нормальное распределение стандартизованных множителей не может быть легко преобразовано в исходную метрику моих показателей). Другими словами, я бы хотел оценить нестандартные оценки факторов по исходной метрике индикаторов без предварительной оценки их по стандартизованной метрике.

Кроме того, есть некоторые недостающие данные. Как я могу получить (нестандартные) множители факторов для всех случаев, даже тех, у кого нет данных по всем пунктам?

Вот небольшой пример:

library(psych) 

v1 <- c(1,1,1,NA,1,1,1,1,1,1,3,3,3,3,3,4,5,6) 
v2 <- c(1,2,1,1,1,1,2,1,2,1,3,4,3,3,3,4,6,5) 
v3 <- c(3,3,3,3,3,1,1,1,1,1,1,1,1,1,1,5,4,6) 
v4 <- c(3,3,4,3,3,1,1,2,NA,1,1,1,2,1,1,5,6,4) 
v5 <- c(1,1,1,1,1,3,3,3,3,3,1,1,1,1,1,6,4,5) 
v6 <- c(1,1,1,2,1,3,3,3,4,3,1,1,NA,2,1,6,5,4) 
m1 <- cbind(v1,v2,v3,v4,v5,v6) 

m1FactorScores <- factanal(~v1+v2+v3+v4+v5+v6, factors = 1, scores = "Bartlett", na.action="na.exclude")$scores 

describe(m1) #means~2.3, sds~1.5 
describe(m1FactorScores) #mean=0, sd=1 

Приведенные данные являются лишь небольшой пример. Мои фактические данные не являются однозначными/порядковыми данными. Это прогнозы прохождения мимо футболистов из разных источников. Я надеюсь, что «скрытое среднее» будет более точно прогнозировать проходящие ярды игроков, чем среднее, потому что оно отбросит уникальные предубеждения каждого источника. Однако данные весьма положительно искажены, а принудительная скрытая переменная и ее коэффициенты, которые обычно распределяются, приводят к невероятно высоким значениям для многих игроков (например, более 6000 ярдов, проходящих в следующем сезоне).

ответ

1

Проблема в следующем: ответ на ваш предыдущий вопрос по-прежнему верен. Зафиксируйте ли масштаб скрытой переменной заранее или измените масштаб, стандартизованная переменная не имеет значения, потому что результирующие баллы будут одинаковыми.

Вот иллюстрация с использованием lavaan, включая оба варианта. Крепление факторных нагрузки и перехватывает не поддерживаются в factanal насколько я знаю:

library(lavaan) 

v1 <- c(1,1,1,2,1,1,1,1,1,1,3,3,3,3,3,4,5,6) 
v2 <- c(1,2,1,1,1,1,2,1,2,1,3,4,3,3,3,4,6,5) 
v3 <- c(3,3,3,3,3,1,1,1,1,1,1,1,1,1,1,5,4,6) 
v4 <- c(3,3,4,3,3,1,1,2,NA,1,1,1,2,1,1,5,6,4) 
v5 <- c(1,1,1,1,1,3,3,3,3,3,1,1,1,1,1,6,4,5) 
v6 <- c(1,1,1,2,1,3,3,3,4,3,1,1,NA,2,1,6,5,4) 
m1 <- data.frame(v1,v2,v3,v4,v5,v6) 

# Option 1: fixing the scale according to v1 
mean(v1) # 2.278 
var(v1) # 2.448 

fix.model <- "f1 =~ v1 + v2 + v3 + v4 + v5 + v6 
       f1 ~ 2.278*1 
       f1 ~~ 2.448*f1" 

fix.fit <- lavaan(fix.model, data = m1, meanstructure=TRUE, missing="fiml", 
        int.ov.free = TRUE, int.lv.free = TRUE, auto.var = TRUE) 

# Option 2: fixing the scale to standardize the latent variable 
std.model <- "f1 =~ v1 + v2 + v3 + v4 + v5 + v6 
       f1 ~ 0*1 
       f1 ~~ 1*f1" 

std.fit <- lavaan(std.model, data = m1, meanstructure=TRUE, missing="fiml", 
        int.ov.free = TRUE, int.lv.free = TRUE, auto.var = TRUE) 

# extract scores 
fix.scores <- predict(fix.fit)[,1] 
std.scores <- predict(std.fit)[,1] 
rescaled <- std.scores * sd(v1) + mean(v1) 

Обратите внимание на поразительное сходство между fix.scores и rescaled баллами.

cbind(std.scores, rescaled, fix.scores) 

#  std.scores rescaled fix.scores 
# [1,] -0.8220827 0.9916157 0.9917591 
# [2,] -0.8113431 1.0084179 1.0085627 
# [3,] -0.8098929 1.0106869 1.0108318 
# [4,] -0.5844884 1.3633359 1.3635066 

В целях подгонки модели шкала, выбранная для скрытой переменной, является полностью произвольной. Распределенные предположения для скрытой переменной (т. Е. Нормальной) и переменных индикатора (то есть условно нормальные) одинаковы независимо от вашего выбора и независимо от фактического распределения ваших показателей.

Если ваши индикаторы нарушают предположения о распределении модели, это отразится на плохом приближении модели или медленной конвергенции, но не на двух подходах, дающих разные результаты.

+0

Спасибо за ответ. Обратите внимание, что масштаб скрытой переменной не должен быть произвольным. Например, скрытая переменная может быть на метрике ее индикаторов, если вы устанавливаете среднее значение нагрузок индикаторов равным единице, а среднее их перехватов должно быть равным нулю (т., кодирование эффектов: [Little, Slegers, & Card, 2006] (http://www.tandfonline.com/doi/abs/10.1207/s15328007sem1301_3)). Поэтому я предполагаю, что я спрашиваю: возможно ли оценить скрытую переменную (и ее множители), используя кодирование эффектов * и * сохраняя такое же ненормальное распределение, что и индикаторы? – dadrivr

+0

Да, вы правы, конечно: Кодирование эффектов - еще один возможный способ идентификации параметров модели. Однако я не уверен, почему вы хотите, чтобы ваша скрытая переменная была ненормальной. Несмотря на то, что ваши индикаторы могут иметь искаженное распределение, ваш фактор не обязательно должен быть ненормальным. В качестве примера представьте себе набор индикаторов, которые более или менее «трудны». Распределение таких индикаторов может сильно искажаться, но вполне разумно предположить нормальный базовый фактор. – SimonG

+0

Другие примеры включают категориальные и порядковые индикаторы (например, регрессию пробит), в которых скрытый фактор также является нормальным, но подключен к индикаторам через функцию связи. В заключение я не вижу никаких признаков того, что ваша модель требует неестественной скрытой переменной. Фактически, искаженное распределение индикаторов типа Ликерта является скорее нормой, чем исключением. Как я уже указывал выше, предположение о нормальном базовом факторе в таких случаях совершенно оправдано. Поэтому я думаю, что ваш предыдущий вопрос (и моя иллюстрация выше) должен соответствовать вашей цели. – SimonG